diff --git a/app/src/main/java/com/limelight/AppView.java b/app/src/main/java/com/limelight/AppView.java index 51a9c341..bf73b3e8 100644 --- a/app/src/main/java/com/limelight/AppView.java +++ b/app/src/main/java/com/limelight/AppView.java @@ -156,6 +156,8 @@ public class AppView extends Activity implements AdapterFragmentCallbacks { return; } + consecutiveAppListFailures = 0; + // App list is the same or empty; nothing to do if (details.rawAppList == null || details.rawAppList.equals(lastRawApplist)) { return; @@ -219,7 +221,9 @@ public class AppView extends Activity implements AdapterFragmentCallbacks { private void populateAppGridWithCache() { try { // Try to load from cache - updateUiWithAppList(NvHTTP.getAppListByReader(new InputStreamReader(CacheHelper.openCacheFileForInput(getCacheDir(), "applist", uuidString)))); + lastRawApplist = CacheHelper.readInputStreamToString(CacheHelper.openCacheFileForInput(getCacheDir(), "applist", uuidString)); + List applist = NvHTTP.getAppListByReader(new StringReader(lastRawApplist)); + updateUiWithAppList(applist); LimeLog.info("Loaded applist from cache"); } catch (Exception e) { LimeLog.info("Loading applist from the network"); diff --git a/app/src/main/java/com/limelight/computers/ComputerManagerService.java b/app/src/main/java/com/limelight/computers/ComputerManagerService.java index efccc028..781c01bd 100644 --- a/app/src/main/java/com/limelight/computers/ComputerManagerService.java +++ b/app/src/main/java/com/limelight/computers/ComputerManagerService.java @@ -520,7 +520,9 @@ public class ComputerManagerService extends Service { // Can't poll if it's not online if (computer.state != ComputerDetails.State.ONLINE) { - listener.notifyComputerUpdated(computer); + if (listener != null) { + listener.notifyComputerUpdated(computer); + } continue; } @@ -542,20 +544,23 @@ public class ComputerManagerService extends Service { try { // Query the app list from the server String appList = http.getAppListRaw(); + if (appList != null && !appList.isEmpty()) { + // Open the cache file + FileOutputStream cacheOut = CacheHelper.openCacheFileForOutput(getCacheDir(), "applist", computer.uuid.toString()); + CacheHelper.writeStringToOutputStream(cacheOut, appList); + cacheOut.close(); - // Open the cache file - LimeLog.info("Updating app list from "+computer.uuid.toString()); - FileOutputStream cacheOut = CacheHelper.openCacheFileForOutput(getCacheDir(), "applist", computer.uuid.toString()); - CacheHelper.writeStringToOutputStream(cacheOut, appList); - cacheOut.close(); + // Update the computer + computer.rawAppList = appList; - // Update the computer - computer.rawAppList = appList; - - // Notify that the app list has been updated - // and ensure that the thread is still active - if (listener != null && thread != null) { - listener.notifyComputerUpdated(computer); + // Notify that the app list has been updated + // and ensure that the thread is still active + if (listener != null && thread != null) { + listener.notifyComputerUpdated(computer); + } + } + else { + LimeLog.warning("Empty app list received from "+computer.uuid); } } catch (IOException e) { e.printStackTrace(); diff --git a/app/src/main/java/com/limelight/utils/CacheHelper.java b/app/src/main/java/com/limelight/utils/CacheHelper.java index b22bee93..d7cee523 100644 --- a/app/src/main/java/com/limelight/utils/CacheHelper.java +++ b/app/src/main/java/com/limelight/utils/CacheHelper.java @@ -38,12 +38,14 @@ public class CacheHelper { return new FileOutputStream(openPath(true, root, path)); } - public static String readInputStreamToString(InputStream in) { - Scanner s = new Scanner(in); + public static String readInputStreamToString(InputStream in) throws IOException { + Reader r = new InputStreamReader(in); StringBuilder sb = new StringBuilder(); - while (s.hasNext()) { - sb.append(s.next()); + char[] buf = new char[256]; + int bytesRead; + while ((bytesRead = r.read(buf)) != -1) { + sb.append(buf, 0, bytesRead); } return sb.toString();