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