Page MenuHomeGitPull.it

D62.1765105285.diff
No OneTemporary

Size
44 KB
Referenced Files
None
Subscribers
None

D62.1765105285.diff

diff --git a/src/it/reyboz/bustorino/adapters/PalinaAdapter.java b/src/it/reyboz/bustorino/adapters/PalinaAdapter.java
--- a/src/it/reyboz/bustorino/adapters/PalinaAdapter.java
+++ b/src/it/reyboz/bustorino/adapters/PalinaAdapter.java
@@ -32,6 +32,7 @@
import it.reyboz.bustorino.backend.Palina;
import it.reyboz.bustorino.backend.Passaggio;
import it.reyboz.bustorino.backend.Route;
+import it.reyboz.bustorino.backend.utils;
/**
* This once was a ListView Adapter for BusLine[].
diff --git a/src/it/reyboz/bustorino/backend/ArrivalsFetcher.java b/src/it/reyboz/bustorino/backend/ArrivalsFetcher.java
--- a/src/it/reyboz/bustorino/backend/ArrivalsFetcher.java
+++ b/src/it/reyboz/bustorino/backend/ArrivalsFetcher.java
@@ -20,8 +20,6 @@
// "arrivals" è più usato di "transit" o simili, e chi sono io per mettermi a dibattere con gli inglesi?
-import java.util.ArrayList;
-import java.util.List;
import java.util.concurrent.atomic.AtomicReference;
public interface ArrivalsFetcher extends Fetcher {
@@ -45,10 +43,10 @@
* @param stopID stop ID, in normalized form.
* @param res result code (will be set by this method)
* @return arrival times
- * @see it.reyboz.bustorino.backend.Fetcher.result
+ * @see Result
* @see FiveTNormalizer
*/
- Palina ReadArrivalTimesAll(String stopID, AtomicReference<result> res);
+ Palina ReadArrivalTimesAll(String stopID, AtomicReference<Result> res);
/**
* Get the determined source for the Fetcher
diff --git a/src/it/reyboz/bustorino/backend/Fetcher.java b/src/it/reyboz/bustorino/backend/Fetcher.java
--- a/src/it/reyboz/bustorino/backend/Fetcher.java
+++ b/src/it/reyboz/bustorino/backend/Fetcher.java
@@ -30,7 +30,7 @@
* EMPTY_RESULT_SET: the response is valid and indicates there are no stops\routes\"passaggi"\results for your query<br>
* QUERY_TOO_SHORT: input more characters and retry.
*/
- enum result {
+ enum Result {
OK, CLIENT_OFFLINE, SERVER_ERROR, SETUP_ERROR,PARSER_ERROR, EMPTY_RESULT_SET, QUERY_TOO_SHORT,SERVER_ERROR_404
}
}
diff --git a/src/it/reyboz/bustorino/backend/FiveTAPIFetcher.java b/src/it/reyboz/bustorino/backend/FiveTAPIFetcher.java
--- a/src/it/reyboz/bustorino/backend/FiveTAPIFetcher.java
+++ b/src/it/reyboz/bustorino/backend/FiveTAPIFetcher.java
@@ -37,7 +37,7 @@
final static LinkedList<String> apiDays = new LinkedList<>(Arrays.asList("dom","lun","mar","mer","gio","ven","sab"));
@Override
- public Palina ReadArrivalTimesAll(String stopID, AtomicReference<result> res) {
+ public Palina ReadArrivalTimesAll(String stopID, AtomicReference<Result> res) {
//set the date for the request as now
Palina p = new Palina(stopID);
@@ -46,24 +46,19 @@
String response = performAPIRequest(QueryType.ARRIVALS,stopID,res);
if(response==null) {
- if(res.get()==result.SERVER_ERROR_404) {
- Log.w(DEBUG_NAME,"Got 404, either the server failed, or the stop was not found, or the hack is not working anymore");
- res.set(result.EMPTY_RESULT_SET);
+ if(res.get()== Result.SERVER_ERROR_404) {
+ Log.w(DEBUG_NAME,"Got 404, either the server failed, or the stop was not found, or the address is wrong");
+ res.set(Result.EMPTY_RESULT_SET);
}
return p;
}
- try {
- List<Route> routes = parseArrivalsServerResponse(response, res);
- for(Route r: routes){
+ List<Route> routes = parseArrivalsServerResponse(response, res);
+ if(res.get()==Result.OK) {
+ for (Route r : routes) {
p.addRoute(r);
}
- } catch (JSONException ex){
- res.set(result.PARSER_ERROR);
- Log.w(DEBUG_NAME, "Couldn't get the JSON repr of:\n"+response);
- return null;
+ p.sortRoutes();
}
- res.set(result.OK);
- p.sortRoutes();
return p;
}
@@ -72,7 +67,7 @@
return Passaggio.Source.FiveTAPI;
}
- List<Route> parseArrivalsServerResponse(String JSONresponse, AtomicReference<result> res) throws JSONException{
+ List<Route> parseArrivalsServerResponse(String JSONresponse, AtomicReference<Result> res){
ArrayList<Route> routes = new ArrayList<>(3);
/*
Slight problem:
@@ -90,16 +85,20 @@
try{
arr = new JSONArray(JSONresponse);
String type;
- Route.Type routetype;
+ Route.Type routetype = Route.Type.UNKNOWN;
for(int i =0; i<arr.length();i++){
JSONObject lineJSON = arr.getJSONObject(i);
- type = lineJSON.getString("lineType");
String lineName=FiveTNormalizer.routeDisplayToInternal(lineJSON.getString("name"));
+ if(lineJSON.has("lineType")) {
+ type = lineJSON.getString("lineType");
+
+ //set the type of line
+ if(type.equals("EXTRA"))
+ routetype = Route.Type.LONG_DISTANCE_BUS;
+ else routetype = Route.Type.BUS;
+ }
+
- //set the type of line
- if(type.equals("EXTRA"))
- routetype = Route.Type.LONG_DISTANCE_BUS;
- else routetype = Route.Type.BUS;
//Cut out the spaces in the line Name
//temporary fix
//lineName = lineName.replace(" ","").replace("/","B");
@@ -120,11 +119,11 @@
} catch (JSONException e) {
e.printStackTrace();
- res.set(result.PARSER_ERROR);
+ res.set(Result.PARSER_ERROR);
return routes;
}
Collections.sort(routes);
- res.set(result.OK);
+ res.set(Result.OK);
return routes;
}
@@ -143,7 +142,7 @@
continue;
}
String direction = branchJSON.getString("direction");
- String stops = branchJSON.getJSONObject("branchDetail").getString("stops");
+
String lineName = branchJSON.getString("lineName");
Route.Type t = Route.Type.UNKNOWN;
//parsing description
@@ -190,16 +189,32 @@
festivo = Route.FestiveInfo.FERIALE;
}
if(t == Route.Type.UNKNOWN &&(lineName.trim().equals("10")|| lineName.trim().equals("15"))) t= Route.Type.TRAM;
- if(direction.contains("-")){
+ //check for the presence of parenthesis
+ String preParenthesis, postParenthesis;
+ boolean hasParenth = false;
+ if (description.contains("(")){
+ hasParenth =true;
+ preParenthesis = description.split("\\(")[0];
+ postParenthesis = description.split("\\(")[1];
+ } else {
+ preParenthesis = description;
+ postParenthesis = "";
+ }
+ if(preParenthesis.contains("-")){
//Sometimes the actual filtered direction still remains the full line (including both extremes)
- direction = direction.split("-")[1];
+ preParenthesis = preParenthesis.split("-")[1];
}
- Route r = new Route(lineName.trim(),direction.trim(),t,new ArrayList<>());
+ final String directionFinal = hasParenth? preParenthesis.trim() + " (" + postParenthesis : preParenthesis;
+ Route r = new Route(lineName.trim(),directionFinal.trim(),t,new ArrayList<>());
if(serviceDays.length>0) r.serviceDays = serviceDays;
r.festivo = festivo;
r.branchid = branchid;
r.description = description.trim();
- r.setStopsList(Arrays.asList(stops.split(",")));
+ //check if we have the stop list
+ if (branchJSON.has("branchDetail")) {
+ final String stops = branchJSON.getJSONObject("branchDetail").getString("stops");
+ r.setStopsList(Arrays.asList(stops.split(",")));
+ }
routes.add(r);
}
@@ -207,21 +222,21 @@
return routes;
}
- public List<Route> getDirectionsForStop(String stopID, AtomicReference<result> res) {
+ public List<Route> getDirectionsForStop(String stopID, AtomicReference<Result> res) {
String response = performAPIRequest(QueryType.DETAILS,stopID,res);
List<Route> routes;
try{
routes = parseDirectionsFromResponse(response);
- res.set(result.OK);
+ res.set(Result.OK);
} catch (JSONException | IllegalArgumentException e) {
e.printStackTrace();
- res.set(result.PARSER_ERROR);
+ res.set(Result.PARSER_ERROR);
routes = null;
}
return routes;
}
- public ArrayList<Stop> getAllStopsFromGTT(AtomicReference<result> res){
+ public ArrayList<Stop> getAllStopsFromGTT(AtomicReference<Result> res){
String response = performAPIRequest(QueryType.STOPS_ALL,null,res);
if(response==null) return null;
@@ -262,11 +277,11 @@
s.setAbsurdGTTPlaceName(placeName);
stopslist.add(s);
}
- res.set(result.OK);
+ res.set(Result.OK);
} catch (JSONException e) {
e.printStackTrace();
- res.set(result.PARSER_ERROR);
+ res.set(Result.PARSER_ERROR);
return null;
}
@@ -274,7 +289,7 @@
}
@Nullable
- public ArrayList<Route> getAllLinesFromGTT(AtomicReference<result> res){
+ public ArrayList<Route> getAllLinesFromGTT(AtomicReference<Result> res){
String resp = performAPIRequest(QueryType.LINES,null,res);
if(resp==null) {
@@ -306,10 +321,10 @@
}
//finish
- res.set(result.OK);
+ res.set(Result.OK);
} catch (JSONException e) {
e.printStackTrace();
- res.set(result.PARSER_ERROR);
+ res.set(Result.PARSER_ERROR);
return routes;
}
@@ -336,7 +351,7 @@
* @return a String which contains the result of the query, to be parsed
*/
@Nullable
- public static String performAPIRequest(QueryType t,@Nullable String stopID, AtomicReference<result> res){
+ public static String performAPIRequest(QueryType t,@Nullable String stopID, AtomicReference<Result> res){
URL u;
Map<String,String> param;
@@ -347,7 +362,7 @@
u = new URL(address);
} catch (UnsupportedEncodingException |MalformedURLException e) {
e.printStackTrace();
- res.set(result.PARSER_ERROR);
+ res.set(Result.PARSER_ERROR);
return null;
}
String response = networkTools.queryURL(u,res,param);
diff --git a/src/it/reyboz/bustorino/backend/FiveTAPIVolleyRequest.java b/src/it/reyboz/bustorino/backend/FiveTAPIVolleyRequest.java
--- a/src/it/reyboz/bustorino/backend/FiveTAPIVolleyRequest.java
+++ b/src/it/reyboz/bustorino/backend/FiveTAPIVolleyRequest.java
@@ -37,7 +37,7 @@
private ResponseListener listener;
final private String url,stopID;
- final private AtomicReference<Fetcher.result> resultRef;
+ final private AtomicReference<Fetcher.Result> resultRef;
final private FiveTAPIFetcher fetcher;
final private FiveTAPIFetcher.QueryType type;
@@ -88,12 +88,12 @@
return Response.error(new VolleyError("Invalid query type"));
}
} catch (JSONException e) {
- resultRef.set(Fetcher.result.PARSER_ERROR);
+ resultRef.set(Fetcher.Result.PARSER_ERROR);
//e.printStackTrace();
Log.w("FivetVolleyParser","JSON Exception in parsing response of: "+url);
return Response.error(new ParseError(response));
}
- if(resultRef.get()== Fetcher.result.PARSER_ERROR){
+ if(resultRef.get()== Fetcher.Result.PARSER_ERROR){
return Response.error(new ParseError(response));
}
final Palina p = new Palina(stopID);
diff --git a/src/it/reyboz/bustorino/backend/FiveTScraperFetcher.java b/src/it/reyboz/bustorino/backend/FiveTScraperFetcher.java
--- a/src/it/reyboz/bustorino/backend/FiveTScraperFetcher.java
+++ b/src/it/reyboz/bustorino/backend/FiveTScraperFetcher.java
@@ -56,7 +56,7 @@
}
@Override
- public Palina ReadArrivalTimesAll(final String stopID, final AtomicReference<result> res) {
+ public Palina ReadArrivalTimesAll(final String stopID, final AtomicReference<Result> res) {
Palina p = new Palina(stopID);
int routeIndex;
@@ -64,7 +64,7 @@
try {
responseInDOMFormatBecause5THaveAbsolutelyNoIdeaWhatJSONWas = networkTools.getDOM(new URL("http://www.5t.torino.it/5t/trasporto/arrival-times-byline.jsp?action=getTransitsByLine&shortName=" + URLEncoder.encode(stopID, "utf-8")), res);
} catch (Exception e) {
- res.set(result.PARSER_ERROR);
+ res.set(Result.PARSER_ERROR);
}
if(responseInDOMFormatBecause5THaveAbsolutelyNoIdeaWhatJSONWas == null) {
// result already set in getDOM()
@@ -76,28 +76,28 @@
// Tried in rete Edisu (it does Man In The Middle... asd)
Element span = doc.select("span").first();
if(span == null) {
- res.set(result.SERVER_ERROR);
+ res.set(Result.SERVER_ERROR);
return p;
}
String busStopID = grep("^(.+)&nbsp;", span.html());
if (busStopID == null) {
//Log.e("BusStop", "Empty busStopID from " + span.html());
- res.set(result.EMPTY_RESULT_SET);
+ res.set(Result.EMPTY_RESULT_SET);
return p;
}
// this also appears when no stops are found, but that case has already been handled above
Element error = doc.select("p.errore").first();
if (error != null) {
- res.set(result.SERVER_ERROR);
+ res.set(Result.SERVER_ERROR);
return p;
}
String busStopName = grep("^.+&nbsp;(.+)", span.html()); // The first "dot" is the single strange space character in the middle of "39{HERE→} {←HERE}PORTA NUOVA"
if (busStopName == null) {
//Log.e("BusStop", "Empty busStopName from " + span.html());
- res.set(result.SERVER_ERROR);
+ res.set(Result.SERVER_ERROR);
return p;
}
p.setStopName(busStopName.trim());
@@ -107,7 +107,7 @@
for (Element tr : trs) {
Element line = tr.select("td.line a").first();
if (!line.hasText()) {
- res.set(result.SERVER_ERROR);
+ res.set(Result.SERVER_ERROR);
return p;
}
@@ -121,7 +121,7 @@
// );
if (busLineName == null) {
- res.set(result.SERVER_ERROR);
+ res.set(Result.SERVER_ERROR);
return p;
}
@@ -164,7 +164,7 @@
}
p.sortRoutes();
- res.set(result.OK);
+ res.set(Result.OK);
return p;
}
diff --git a/src/it/reyboz/bustorino/backend/FiveTStopsFetcher.java b/src/it/reyboz/bustorino/backend/FiveTStopsFetcher.java
--- a/src/it/reyboz/bustorino/backend/FiveTStopsFetcher.java
+++ b/src/it/reyboz/bustorino/backend/FiveTStopsFetcher.java
@@ -39,7 +39,7 @@
public class FiveTStopsFetcher implements StopsFinderByName {
@Override
- public List<Stop> FindByName(String name, AtomicReference<result> res) {
+ public List<Stop> FindByName(String name, AtomicReference<Result> res) {
// API apparently limited to 20 results
ArrayList<Stop> busStops = new ArrayList<>(20);
String stopID;
@@ -48,7 +48,7 @@
//Stop busStop;
if(name.length() < 3) {
- res.set(result.QUERY_TOO_SHORT);
+ res.set(Result.QUERY_TOO_SHORT);
return busStops;
}
@@ -57,7 +57,7 @@
try {
u = new URL("http://www.5t.torino.it/5t/trasporto/stop-lookup.jsp?action=search&stopShortName=" + URLEncoder.encode(name, "utf-8"));
} catch(Exception e) {
- res.set(Fetcher.result.PARSER_ERROR);
+ res.set(Result.PARSER_ERROR);
return busStops;
}
@@ -106,9 +106,9 @@
}
if(busStops.size() == 0) {
- res.set(result.EMPTY_RESULT_SET);
+ res.set(Result.EMPTY_RESULT_SET);
} else {
- res.set(result.OK);
+ res.set(Result.OK);
}
Collections.sort(busStops);
diff --git a/src/it/reyboz/bustorino/backend/GTTJSONFetcher.java b/src/it/reyboz/bustorino/backend/GTTJSONFetcher.java
--- a/src/it/reyboz/bustorino/backend/GTTJSONFetcher.java
+++ b/src/it/reyboz/bustorino/backend/GTTJSONFetcher.java
@@ -34,7 +34,7 @@
public class GTTJSONFetcher implements ArrivalsFetcher {
private final String DEBUG_TAG = "GTTJSONFetcher-BusTO";
@Override @NonNull
- public Palina ReadArrivalTimesAll(String stopID, AtomicReference<result> res) {
+ public Palina ReadArrivalTimesAll(String stopID, AtomicReference<Result> res) {
URL url;
Palina p = new Palina(stopID);
String routename;
@@ -48,7 +48,7 @@
try {
url = new URL("https://www.gtt.to.it/cms/index.php?option=com_gtt&task=palina.getTransitiOld&palina=" + URLEncoder.encode(stopID, "utf-8") + "&bacino=U&realtime=true&get_param=value");
} catch (Exception e) {
- res.set(result.PARSER_ERROR);
+ res.set(Result.PARSER_ERROR);
return p;
}
HashMap<String, String> headers = new HashMap<>();
@@ -66,7 +66,7 @@
} catch(JSONException e) {
Log.w(DEBUG_TAG, "Error parsing JSON: \n"+content);
Log.w(DEBUG_TAG, e);
- res.set(result.PARSER_ERROR);
+ res.set(Result.PARSER_ERROR);
return p;
}
@@ -76,13 +76,13 @@
json.getJSONObject(0).getString("Linea"); // if we can get this, then there's something useful in the array.
} catch(JSONException e) {
Log.w(DEBUG_TAG, "No existing lines");
- res.set(result.EMPTY_RESULT_SET);
+ res.set(Result.EMPTY_RESULT_SET);
return p;
}
howManyRoutes = json.length();
if(howManyRoutes == 0) {
- res.set(result.EMPTY_RESULT_SET);
+ res.set(Result.EMPTY_RESULT_SET);
return p;
}
@@ -115,12 +115,12 @@
}
}
} catch (JSONException e) {
- res.set(result.PARSER_ERROR);
+ res.set(Result.PARSER_ERROR);
return p;
}
p.sortRoutes();
- res.set(result.OK);
+ res.set(Result.OK);
return p;
}
diff --git a/src/it/reyboz/bustorino/backend/GTTStopsFetcher.java b/src/it/reyboz/bustorino/backend/GTTStopsFetcher.java
--- a/src/it/reyboz/bustorino/backend/GTTStopsFetcher.java
+++ b/src/it/reyboz/bustorino/backend/GTTStopsFetcher.java
@@ -33,7 +33,7 @@
public class GTTStopsFetcher implements StopsFinderByName {
@Override @NonNull
- public List<Stop> FindByName(String name, AtomicReference<result> res) {
+ public List<Stop> FindByName(String name, AtomicReference<Result> res) {
URL url;
// sorting an ArrayList should be faster than a LinkedList and the API is limited to 15 results
List<Stop> s = new ArrayList<>(15);
@@ -48,14 +48,14 @@
JSONObject thisstop;
if(name.length() < 3) {
- res.set(result.QUERY_TOO_SHORT);
+ res.set(Result.QUERY_TOO_SHORT);
return s;
}
try {
url = new URL("http://www.gtt.to.it/cms/components/com_gtt/views/palinejson/view.html.php?term=" + URLEncoder.encode(name, "utf-8"));
} catch (Exception e) {
- res.set(result.PARSER_ERROR);
+ res.set(Result.PARSER_ERROR);
return s;
}
@@ -69,16 +69,16 @@
} catch(JSONException e) {
if(content.contains("[]")) {
// when no results are found, server returns a PHP Warning and an empty array. In case they fix the warning, we're looking for the array.
- res.set(result.EMPTY_RESULT_SET);
+ res.set(Result.EMPTY_RESULT_SET);
} else {
- res.set(result.PARSER_ERROR);
+ res.set(Result.PARSER_ERROR);
}
return s;
}
howManyStops = json.length();
if(howManyStops == 0) {
- res.set(result.EMPTY_RESULT_SET);
+ res.set(Result.EMPTY_RESULT_SET);
return s;
}
@@ -123,13 +123,13 @@
}
} catch (JSONException e) {
- res.set(result.PARSER_ERROR);
+ res.set(Result.PARSER_ERROR);
return s;
}
if(s.size() < 1) {
// shouldn't happen but prevents the next part from catching fire
- res.set(result.EMPTY_RESULT_SET);
+ res.set(Result.EMPTY_RESULT_SET);
return s;
}
@@ -137,7 +137,7 @@
// the next loop won't work with less than 2 items
if(s.size() < 2) {
- res.set(result.OK);
+ res.set(Result.OK);
return s;
}
@@ -184,7 +184,7 @@
s2.add(s.get(i-1));
}
- res.set(result.OK);
+ res.set(Result.OK);
return s2;
}
diff --git a/src/it/reyboz/bustorino/backend/StopsFinderByName.java b/src/it/reyboz/bustorino/backend/StopsFinderByName.java
--- a/src/it/reyboz/bustorino/backend/StopsFinderByName.java
+++ b/src/it/reyboz/bustorino/backend/StopsFinderByName.java
@@ -29,5 +29,5 @@
* @return list of stops, in normalized form.
* @see FiveTNormalizer
*/
- List<Stop> FindByName(String name, AtomicReference<result> res);
+ List<Stop> FindByName(String name, AtomicReference<Result> res);
}
diff --git a/src/it/reyboz/bustorino/backend/StopsFinderByRoute.java b/src/it/reyboz/bustorino/backend/StopsFinderByRoute.java
--- a/src/it/reyboz/bustorino/backend/StopsFinderByRoute.java
+++ b/src/it/reyboz/bustorino/backend/StopsFinderByRoute.java
@@ -29,5 +29,5 @@
* @return list of stops, in normalized form.
* @see FiveTNormalizer
*/
- List<String> FindByRoute(String routeID, StopsDBInterface db, AtomicReference<result> res);
+ List<String> FindByRoute(String routeID, StopsDBInterface db, AtomicReference<Result> res);
}
\ No newline at end of file
diff --git a/src/it/reyboz/bustorino/backend/networkTools.java b/src/it/reyboz/bustorino/backend/networkTools.java
--- a/src/it/reyboz/bustorino/backend/networkTools.java
+++ b/src/it/reyboz/bustorino/backend/networkTools.java
@@ -33,14 +33,14 @@
import java.util.concurrent.atomic.AtomicReference;
public abstract class networkTools {
- static String getDOM(final URL url, final AtomicReference<Fetcher.result> res) {
+ static String getDOM(final URL url, final AtomicReference<Fetcher.Result> res) {
//Log.d("asyncwget", "Catching URL in background: " + uri[0]);
HttpURLConnection urlConnection;
StringBuilder result = null;
try {
urlConnection = (HttpURLConnection) url.openConnection();
} catch(IOException e) {
- res.set(Fetcher.result.SERVER_ERROR);
+ res.set(Fetcher.Result.SERVER_ERROR);
return null;
}
@@ -63,19 +63,19 @@
}
if (result == null) {
- res.set(Fetcher.result.SERVER_ERROR);
+ res.set(Fetcher.Result.SERVER_ERROR);
return null;
}
- res.set(Fetcher.result.PARSER_ERROR); // will be set to "OK" later, this is a safety net in case StringBuilder returns null, the website returns an HTTP 204 or something like that.
+ res.set(Fetcher.Result.PARSER_ERROR); // will be set to "OK" later, this is a safety net in case StringBuilder returns null, the website returns an HTTP 204 or something like that.
return result.toString();
}
@Nullable
- static String queryURL(URL url, AtomicReference<Fetcher.result> res){
+ static String queryURL(URL url, AtomicReference<Fetcher.Result> res){
return queryURL(url,res,null);
}
@Nullable
- static String queryURL(URL url, AtomicReference<Fetcher.result> res, Map<String,String> headers) {
+ static String queryURL(URL url, AtomicReference<Fetcher.Result> res, Map<String,String> headers) {
HttpURLConnection urlConnection;
InputStream in;
String s;
@@ -84,7 +84,7 @@
urlConnection = (HttpURLConnection) url.openConnection();
} catch(IOException e) {
//e.printStackTrace();
- res.set(Fetcher.result.SERVER_ERROR); // even when offline, urlConnection works fine. WHY.
+ res.set(Fetcher.Result.SERVER_ERROR); // even when offline, urlConnection works fine. WHY.
return null;
}
@@ -96,14 +96,14 @@
urlConnection.setRequestProperty(key,headers.get(key));
}
}
- res.set(Fetcher.result.SERVER_ERROR); // will be set to OK later
+ res.set(Fetcher.Result.SERVER_ERROR); // will be set to OK later
try {
in = urlConnection.getInputStream();
} catch (Exception e) {
try {
if(urlConnection.getResponseCode()==404)
- res.set(Fetcher.result.SERVER_ERROR_404);
+ res.set(Fetcher.Result.SERVER_ERROR_404);
} catch (IOException e2) {
e2.printStackTrace();
}
diff --git a/src/it/reyboz/bustorino/backend/utils.java b/src/it/reyboz/bustorino/backend/utils.java
--- a/src/it/reyboz/bustorino/backend/utils.java
+++ b/src/it/reyboz/bustorino/backend/utils.java
@@ -11,6 +11,7 @@
import java.io.PrintWriter;
import java.io.StringWriter;
+import java.util.Arrays;
public abstract class utils {
private static final double EarthRadius = 6371e3;
@@ -38,11 +39,13 @@
public static float convertDipToPixels(Context con, float dp){
return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp,con.getResources().getDisplayMetrics());
}
+ /*
public static int calculateNumColumnsFromSize(View containerView, int pixelsize){
int width = containerView.getWidth();
float ncols = ((float)width)/pixelsize;
return (int) Math.floor(ncols);
}
+ */
/**
* Check if there is an internet connection
@@ -97,6 +100,20 @@
return busStopID;
}
+ public static String toTitleCase(String givenString) {
+ String[] arr = givenString.split(" ");
+ StringBuffer sb = new StringBuffer();
+ //Log.d("BusTO chars", "String parsing: "+givenString+" in array: "+ Arrays.toString(arr));
+ for (int i = 0; i < arr.length; i++) {
+ if (arr[i].length() > 1)
+ sb.append(Character.toUpperCase(arr[i].charAt(0)))
+ .append(arr[i].substring(1)).append(" ");
+ else sb.append(arr[i]);
+ }
+ return sb.toString().trim();
+ }
+
+
/**
* Open an URL in the default browser.
*
@@ -106,10 +123,12 @@
Intent browserIntent1 = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
context.startActivity(browserIntent1);
}
+
/**
* Print the first i lines of the the trace of an exception
* https://stackoverflow.com/questions/21706722/fetch-only-first-n-lines-of-a-stack-trace
*/
+ /*
public static String traceCaller(Exception ex, int i) {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
@@ -127,4 +146,5 @@
}
return "Trace too Short.";
}
+ */
}
diff --git a/src/it/reyboz/bustorino/data/DBUpdateWorker.java b/src/it/reyboz/bustorino/data/DBUpdateWorker.java
--- a/src/it/reyboz/bustorino/data/DBUpdateWorker.java
+++ b/src/it/reyboz/bustorino/data/DBUpdateWorker.java
@@ -63,24 +63,24 @@
final Data out = new Data.Builder().putInt(ERROR_REASON_KEY, ERROR_FETCHING_VERSION)
.putInt(ERROR_CODE_KEY,new_DB_version).build();
cancelNotification(notificationID);
- return Result.failure(out);
+ return ListenableWorker.Result.failure(out);
}
//we got a good version
if (current_DB_version >= new_DB_version && !isUpdateCompulsory) {
//don't need to update
cancelNotification(notificationID);
- return Result.success(new Data.Builder().
+ return ListenableWorker.Result.success(new Data.Builder().
putInt(SUCCESS_REASON_KEY, SUCCESS_NO_ACTION_NEEDED).build());
}
//start the real update
- AtomicReference<Fetcher.result> resultAtomicReference = new AtomicReference<>();
+ AtomicReference<Fetcher.Result> resultAtomicReference = new AtomicReference<>();
DatabaseUpdate.setDBUpdatingFlag(con, shPr,true);
final DatabaseUpdate.Result resultUpdate = DatabaseUpdate.performDBUpdate(con,resultAtomicReference);
DatabaseUpdate.setDBUpdatingFlag(con, shPr,false);
if (resultUpdate != DatabaseUpdate.Result.DONE){
- Fetcher.result result = resultAtomicReference.get();
+ Fetcher.Result result = resultAtomicReference.get();
final Data.Builder dataBuilder = new Data.Builder();
switch (resultUpdate){
@@ -92,7 +92,7 @@
break;
}
cancelNotification(notificationID);
- return Result.failure(dataBuilder.build());
+ return ListenableWorker.Result.failure(dataBuilder.build());
}
Log.d(DEBUG_TAG, "Update finished successfully!");
//update the version in the shared preference
@@ -101,7 +101,7 @@
editor.apply();
cancelNotification(notificationID);
- return Result.success(new Data.Builder().putInt(SUCCESS_REASON_KEY, SUCCESS_UPDATE_DONE).build());
+ return ListenableWorker.Result.success(new Data.Builder().putInt(SUCCESS_REASON_KEY, SUCCESS_UPDATE_DONE).build());
}
public static Constraints getWorkConstraints(){
diff --git a/src/it/reyboz/bustorino/data/DatabaseUpdate.java b/src/it/reyboz/bustorino/data/DatabaseUpdate.java
--- a/src/it/reyboz/bustorino/data/DatabaseUpdate.java
+++ b/src/it/reyboz/bustorino/data/DatabaseUpdate.java
@@ -36,7 +36,7 @@
* @return the version of the DB, or an error code
*/
public static int getNewVersion(){
- AtomicReference<Fetcher.result> gres = new AtomicReference<>();
+ AtomicReference<Fetcher.Result> gres = new AtomicReference<>();
String networkRequest = FiveTAPIFetcher.performAPIRequest(FiveTAPIFetcher.QueryType.STOPS_VERSION,null,gres);
if(networkRequest == null){
return VERSION_UNAVAILABLE;
@@ -57,15 +57,15 @@
* @param gres a result reference
* @return result of the update
*/
- public static Result performDBUpdate(Context con, AtomicReference<Fetcher.result> gres) {
+ public static Result performDBUpdate(Context con, AtomicReference<Fetcher.Result> gres) {
final FiveTAPIFetcher f = new FiveTAPIFetcher();
final ArrayList<Stop> stops = f.getAllStopsFromGTT(gres);
//final ArrayList<ContentProviderOperation> cpOp = new ArrayList<>();
- if (gres.get() != Fetcher.result.OK) {
+ if (gres.get() != Fetcher.Result.OK) {
Log.w(DEBUG_TAG, "Something went wrong downloading");
- return Result.ERROR_STOPS_DOWNLOAD;
+ return DatabaseUpdate.Result.ERROR_STOPS_DOWNLOAD;
}
// return false; //If the commit to the SharedPreferences didn't succeed, simply stop updating the database
@@ -109,7 +109,7 @@
if (routes == null) {
Log.w(DEBUG_TAG, "Something went wrong downloading the lines");
dbHelp.close();
- return Result.ERROR_LINES_DOWNLOAD;
+ return DatabaseUpdate.Result.ERROR_LINES_DOWNLOAD;
}
@@ -143,7 +143,7 @@
Log.d(DEBUG_TAG, "Inserting lines took: " + ((double) (endTime - startTime) / 1000) + " s");
dbHelp.close();
- return Result.DONE;
+ return DatabaseUpdate.Result.DONE;
}
public static boolean setDBUpdatingFlag(Context con, boolean value){
diff --git a/src/it/reyboz/bustorino/data/DatabaseUpdateService.java b/src/it/reyboz/bustorino/data/DatabaseUpdateService.java
--- a/src/it/reyboz/bustorino/data/DatabaseUpdateService.java
+++ b/src/it/reyboz/bustorino/data/DatabaseUpdateService.java
@@ -89,7 +89,7 @@
if(params.mustUpdate || versionDB==-1 || newVersion>versionDB){
Log.d(DEBUG_TAG,"Downloading the bus stops info");
- final AtomicReference<Fetcher.result> gres = new AtomicReference<>();
+ final AtomicReference<Fetcher.Result> gres = new AtomicReference<>();
if(!performDBUpdate(gres))
restartDBUpdateifPossible(params,gres);
else {
@@ -117,7 +117,7 @@
final SharedPreferences shPr = getSharedPreferences(getString(R.string.mainSharedPreferences),MODE_PRIVATE);
return setDBUpdatingFlag(shPr,value);
}
- private boolean performDBUpdate(AtomicReference<Fetcher.result> gres){
+ private boolean performDBUpdate(AtomicReference<Fetcher.Result> gres){
if(!setDBUpdatingFlag(true))
return false;
@@ -214,7 +214,7 @@
return DatabaseUpdate.performDBUpdate(getApplication(),gres) == DatabaseUpdate.Result.DONE;
}
private int getNewVersion(UpdateRequestParams params){
- AtomicReference<Fetcher.result> gres = new AtomicReference<>();
+ AtomicReference<Fetcher.Result> gres = new AtomicReference<>();
String networkRequest = FiveTAPIFetcher.performAPIRequest(FiveTAPIFetcher.QueryType.STOPS_VERSION,null,gres);
if(networkRequest == null){
restartDBUpdateifPossible(params,gres);
@@ -231,8 +231,8 @@
return -4;
}
}
- private void restartDBUpdateifPossible(UpdateRequestParams pars, AtomicReference<Fetcher.result> res){
- if (pars.trial<MAX_TRIALS && res.get()!= Fetcher.result.PARSER_ERROR){
+ private void restartDBUpdateifPossible(UpdateRequestParams pars, AtomicReference<Fetcher.Result> res){
+ if (pars.trial<MAX_TRIALS && res.get()!= Fetcher.Result.PARSER_ERROR){
Log.d(DEBUG_TAG,"Update failed, starting new trial ("+pars.trial+")");
startDBUpdate(getApplicationContext(),++pars.trial,pars.mustUpdate);
}
diff --git a/src/it/reyboz/bustorino/fragments/ArrivalsFragment.java b/src/it/reyboz/bustorino/fragments/ArrivalsFragment.java
--- a/src/it/reyboz/bustorino/fragments/ArrivalsFragment.java
+++ b/src/it/reyboz/bustorino/fragments/ArrivalsFragment.java
@@ -204,6 +204,10 @@
super.onResume();
LoaderManager loaderManager = getLoaderManager();
Log.d(DEBUG_TAG, "OnResume, justCreated "+justCreated);
+ /*if(needUpdateOnAttach){
+ updateFragmentData(null);
+ needUpdateOnAttach=false;
+ }*/
if(stopID!=null){
//refresh the arrivals
if(!justCreated){
@@ -228,8 +232,10 @@
super.onStart();
if (needUpdateOnAttach){
updateFragmentData(null);
+ needUpdateOnAttach = false;
}
}
+
@Override
public void onPause() {
if(listener!=null)
diff --git a/src/it/reyboz/bustorino/fragments/FragmentHelper.java b/src/it/reyboz/bustorino/fragments/FragmentHelper.java
--- a/src/it/reyboz/bustorino/fragments/FragmentHelper.java
+++ b/src/it/reyboz/bustorino/fragments/FragmentHelper.java
@@ -185,7 +185,8 @@
if (parameters.addToBackStack)
ft.addToBackStack("state_"+parameters.tag);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_CLOSE);
- ft.commit();
+ if(!fm.isDestroyed())
+ ft.commit();
//fm.executePendingTransactions();
}
@@ -205,7 +206,7 @@
* Wrapper to show the errors/status that happened
* @param res result from Fetcher
*/
- public void showErrorMessage(Fetcher.result res){
+ public void showErrorMessage(Fetcher.Result res){
//TODO: implement a common set of errors for all fragments
switch (res){
case OK:
diff --git a/src/it/reyboz/bustorino/fragments/MainScreenFragment.java b/src/it/reyboz/bustorino/fragments/MainScreenFragment.java
--- a/src/it/reyboz/bustorino/fragments/MainScreenFragment.java
+++ b/src/it/reyboz/bustorino/fragments/MainScreenFragment.java
@@ -1,3 +1,4 @@
+
package it.reyboz.bustorino.fragments;
import android.Manifest;
diff --git a/src/it/reyboz/bustorino/middleware/AsyncDataDownload.java b/src/it/reyboz/bustorino/middleware/AsyncDataDownload.java
--- a/src/it/reyboz/bustorino/middleware/AsyncDataDownload.java
+++ b/src/it/reyboz/bustorino/middleware/AsyncDataDownload.java
@@ -35,6 +35,7 @@
import java.lang.ref.WeakReference;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
import java.util.concurrent.atomic.AtomicReference;
import java.util.Calendar;
@@ -42,13 +43,13 @@
/**
* This should be used to download data, but not to display it
*/
-public class AsyncDataDownload extends AsyncTask<String,Fetcher.result,Object>{
+public class AsyncDataDownload extends AsyncTask<String, Fetcher.Result,Object>{
private static final String TAG = "BusTO-DataDownload";
private static final String DEBUG_TAG = TAG;
private boolean failedAll = false;
- private final AtomicReference<Fetcher.result> res;
+ private final AtomicReference<Fetcher.Result> res;
private final RequestType t;
private String query;
WeakReference<FragmentHelper> helperRef;
@@ -111,7 +112,7 @@
else if(lastSearchedBusStop!=null)
stopID = lastSearchedBusStop.ID; //(it's a Palina)
else {
- publishProgress(Fetcher.result.QUERY_TOO_SHORT);
+ publishProgress(Fetcher.Result.QUERY_TOO_SHORT);
return null;
}
//Skip the FiveTAPIFetcher for the Metro Stops because it shows incomprehensible arrival times
@@ -119,11 +120,15 @@
continue;
p= f.ReadArrivalTimesAll(stopID,res);
publishProgress(res.get());
+ //if (res.get()!= Fetcher.Result.OK)
+ Log.d(DEBUG_TAG, "Arrivals fetcher: "+f+"\n\tProgress: "+res.get());
+
if(f instanceof FiveTAPIFetcher){
- AtomicReference<Fetcher.result> gres = new AtomicReference<>();
+ AtomicReference<Fetcher.Result> gres = new AtomicReference<>();
List<Route> branches = ((FiveTAPIFetcher) f).getDirectionsForStop(stopID,gres);
- if(gres.get() == Fetcher.result.OK){
+ Log.d(DEBUG_TAG, "FiveTArrivals fetcher: "+f+"\n\tDetails req: "+gres.get());
+ if(gres.get() == Fetcher.Result.OK){
p.addInfoFromRoutes(branches);
Thread t = new Thread(new BranchInserter(branches, context));
t.start();
@@ -133,7 +138,7 @@
//put updated values into Database
}
- if(lastSearchedBusStop != null && res.get()== Fetcher.result.OK) {
+ if(lastSearchedBusStop != null && res.get()== Fetcher.Result.OK) {
// check that we don't have the same stop
if(lastSearchedBusStop.ID.equals(p.ID)) {
// searched and it's the same
@@ -160,7 +165,7 @@
result = null;
}
//find if it went well
- if(res.get()== Fetcher.result.OK) {
+ if(res.get()== Fetcher.Result.OK) {
//wait for other threads to finish
for(Thread t: otherActivities){
try {
@@ -180,10 +185,10 @@
}
@Override
- protected void onProgressUpdate(Fetcher.result... values) {
+ protected void onProgressUpdate(Fetcher.Result... values) {
FragmentHelper fh = helperRef.get();
if (fh!=null)
- for (Fetcher.result r : values){
+ for (Fetcher.Result r : values){
//TODO: make Toast
fh.showErrorMessage(r);
}
@@ -270,7 +275,8 @@
@Override
public void run() {
final NextGenDB nextGenDB = new NextGenDB(context);
- ContentValues[] values = new ContentValues[routesToInsert.size()];
+ //ContentValues[] values = new ContentValues[routesToInsert.size()];
+ ArrayList<ContentValues> branchesValues = new ArrayList<>(routesToInsert.size()*4);
ArrayList<ContentValues> connectionsVals = new ArrayList<>(routesToInsert.size()*4);
long starttime,endtime;
for (Route r:routesToInsert){
@@ -310,22 +316,24 @@
if(r.type!=null) cv.put(BranchesTable.COL_TYPE, r.type.getCode());
cv.put(BranchesTable.COL_FESTIVO, r.festivo.getCode());
- values[routesToInsert.indexOf(r)] = cv;
- for(int i=0; i<r.getStopsList().size();i++){
- String stop = r.getStopsList().get(i);
- final ContentValues connVal = new ContentValues();
- connVal.put(ConnectionsTable.COLUMN_STOP_ID,stop);
- connVal.put(ConnectionsTable.COLUMN_ORDER,i);
- connVal.put(ConnectionsTable.COLUMN_BRANCH,r.branchid);
-
- //add to global connVals
- connectionsVals.add(connVal);
+ //values[routesToInsert.indexOf(r)] = cv;
+ branchesValues.add(cv);
+ if(r.getStopsList() != null)
+ for(int i=0; i<r.getStopsList().size();i++){
+ String stop = r.getStopsList().get(i);
+ final ContentValues connVal = new ContentValues();
+ connVal.put(ConnectionsTable.COLUMN_STOP_ID,stop);
+ connVal.put(ConnectionsTable.COLUMN_ORDER,i);
+ connVal.put(ConnectionsTable.COLUMN_BRANCH,r.branchid);
+
+ //add to global connVals
+ connectionsVals.add(connVal);
}
}
starttime = System.currentTimeMillis();
ContentResolver cr = context.getContentResolver();
try {
- cr.bulkInsert(Uri.parse("content://" + AppDataProvider.AUTHORITY + "/branches/"), values);
+ cr.bulkInsert(Uri.parse("content://" + AppDataProvider.AUTHORITY + "/branches/"), branchesValues.toArray(new ContentValues[0]));
endtime = System.currentTimeMillis();
Log.d("DataDownload", "Inserted branches, took " + (endtime - starttime) + " ms");
} catch (SQLException exc){
@@ -334,13 +342,14 @@
return;
}
-
- starttime = System.currentTimeMillis();
- ContentValues[] valArr = connectionsVals.toArray(new ContentValues[0]);
- Log.d("DataDownloadInsert","inserting "+valArr.length+" connections");
- int rows = nextGenDB.insertBatchContent(valArr,ConnectionsTable.TABLE_NAME);
- endtime = System.currentTimeMillis();
- Log.d("DataDownload","Inserted connections found, took "+(endtime-starttime)+" ms, inserted "+rows+" rows");
+ if (connectionsVals.size()>0) {
+ starttime = System.currentTimeMillis();
+ ContentValues[] valArr = connectionsVals.toArray(new ContentValues[0]);
+ Log.d("DataDownloadInsert", "inserting " + valArr.length + " connections");
+ int rows = nextGenDB.insertBatchContent(valArr, ConnectionsTable.TABLE_NAME);
+ endtime = System.currentTimeMillis();
+ Log.d("DataDownload", "Inserted connections found, took " + (endtime - starttime) + " ms, inserted " + rows + " rows");
+ }
nextGenDB.close();
}
}

File Metadata

Mime Type
text/plain
Expires
Sun, Dec 7, 12:01 (1 h, 40 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
1427185
Default Alt Text
D62.1765105285.diff (44 KB)

Event Timeline