Dr0ptp4kt has submitted this change and it was merged.

Change subject: Fix refresh icon visual glitch when navigating back to the 
saved pages list while a refresh in in progress
......................................................................


Fix refresh icon visual glitch when navigating back to the saved pages list 
while a refresh in in progress

Also restoring progress immediately when showing the saved pages (instead of 
waiting for the first delegate call back)
Fixing threading issues (make sure progress is only accessed on the accessQueue)

Change-Id: I7a56861a28fcd15ad26e38b2c8df1747ee6fa068
---
M wikipedia/Networking/Fetchers/SavedArticlesFetcher.h
M wikipedia/Networking/Fetchers/SavedArticlesFetcher.m
M wikipedia/View Controllers/SavedPages/SavedPagesViewController.m
3 files changed, 57 insertions(+), 20 deletions(-)

Approvals:
  Dr0ptp4kt: Looks good to me, approved
  Bgerstle: Looks good to me, but someone else must approve



diff --git a/wikipedia/Networking/Fetchers/SavedArticlesFetcher.h 
b/wikipedia/Networking/Fetchers/SavedArticlesFetcher.h
index 97d16fc..2c2b6c1 100644
--- a/wikipedia/Networking/Fetchers/SavedArticlesFetcher.h
+++ b/wikipedia/Networking/Fetchers/SavedArticlesFetcher.h
@@ -4,12 +4,13 @@
 @class MWKArticle, MWKSavedPageList, AFHTTPRequestOperationManager;
 @class SavedArticlesFetcher;
 
+typedef void (^WMFSavedArticlesFetcherProgress)(CGFloat progress);
+
 @protocol SavedArticlesFetcherDelegate <FetchFinishedDelegate>
 
 - (void)savedArticlesFetcher:(SavedArticlesFetcher*)savedArticlesFetcher
              didFetchArticle:(MWKArticle*)article
-           remainingArticles:(NSInteger)remaining
-               totalArticles:(NSInteger)total
+                    progress:(CGFloat)progress
                       status:(FetchFinalStatus)status
                        error:(NSError*)error;
 
@@ -20,9 +21,11 @@
 + (SavedArticlesFetcher*)sharedInstance;
 + (void)                 setSharedInstance:(SavedArticlesFetcher*)fetcher;
 
-@property (strong, nonatomic, readonly) MWKSavedPageList* savedPageList;
+@property (nonatomic, strong, readonly) MWKSavedPageList* savedPageList;
 @property (nonatomic, strong, readonly) MWKDataStore* dataStore;
 
+- (void)getProgress:(WMFSavedArticlesFetcherProgress)progressBlock;
+
 @property (nonatomic, weak) id <SavedArticlesFetcherDelegate> 
fetchFinishedDelegate;
 
 - 
(instancetype)initAndFetchArticlesForSavedPageList:(MWKSavedPageList*)savedPageList
diff --git a/wikipedia/Networking/Fetchers/SavedArticlesFetcher.m 
b/wikipedia/Networking/Fetchers/SavedArticlesFetcher.m
index 5031705..42cadcb 100644
--- a/wikipedia/Networking/Fetchers/SavedArticlesFetcher.m
+++ b/wikipedia/Networking/Fetchers/SavedArticlesFetcher.m
@@ -70,6 +70,28 @@
     });
 }
 
+- (void)getProgress:(WMFSavedArticlesFetcherProgress)progressBlock{
+
+    dispatch_async(self.accessQueue, ^{
+        
+        CGFloat progress = [self progress];
+        
+        dispatch_async(dispatch_get_main_queue(), ^{
+            
+            progressBlock(progress);
+        });
+    });
+}
+
+
+- (CGFloat)progress {
+    if ([self.savedPageList length] == 0) {
+        return 0.0;
+    }
+
+    return (CGFloat)([self.savedPageList length] - 
[self.fetchersByArticleTitle count]) / (CGFloat)[self.savedPageList length];
+}
+
 - (void)fetchFinished:(id)sender fetchedData:(id)fetchedData 
status:(FetchFinalStatus)status error:(NSError*)error {
     dispatch_async(self.accessQueue, ^{
         __block id completedFetcherKey;
@@ -91,11 +113,18 @@
 
         [self.fetchedArticles addObject:article];
 
-        [self.fetchFinishedDelegate savedArticlesFetcher:self 
didFetchArticle:article remainingArticles:[self.fetchersByArticleTitle count] 
totalArticles:self.savedPageList.length status:status error:error];
+        CGFloat progress = [self progress];
 
-        if ([self.fetchersByArticleTitle count] == 0) {
-            [self notifyDelegate];
-        }
+        dispatch_async(dispatch_get_main_queue(), ^{
+            [self.fetchFinishedDelegate savedArticlesFetcher:self 
didFetchArticle:article progress:progress status:status error:error];
+            
+            dispatch_async(self.accessQueue, ^{
+                if ([self.fetchersByArticleTitle count] == 0) {
+                    [self notifyDelegate];
+                    [[self class] setSharedInstance:nil];
+                }
+            });
+        });
     });
 }
 
diff --git a/wikipedia/View Controllers/SavedPages/SavedPagesViewController.m 
b/wikipedia/View Controllers/SavedPages/SavedPagesViewController.m
index bf356da..ce4055d 100644
--- a/wikipedia/View Controllers/SavedPages/SavedPagesViewController.m
+++ b/wikipedia/View Controllers/SavedPages/SavedPagesViewController.m
@@ -31,8 +31,6 @@
 
 static NSString* const WMFSavedPagesDidShowCancelRefreshAlert = 
@"WMFSavedPagesDidShowCancelRefreshAlert";
 
-static SavedArticlesFetcher* _sharedFetcher = nil;
-
 @interface SavedPagesViewController ()<SavedArticlesFetcherDelegate>
 {
     MWKSavedPageList* savedPageList;
@@ -133,8 +131,8 @@
     self.tableView.editing = NO;
 }
 
-- (void)viewDidAppear:(BOOL)animated {
-    [super viewDidAppear:animated];
+- (void)viewWillAppear:(BOOL)animated {
+    [super viewWillAppear:animated];
 
     // Listen for nav bar taps.
     [[NSNotificationCenter defaultCenter] addObserver:self
@@ -145,7 +143,6 @@
     SavedArticlesFetcher* fetcher = [SavedArticlesFetcher sharedInstance];
 
     if (fetcher) {
-        fetcher.fetchFinishedDelegate = self;
         [self resumeRefresh];
     }
 }
@@ -219,8 +216,7 @@
 
     cell.methodImageView.image = nil;
 
-    MWKArticle* article = [userDataStore.dataStore 
articleWithTitle:savedEntry.title];
-    //UIImage *thumbImage = [[article.thumbnail largestVariant] asUIImage];
+    MWKArticle* article      = [userDataStore.dataStore 
articleWithTitle:savedEntry.title];
     MWKImage* thumbnail      = article.thumbnail;
     MWKImage* largeThumbnail = [thumbnail largestVariant];
     UIImage* thumbImage      = [largeThumbnail asUIImage];
@@ -433,10 +429,20 @@
 }
 
 - (void)resumeRefresh {
-    self.progressView.progress = 0.0;
-    [self showProgressView];
-    [self showCancelButton];
-    [self showRefreshTitle];
+    
+    [[SavedArticlesFetcher sharedInstance] getProgress:^(CGFloat progress) {
+
+        if(progress < 100){
+            
+            self.progressView.progress = progress;
+            [SavedArticlesFetcher sharedInstance].fetchFinishedDelegate = self;
+
+            [self showProgressView];
+            [self showCancelButton];
+            [self hideRefreshButton];
+            [self showRefreshTitle];
+        }
+    }];
 }
 
 - (void)finishRefresh {
@@ -466,8 +472,7 @@
 
 #pragma mark - SavedArticlesFetcherDelegate
 
-- (void)savedArticlesFetcher:(SavedArticlesFetcher*)savedArticlesFetcher 
didFetchArticle:(MWKArticle*)article remainingArticles:(NSInteger)remaining 
totalArticles:(NSInteger)total status:(FetchFinalStatus)status 
error:(NSError*)error {
-    CGFloat progress = 1.0 - (CGFloat)remaining / (CGFloat)total;
+- (void)savedArticlesFetcher:(SavedArticlesFetcher*)savedArticlesFetcher 
didFetchArticle:(MWKArticle*)article progress:(CGFloat)progress 
status:(FetchFinalStatus)status error:(NSError*)error {
     [self.progressView setProgress:progress animated:YES];
 }
 

-- 
To view, visit https://gerrit.wikimedia.org/r/196080
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I7a56861a28fcd15ad26e38b2c8df1747ee6fa068
Gerrit-PatchSet: 3
Gerrit-Project: apps/ios/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Fjalapeno <[email protected]>
Gerrit-Reviewer: Bgerstle <[email protected]>
Gerrit-Reviewer: Dr0ptp4kt <[email protected]>
Gerrit-Reviewer: Fjalapeno <[email protected]>
Gerrit-Reviewer: Mhurd <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to