From 453b91000b88615fdda3ca9aacbd000653fe2066 Mon Sep 17 00:00:00 2001 From: David-Development Date: Sat, 2 Jan 2021 19:57:21 +0100 Subject: show progress and status of feeds during import (ignore single failing feeds) Signed-off-by: David Luhmer --- .../luhmer/owncloudnewsreader/NewFeedActivity.java | 59 +++++++++++++++------- 1 file changed, 40 insertions(+), 19 deletions(-) (limited to 'News-Android-App/src/main/java') diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewFeedActivity.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewFeedActivity.java index 29e2adc9..35284bb9 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewFeedActivity.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewFeedActivity.java @@ -47,6 +47,7 @@ import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.URL; import java.text.SimpleDateFormat; +import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; @@ -236,7 +237,7 @@ public class NewFeedActivity extends AppCompatActivity { } } - public class ImportOpmlSubscriptionsTask extends AsyncTask { + public class ImportOpmlSubscriptionsTask extends AsyncTask, Boolean> { private final String mUrlToFile; private HashMap extractedUrls; @@ -254,7 +255,7 @@ public class NewFeedActivity extends AppCompatActivity { pd.setTitle("Parsing OMPL..."); pd.setMessage("Please wait."); pd.setCancelable(false); - pd.setIndeterminate(true); + pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); pd.show(); super.onPreExecute(); @@ -277,34 +278,49 @@ public class NewFeedActivity extends AppCompatActivity { parser.nextTag(); extractedUrls = OpmlXmlParser.ReadFeed(parser); - publishProgress(); + List result = new ArrayList<>(); + publishProgress(result); final HashMap existingFolders = new HashMap<>(); mApi.getNewsAPI().folders().blockingSubscribe(folders -> { - for(Folder folder : folders) { + for (Folder folder : folders) { existingFolders.put(folder.getLabel(), folder.getId()); } }); - for(String feedUrl : extractedUrls.keySet()) { + for (String feedUrl : extractedUrls.keySet()) { long folderId = 0; //id of the parent folder, 0 for root String folderName = extractedUrls.get(feedUrl); if(folderName != null) { //Get Folder ID (create folder if not exists) - if(existingFolders.containsKey(folderName)) { //Check if folder exists - folderId = existingFolders.get(folderName); - } else { //If not, create a new one on the server - //mApi.getAPI().createFolder(foldername) // HttpJsonRequest.getInstance().performCreateFolderRequest(api.getFolderUrl(), folderName); - final Map folderMap = new HashMap<>(2); + if (!existingFolders.containsKey(folderName)) { + // If folder does not exist, create a new one on the server + final Map folderMap = new HashMap<>(1); folderMap.put("name", folderName); Folder folder = mApi.getNewsAPI().createFolder(folderMap).execute().body().get(0); - //TODO test this!!! - existingFolders.put(folder.getLabel(), folder.getId()); //Add folder to list of existing folder in order to prevent that the method tries to create it multiple times + folderId = folder.getId(); + // Add folder to list of existing folder in order to prevent that the method tries to create it multiple times + existingFolders.put(folder.getLabel(), folderId); } + + folderId = existingFolders.get(folderName); + } + + Response> response = mApi.getNewsAPI().createFeed(feedUrl, folderId).execute(); + if (response.isSuccessful()) { + Feed feed = response.body().get(0); + result.add("✓ " + feed.getLink()); + Log.e(TAG, "Successfully imported feed: " + feedUrl + " - Feed-ID: " + feed.getId()); + } else if (response.code() == 409) { + // already exists + result.add("✓ " + " - " + feedUrl); + } else { + result.add("✗ " + response.code() + " - " + feedUrl); + Log.e(TAG, "Failed to import feed: " + feedUrl + " - Status-Code: " + response.code()); + Log.e(TAG, response.errorBody().string()); } - Feed feed = mApi.getNewsAPI().createFeed(feedUrl, folderId).execute().body().get(0); - Log.v(TAG, "New Feed-ID: " + feed.getId()); + publishProgress(result); } } catch (Exception e) { e.printStackTrace(); @@ -314,11 +330,16 @@ public class NewFeedActivity extends AppCompatActivity { } @Override - protected void onProgressUpdate(Void... values) { - String text = "Extracted the following feeds:\n"; - for (String url : extractedUrls.keySet()) { - text += "\n" + url; + protected void onProgressUpdate(List... values) { + String text = "This might take a few minutes.. please wait:\n"; + + List log = values[0]; + for (String line : log) { + text += "\n" + line; } + + pd.setMax(extractedUrls.size()); + pd.setProgress(log.size()); pd.setMessage(text); super.onProgressUpdate(values); @@ -333,7 +354,7 @@ public class NewFeedActivity extends AppCompatActivity { if(!result) { Toast.makeText(mContext, "Failed to parse OPML file", Toast.LENGTH_SHORT).show(); } else { - Toast.makeText(mContext, "Successfully imported OPML!", Toast.LENGTH_LONG).show(); + Toast.makeText(mContext, "Imported done!", Toast.LENGTH_LONG).show(); } super.onPostExecute(result); -- cgit v1.2.3