Fjalapeno has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/199299

Change subject: Add text progress to migration Move migration to background 
thread / context
......................................................................

Add text progress to migration
Move migration to background thread / context

Change-Id: I1297bb95e943749a28a99ba7488bd8d35acaf901
---
M OldDataSchema/Data/ArticleDataContextSingleton.h
M OldDataSchema/Data/ArticleDataContextSingleton.m
M OldDataSchema/OldDataSchema/OldDataSchemaMigrator.h
M OldDataSchema/OldDataSchema/OldDataSchemaMigrator.m
M Wikipedia.xcodeproj/project.pbxproj
M wikipedia/View Controllers/DataMigration/DataMigrationProgressViewController.m
M wikipedia/View 
Controllers/DataMigration/DataMigrationProgressViewController.xib
M wikipedia/ca.lproj/Localizable.strings
M wikipedia/de.lproj/Localizable.strings
M wikipedia/en.lproj/Localizable.strings
M wikipedia/es.lproj/Localizable.strings
M wikipedia/fi.lproj/Localizable.strings
M wikipedia/fr.lproj/Localizable.strings
M wikipedia/he.lproj/Localizable.strings
M wikipedia/id.lproj/Localizable.strings
M wikipedia/it.lproj/Localizable.strings
M wikipedia/ja.lproj/Localizable.strings
M wikipedia/ko.lproj/Localizable.strings
M wikipedia/lb.lproj/Localizable.strings
M wikipedia/mk.lproj/Localizable.strings
M wikipedia/ms.lproj/Localizable.strings
M wikipedia/nl.lproj/Localizable.strings
M wikipedia/pt-br.lproj/Localizable.strings
M wikipedia/pt.lproj/Localizable.strings
M wikipedia/qqq.lproj/Localizable.strings
M wikipedia/ro.lproj/Localizable.strings
M wikipedia/ru.lproj/Localizable.strings
M wikipedia/sv.lproj/Localizable.strings
M wikipedia/tr.lproj/Localizable.strings
M wikipedia/vi.lproj/Localizable.strings
M wikipedia/zh-hans.lproj/Localizable.strings
31 files changed, 234 insertions(+), 119 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/apps/ios/wikipedia 
refs/changes/99/199299/1

diff --git a/OldDataSchema/Data/ArticleDataContextSingleton.h 
b/OldDataSchema/Data/ArticleDataContextSingleton.h
index ef7f512..1f188ce 100644
--- a/OldDataSchema/Data/ArticleDataContextSingleton.h
+++ b/OldDataSchema/Data/ArticleDataContextSingleton.h
@@ -5,9 +5,13 @@
 
 @interface ArticleDataContextSingleton : NSObject
 
++ (ArticleDataContextSingleton *)sharedInstance;
+
 @property (nonatomic, retain) NSManagedObjectContext *mainContext;
 
-+ (ArticleDataContextSingleton *)sharedInstance;
+- (NSManagedObjectContext*)backgroundContext;
+
+- (void)saveContextAndPropagateChangesToStore:(NSManagedObjectContext*)context 
completionBlock:(void(^)(NSError* error))completionBlock;
 
 - (id)createArticleDataModel:(Class)modelClass;
 
diff --git a/OldDataSchema/Data/ArticleDataContextSingleton.m 
b/OldDataSchema/Data/ArticleDataContextSingleton.m
index 697aca0..812f948 100644
--- a/OldDataSchema/Data/ArticleDataContextSingleton.m
+++ b/OldDataSchema/Data/ArticleDataContextSingleton.m
@@ -80,6 +80,15 @@
     self.masterContext.persistentStoreCoordinator = persistentStoreCoordinator;
 }
 
+- (NSManagedObjectContext*)backgroundContext{
+    
+    NSManagedObjectContext* newContext = [[NSManagedObjectContext alloc] 
initWithConcurrencyType:NSPrivateQueueConcurrencyType];
+    newContext.parentContext = self.masterContext;
+
+    return newContext;
+}
+
+
 - (NSString *)documentRootPath
 {
     NSArray* documentPaths = 
NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
@@ -87,7 +96,36 @@
     return documentRootPath;
 }
 
+- (void)saveContextAndPropagateChangesToStore:(NSManagedObjectContext*)context 
completionBlock:(void(^)(NSError* error))completionBlock{
+    
+    [context performBlock:^{
+        
+        __block NSError* errorToSend = nil;
+        
+        NSError* error = nil;
+        if([context save:&error]){
+            [self.masterContext performBlock:^{
+                NSError *masterError = nil;
+                if (![self.masterContext save:&masterError]) {
+                    errorToSend = masterError;
+                }
+            }];
+        }else{
+            errorToSend = error;
+        }
+
+        if(completionBlock){
+            
+            dispatch_async(dispatch_get_main_queue(), ^{
+                completionBlock(errorToSend);
+            });
+        }
+    }];
+}
+
+
 - (void)propagateMainSavesToMaster{
+    
     [self.masterContext performBlock:^{
         NSError *masterError = nil;
         if (![self.masterContext save:&masterError]) {
diff --git a/OldDataSchema/OldDataSchema/OldDataSchemaMigrator.h 
b/OldDataSchema/OldDataSchema/OldDataSchemaMigrator.h
index 22aef16..87fc65e 100644
--- a/OldDataSchema/OldDataSchema/OldDataSchemaMigrator.h
+++ b/OldDataSchema/OldDataSchema/OldDataSchemaMigrator.h
@@ -25,13 +25,26 @@
 
 @end
 
+@protocol OldDataSchemaMigratorProgressDelegate <NSObject>
+
+-(void)oldDataSchema:(OldDataSchemaMigrator *)schema 
didUpdateProgressWithArticlesCompleted:(NSUInteger)completed 
total:(NSUInteger)total;
+
+-(void)oldDataSchemaDidFinishMigration:(OldDataSchemaMigrator *)schema;
+
+-(void)oldDataSchema:(OldDataSchemaMigrator *)schema 
didFinishWithError:(NSError*)error;
+
+@end
+
+
 
 @interface OldDataSchemaMigrator : NSObject
 
 @property (weak) id<OldDataSchemaDelegate> delegate;
+@property (weak) id<OldDataSchemaMigratorProgressDelegate> progressDelegate;
 
 -(BOOL)exists;
+
+//This runs async now!
 -(void)migrateData;
--(void)removeOldData;
 
 @end
diff --git a/OldDataSchema/OldDataSchema/OldDataSchemaMigrator.m 
b/OldDataSchema/OldDataSchema/OldDataSchemaMigrator.m
index e7d7b75..d9f2557 100644
--- a/OldDataSchema/OldDataSchema/OldDataSchemaMigrator.m
+++ b/OldDataSchema/OldDataSchema/OldDataSchemaMigrator.m
@@ -13,20 +13,24 @@
 #import "NSManagedObjectContext+SimpleFetch.h"
 #import "Article+ConvenienceAccessors.h"
 
-@implementation OldDataSchemaMigrator {
-    ArticleDataContextSingleton *context;
-    NSMutableSet *savedTitles;
-}
+@interface OldDataSchemaMigrator ()
+
+@property (nonatomic, strong) ArticleDataContextSingleton *context;
+@property (nonatomic, strong) NSMutableSet *savedTitles;
+
+@end
+
+@implementation OldDataSchemaMigrator
 
 -(instancetype)init
 {
     self = [super init];
     if (self) {
-        savedTitles = [[NSMutableSet alloc] init];
+        _savedTitles = [[NSMutableSet alloc] init];
         if (self.exists) {
-            context = [ArticleDataContextSingleton sharedInstance];
+            _context = [ArticleDataContextSingleton sharedInstance];
         } else {
-            context = nil;
+            _context = nil;
         }
     }
     return self;
@@ -64,31 +68,64 @@
     // TODO
     // 1) Go through saved article list, saving entries and (articles and 
images)
     // 2) Go through page reading history, saving entries and (articles and 
images) when not already transferred
+        
+    NSManagedObjectContext* context = [self.context backgroundContext];
+    
+    [context performBlock:^{
+        
+        NSFetchRequest *req = [NSFetchRequest 
fetchRequestWithEntityName:@"Saved"];
+        req.sortDescriptors = @[[[NSSortDescriptor alloc] 
initWithKey:@"dateSaved" ascending:YES]];
+        NSError *err;
+        NSArray *savedEntries = [context executeFetchRequest:req error:&err];
+        
+        if (err) {
+            NSLog(@"Error reading old Saved entries: %@", err);
+        }
+        
+        NSFetchRequest *req2 = [NSFetchRequest 
fetchRequestWithEntityName:@"History"];
+        req2.sortDescriptors = @[[[NSSortDescriptor alloc] 
initWithKey:@"dateVisited" ascending:YES]];
+        NSError *err2;
+        NSArray *historyEntries = [context executeFetchRequest:req2 
error:&err2];
+        
+        if (err2) {
+            NSLog(@"Error reading old History entries: %@", err2);
+        }
+        
+        NSUInteger totalArticlesToMigrate = [savedEntries count] + 
[historyEntries count];
+        __block NSUInteger numberOfArticlesMigrated = 0;
+        
+        void (^incrementAndNotify)(void) = ^void(void) {
+            
+            numberOfArticlesMigrated++;
+            dispatch_async(dispatch_get_main_queue(), ^{
+                [self.progressDelegate oldDataSchema:self 
didUpdateProgressWithArticlesCompleted:numberOfArticlesMigrated 
total:totalArticlesToMigrate];
+            });
+        };
+        
+        for (Saved *saved in savedEntries) {
+            [self migrateSaved:saved];
+            [self migrateArticle:saved.article];
+            incrementAndNotify();
+        }
+        
+        for (History *history in historyEntries) {
+            [self migrateHistory:history];
+            incrementAndNotify();
+        }
+        
+        [self.context saveContextAndPropagateChangesToStore:context 
completionBlock:^(NSError *error) {
+           
+            [self removeOldData];
 
-    NSFetchRequest *req = [NSFetchRequest fetchRequestWithEntityName:@"Saved"];
-    req.sortDescriptors = @[[[NSSortDescriptor alloc] initWithKey:@"dateSaved" 
ascending:YES]];
-    NSError *err;
-    NSArray *savedEntries = [context.mainContext executeFetchRequest:req 
error:&err];
-    if (err) {
-        NSLog(@"Error reading old Saved entries: %@", err);
-    }
-    for (Saved *saved in savedEntries) {
-        [self migrateSaved:saved];
-        [self migrateArticle:saved.article];
-    }
-
-    NSFetchRequest *req2 = [NSFetchRequest 
fetchRequestWithEntityName:@"History"];
-    req2.sortDescriptors = @[[[NSSortDescriptor alloc] 
initWithKey:@"dateVisited" ascending:YES]];
-    NSError *err2;
-    NSArray *historyEntries = [context.mainContext executeFetchRequest:req2 
error:&err2];
-    if (err2) {
-        NSLog(@"Error reading old History entries: %@", err2);
-    }
-    for (History *history in historyEntries) {
-        [self migrateHistory:history];
-        [self migrateArticle:history.article];
-    }
-}
+            if(error){
+                [self.progressDelegate oldDataSchema:self 
didFinishWithError:error];
+            }else{
+                [self.progressDelegate oldDataSchemaDidFinishMigration:self];
+            }
+        }];
+    }];
+    
+   }
 
 - (MWKSite*)migrateArticleSite:(Article*)article {
     return [[MWKSite alloc] initWithDomain:@"wikipedia.org" 
language:article.domain];
@@ -113,11 +150,11 @@
 -(void)migrateArticle:(Article *)article
 {
     NSString *key = [NSString stringWithFormat:@"%@:%@", article.domain, 
article.title];
-    if ([savedTitles containsObject:key]) {
+    if ([self.savedTitles containsObject:key]) {
         // already imported this article
     } else {
         // Record for later to avoid dupe imports
-        [savedTitles addObject:key];
+        [self.savedTitles addObject:key];
 
         MWKArticle* migratedArticle = [self.delegate oldDataSchema:self 
migrateArticle:[self exportArticle:article]];
 
@@ -134,10 +171,10 @@
             }
         }
 
-        NSAssert(!thumbnail
-                 || [[migratedArticle.images imageURLAtIndex:0] 
isEqualToString:thumbnail.sourceUrl],
-                 @"Thumbnail was present, but it wasn't first in the article's 
image list: %@",
-                 [migratedArticle.images dataExport]);
+//        NSAssert(!thumbnail
+//                 || [[migratedArticle.images imageURLAtIndex:0] 
isEqualToString:thumbnail.sourceUrl],
+//                 @"Thumbnail was present, but it wasn't first in the 
article's image list: %@",
+//                 [migratedArticle.images dataExport]);
 
         // set the lead image to the first non-thumb image
         if ([migratedArticle.images count]) {
diff --git a/Wikipedia.xcodeproj/project.pbxproj 
b/Wikipedia.xcodeproj/project.pbxproj
index 30697cc..6820e6a 100644
--- a/Wikipedia.xcodeproj/project.pbxproj
+++ b/Wikipedia.xcodeproj/project.pbxproj
@@ -73,7 +73,6 @@
                0449E63518A9845C00D51524 /* LoginViewController.m in Sources */ 
= {isa = PBXBuildFile; fileRef = 0449E63418A9845C00D51524 /* 
LoginViewController.m */; };
                0449E63918AAA26A00D51524 /* NSHTTPCookieStorage+CloneCookie.m 
in Sources */ = {isa = PBXBuildFile; fileRef = 0449E63818AAA26A00D51524 /* 
NSHTTPCookieStorage+CloneCookie.m */; };
                044BD6B618849AD000FFE4BE /* SectionEditorViewController.m in 
Sources */ = {isa = PBXBuildFile; fileRef = 044BD6B418849AD000FFE4BE /* 
SectionEditorViewController.m */; };
-               044BF2C51ABCF9EE00BCC8A7 /* OldDataSchemaMigrator.m in Sources 
*/ = {isa = PBXBuildFile; fileRef = 044BF2C41ABCF9EE00BCC8A7 /* 
OldDataSchemaMigrator.m */; };
                0452C803195CB216007925A6 /* UIViewController+ModalsSearch.m in 
Sources */ = {isa = PBXBuildFile; fileRef = 0452C802195CB216007925A6 /* 
UIViewController+ModalsSearch.m */; };
                0452C810195D0F03007925A6 /* UIViewController+ModalPop.m in 
Sources */ = {isa = PBXBuildFile; fileRef = 0452C80F195D0F03007925A6 /* 
UIViewController+ModalPop.m */; };
                04530AF51935BF4D00022512 /* ModalMenuAndContentViewController.m 
in Sources */ = {isa = PBXBuildFile; fileRef = 04530AF41935BF4D00022512 /* 
ModalMenuAndContentViewController.m */; };
@@ -213,6 +212,7 @@
                04F27B7818FE0F2E00EDD838 /* PageHistoryViewController.m in 
Sources */ = {isa = PBXBuildFile; fileRef = 04F27B7418FE0F2E00EDD838 /* 
PageHistoryViewController.m */; };
                04F39590186CF80100B0D6FC /* TOCViewController.m in Sources */ = 
{isa = PBXBuildFile; fileRef = 04F3958F186CF80100B0D6FC /* TOCViewController.m 
*/; };
                08D631F71A69B1AB00D87AD0 /* WMFImageGalleryViewController.m in 
Sources */ = {isa = PBXBuildFile; fileRef = 08D631F61A69B1AB00D87AD0 /* 
WMFImageGalleryViewController.m */; };
+               0E4F85D31AC0B846004CA3CD /* OldDataSchemaMigrator.m in Sources 
*/ = {isa = PBXBuildFile; fileRef = 0E4F85D11AC0B846004CA3CD /* 
OldDataSchemaMigrator.m */; };
                0EA4402E1AA6281200B09DBA /* NSDateFormatter+WMFExtensions.m in 
Sources */ = {isa = PBXBuildFile; fileRef = 0EA4402D1AA6281200B09DBA /* 
NSDateFormatter+WMFExtensions.m */; };
                701FF5EE601DEA3FCAB7EFD3 /* libPods.a in Frameworks */ = {isa = 
PBXBuildFile; fileRef = D82982ED992F47428037BDF2 /* libPods.a */; };
                954BA118838BF8BA6B01C34A /* libPods-WikipediaUnitTests.a in 
Frameworks */ = {isa = PBXBuildFile; fileRef = 8CE61C6963F825760822A28A /* 
libPods-WikipediaUnitTests.a */; };
@@ -742,6 +742,9 @@
                08D631F61A69B1AB00D87AD0 /* WMFImageGalleryViewController.m */ 
= {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = 
sourcecode.c.objc; name = WMFImageGalleryViewController.m; path = "Image 
Gallery/WMFImageGalleryViewController.m"; sourceTree = "<group>"; };
                08D631F81A69B8CD00D87AD0 /* WMFImageGalleryCollectionViewCell.h 
*/ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = 
sourcecode.c.h; name = WMFImageGalleryCollectionViewCell.h; path = "Image 
Gallery/WMFImageGalleryCollectionViewCell.h"; sourceTree = "<group>"; };
                08D631F91A69B8CD00D87AD0 /* WMFImageGalleryCollectionViewCell.m 
*/ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = 
sourcecode.c.objc; name = WMFImageGalleryCollectionViewCell.m; path = "Image 
Gallery/WMFImageGalleryCollectionViewCell.m"; sourceTree = "<group>"; };
+               0E4F85D01AC0B846004CA3CD /* OldDataSchemaMigrator.h */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = 
OldDataSchemaMigrator.h; sourceTree = "<group>"; };
+               0E4F85D11AC0B846004CA3CD /* OldDataSchemaMigrator.m */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path 
= OldDataSchemaMigrator.m; sourceTree = "<group>"; };
+               0E4F85D21AC0B846004CA3CD /* OldDataSchemaMigrator_Private.h */ 
= {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = 
sourcecode.c.h; path = OldDataSchemaMigrator_Private.h; sourceTree = "<group>"; 
};
                0EA4402C1AA6281200B09DBA /* NSDateFormatter+WMFExtensions.h */ 
= {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = 
sourcecode.c.h; name = "NSDateFormatter+WMFExtensions.h"; path = 
"Wikipedia/Categories/NSDateFormatter+WMFExtensions.h"; sourceTree = 
SOURCE_ROOT; };
                0EA4402D1AA6281200B09DBA /* NSDateFormatter+WMFExtensions.m */ 
= {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = 
sourcecode.c.objc; name = "NSDateFormatter+WMFExtensions.m"; path = 
"Wikipedia/Categories/NSDateFormatter+WMFExtensions.m"; sourceTree = 
SOURCE_ROOT; };
                17A2F22335C5256576CEDBDD /* 
Pods-WikipediaUnitTests.release.xcconfig */ = {isa = PBXFileReference; 
includeInIndex = 1; lastKnownFileType = text.xcconfig; name = 
"Pods-WikipediaUnitTests.release.xcconfig"; path = "Pods/Target Support 
Files/Pods-WikipediaUnitTests/Pods-WikipediaUnitTests.release.xcconfig"; 
sourceTree = "<group>"; };
@@ -2022,6 +2025,17 @@
                        name = "Image Gallery";
                        sourceTree = "<group>";
                };
+               0E4F85CF1AC0B846004CA3CD /* OldDataSchema */ = {
+                       isa = PBXGroup;
+                       children = (
+                               0E4F85D01AC0B846004CA3CD /* 
OldDataSchemaMigrator.h */,
+                               0E4F85D11AC0B846004CA3CD /* 
OldDataSchemaMigrator.m */,
+                               0E4F85D21AC0B846004CA3CD /* 
OldDataSchemaMigrator_Private.h */,
+                       );
+                       name = OldDataSchema;
+                       path = OldDataSchema/OldDataSchema;
+                       sourceTree = "<group>";
+               };
                BC8309941A7BF935003FC5C7 /* WikipediaUnitTests */ = {
                        isa = PBXGroup;
                        children = (
@@ -2301,6 +2315,7 @@
                                D4991453181D51DE00E6073C /* Images.xcassets */,
                                BC8309941A7BF935003FC5C7 /* WikipediaUnitTests 
*/,
                                D4991437181D51DE00E6073C /* Frameworks */,
+                               0E4F85CF1AC0B846004CA3CD /* OldDataSchema */,
                                D4991436181D51DE00E6073C /* Products */,
                                D4F478441A48CD8500D8043C /* 
OldDataSchema.xcodeproj */,
                                EC30571054CC4DC4EE743503 /* Pods */,
@@ -3029,6 +3044,7 @@
                                041A3B5E18E11ED90079FF1C /* LanguagesCell.m in 
Sources */,
                                042487521A54BECD00A5C905 /* 
MWKArticle+Convenience.m in Sources */,
                                043DAC4B1901C3EE001CD17C /* 
CreditsViewController.m in Sources */,
+                               0E4F85D31AC0B846004CA3CD /* 
OldDataSchemaMigrator.m in Sources */,
                                D42E75EB18D11237002EA7E5 /* MWLanguageInfo.m in 
Sources */,
                                043F8BF21A11699A00D1AE44 /* 
UIView+WMFRoundCorners.m in Sources */,
                                04E106341A3560030046DC27 /* 
LeadImageContainer.m in Sources */,
@@ -3151,7 +3167,6 @@
                                08D631F71A69B1AB00D87AD0 /* 
WMFImageGalleryViewController.m in Sources */,
                                0412CC621925366C0010E616 /* 
RootViewController.m in Sources */,
                                04272E7B1940EEBC00CC682F /* WMFAssetsFile.m in 
Sources */,
-                               044BF2C51ABCF9EE00BCC8A7 /* 
OldDataSchemaMigrator.m in Sources */,
                                042A5B2919253E570095E172 /* 
TopMenuViewController.m in Sources */,
                                D4991445181D51DE00E6073C /* main.m in Sources 
*/,
                                0480AE9C1AA4F01600A9950C /* 
WMFWebViewFooterContainerView.m in Sources */,
diff --git a/wikipedia/View 
Controllers/DataMigration/DataMigrationProgressViewController.m 
b/wikipedia/View Controllers/DataMigration/DataMigrationProgressViewController.m
index 5294ed1..d423eb1 100644
--- a/wikipedia/View 
Controllers/DataMigration/DataMigrationProgressViewController.m
+++ b/wikipedia/View 
Controllers/DataMigration/DataMigrationProgressViewController.m
@@ -23,7 +23,7 @@
     BUTTON_INDEX_SUBMIT  = 1
 } MigrationButtonIndexIds;
 
-@interface DataMigrationProgressViewController ()
+@interface DataMigrationProgressViewController 
()<OldDataSchemaMigratorProgressDelegate>
 
 @property (readonly) OldDataSchemaMigrator* oldDataSchema;
 @property (readonly) DataMigrator* dataMigrator;
@@ -40,7 +40,7 @@
     [super viewDidLoad];
     // Do any additional setup after loading the view from its nib.
 
-    self.progressLabel.text = MWLocalizedString(@"update-progress-label", nil);
+    self.progressLabel.text = 
MWLocalizedString(@"migration-update-progress-label", nil);
 }
 
 - (void)didReceiveMemoryWarning {
@@ -51,7 +51,14 @@
 - (void)viewDidAppear:(BOOL)animated {
     [super viewDidAppear:animated];
 
-    [self asyncMigration];
+    if([self.oldDataSchema exists]){
+        
+        [self runNewMigration];
+        
+    }else if ([self.dataMigrator hasData]){
+        
+        [self runOldMigration];
+    }
 }
 
 - (OldDataSchemaMigrator*)oldDataSchema {
@@ -72,64 +79,61 @@
     return [self.oldDataSchema exists] || [self.dataMigrator hasData];
 }
 
-- (void)syncMigration {
+- (void)runNewMigration {
     // Middle-Ages Converter
     // From the native app's initial CoreData-based implementation,
     // which now lives in OldDataSchema subproject.
-    if ([self.oldDataSchema exists]) {
-        SchemaConverter* schemaConverter = [[SchemaConverter alloc] 
initWithDataStore:[SessionSingleton sharedInstance].dataStore];
-        self.oldDataSchema.delegate = schemaConverter;
-        NSLog(@"begin migration");
-        [self.oldDataSchema migrateData];
-        NSLog(@"end migration");
+    SchemaConverter* schemaConverter = [[SchemaConverter alloc] 
initWithDataStore:[SessionSingleton sharedInstance].dataStore];
+    self.oldDataSchema.delegate         = schemaConverter;
+    self.oldDataSchema.progressDelegate = self;
+    NSLog(@"begin migration");
+    [self.oldDataSchema migrateData];
+}
 
-        [self.oldDataSchema removeOldData];
-
-        // hack for history fix
-        [[SessionSingleton sharedInstance].userDataStore reset];
-
-        return;
-    }
-
+- (void)runOldMigration {
+    
     // Ye Ancient Converter
     // From the old PhoneGap app
     // @fixme: fix this to work again
-    if ([self.dataMigrator hasData]) {
-        NSLog(@"Old data to migrate found!");
-        NSArray* titles           = [self.dataMigrator extractSavedPages];
-        ArticleImporter* importer = [[ArticleImporter alloc] init];
-
-        for (NSDictionary* item in titles) {
-            NSLog(@"Will import saved page: %@ %@", item[@"lang"], 
item[@"title"]);
-        }
-
-        [importer importArticles:titles];
-
-        [self.dataMigrator removeOldData];
-
-        return;
+    NSLog(@"Old data to migrate found!");
+    NSArray* titles           = [self.dataMigrator extractSavedPages];
+    ArticleImporter* importer = [[ArticleImporter alloc] init];
+    
+    for (NSDictionary* item in titles) {
+        NSLog(@"Will import saved page: %@ %@", item[@"lang"], item[@"title"]);
     }
-
-    NSLog(@"No old data to migrate.");
+    
+    [importer importArticles:titles];
+    
+    [self.dataMigrator removeOldData];
 }
 
-- (void)asyncMigration {
-    __weak DataMigrationProgressViewController* weakSelf = self;
-    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 
0), ^() {
-        @try {
-            [weakSelf syncMigration];
-        }@catch (NSException* ex) {
-            NSLog(@"Migration failure: %@", ex);
-            dispatch_async(dispatch_get_main_queue(), ^() {
-                [weakSelf displayErrorCondition];
-            });
-            return;
-        }
+- (void)oldDataSchema:(OldDataSchemaMigrator*)schema 
didUpdateProgressWithArticlesCompleted:(NSUInteger)completed 
total:(NSUInteger)total {
+    NSString* lineOne = MWLocalizedString(@"migration-update-progress-label", 
nil);
 
-        dispatch_async(dispatch_get_main_queue(), ^() {
-            [weakSelf.delegate dataMigrationProgressComplete:weakSelf];
-        });
-    });
+    NSString* lineTwo = 
MWLocalizedString(@"migration-update-progress-count-label", nil);
+
+    lineTwo = [lineTwo stringByReplacingOccurrencesOfString:@"$1" 
withString:[NSString stringWithFormat:@"%lu", (unsigned long)completed]];
+
+    lineTwo = [lineTwo stringByReplacingOccurrencesOfString:@"$2" 
withString:[NSString stringWithFormat:@"%lu", (unsigned long)total]];
+
+    NSString* progressString = [NSString stringWithFormat:@"%@\n%@", lineOne, 
lineTwo];
+
+    self.progressLabel.text = progressString;
+}
+
+
+- (void)oldDataSchemaDidFinishMigration:(OldDataSchemaMigrator *)schema{
+    [[SessionSingleton sharedInstance].userDataStore reset];
+    [self.delegate dataMigrationProgressComplete:self];
+    NSLog(@"end migration");
+}
+
+
+-(void)oldDataSchema:(OldDataSchemaMigrator *)schema 
didFinishWithError:(NSError*)error{
+    [self displayErrorCondition];
+    [self.delegate dataMigrationProgressComplete:self];
+    NSLog(@"end migration");
 }
 
 - (void)displayErrorCondition {
diff --git a/wikipedia/View 
Controllers/DataMigration/DataMigrationProgressViewController.xib 
b/wikipedia/View 
Controllers/DataMigration/DataMigrationProgressViewController.xib
index c8928cc..0a0dd30 100644
--- a/wikipedia/View 
Controllers/DataMigration/DataMigrationProgressViewController.xib
+++ b/wikipedia/View 
Controllers/DataMigration/DataMigrationProgressViewController.xib
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" 
toolsVersion="6254" systemVersion="14B25" targetRuntime="iOS.CocoaTouch" 
propertyAccessControl="none" useAutolayout="YES">
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" 
toolsVersion="6751" systemVersion="14C1510" targetRuntime="iOS.CocoaTouch" 
propertyAccessControl="none" useAutolayout="YES">
     <dependencies>
         <deployment identifier="iOS"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" 
version="6247"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" 
version="6736"/>
     </dependencies>
     <objects>
         <placeholder placeholderIdentifier="IBFilesOwner" id="-1" 
userLabel="File's Owner" customClass="DataMigrationProgress">
@@ -20,7 +20,8 @@
                 <activityIndicatorView opaque="NO" contentMode="scaleToFill" 
horizontalHuggingPriority="750" verticalHuggingPriority="750" 
hidesWhenStopped="YES" animating="YES" style="gray" 
translatesAutoresizingMaskIntoConstraints="NO" id="59a-LK-cye">
                     <rect key="frame" x="150" y="274" width="20" height="20"/>
                 </activityIndicatorView>
-                <label opaque="NO" userInteractionEnabled="NO" 
contentMode="left" horizontalHuggingPriority="251" 
verticalHuggingPriority="251" misplaced="YES" text="" 
lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" 
adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" 
id="9Bj-11-8XX">
+                <label opaque="NO" userInteractionEnabled="NO" 
contentMode="left" horizontalHuggingPriority="251" 
verticalHuggingPriority="251" text="3 / 40 Imported" textAlignment="center" 
lineBreakMode="tailTruncation" numberOfLines="0" 
baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" 
translatesAutoresizingMaskIntoConstraints="NO" id="9Bj-11-8XX">
+                    <rect key="frame" x="101" y="233" width="118.5" 
height="20.5"/>
                     <fontDescription key="fontDescription" type="system" 
pointSize="17"/>
                     <color key="textColor" 
cocoaTouchSystemColor="darkTextColor"/>
                     <nil key="highlightedColor"/>
@@ -28,10 +29,10 @@
             </subviews>
             <color key="backgroundColor" white="1" alpha="1" 
colorSpace="custom" customColorSpace="calibratedWhite"/>
             <constraints>
+                <constraint firstItem="59a-LK-cye" firstAttribute="top" 
secondItem="9Bj-11-8XX" secondAttribute="bottom" constant="20" id="6hU-0D-UYa"/>
                 <constraint firstAttribute="centerY" secondItem="59a-LK-cye" 
secondAttribute="centerY" id="N5m-um-eCk"/>
                 <constraint firstAttribute="centerX" secondItem="59a-LK-cye" 
secondAttribute="centerX" id="N9Z-be-UDt"/>
                 <constraint firstAttribute="centerX" secondItem="9Bj-11-8XX" 
secondAttribute="centerX" id="cRM-yQ-ug6"/>
-                <constraint firstItem="9Bj-11-8XX" firstAttribute="top" 
secondItem="59a-LK-cye" secondAttribute="bottom" constant="8" id="rG3-Pf-Ut1"/>
             </constraints>
             <point key="canvasLocation" x="673" y="442"/>
         </view>
diff --git a/wikipedia/ca.lproj/Localizable.strings 
b/wikipedia/ca.lproj/Localizable.strings
index 42d0dc0..2c797e8 100644
--- a/wikipedia/ca.lproj/Localizable.strings
+++ b/wikipedia/ca.lproj/Localizable.strings
@@ -253,7 +253,6 @@
 "nearby-location-updates-settings-menu" = "Privadesa > Serveis d'ubicació > 
Viquipèdia";
 "nearby-location-general-error" = "No es pot determinar la ubicació. 
Arrossegueu per refrescar-la o torneu-ho a provar més endavant.";
 "nearby-wifi" = "Si activeu la Wi-Fi pot ajudar el vostre dispositiu a 
determinar millor la vostra localització.";
-"update-progress-label" = "S'estan actualitzant les dades locals";
 "image-gallery-unknown-owner" = "El carregador no és conegut.";
 "hockeyapp-alert-question" = "Voldríeu enviar un informe de fallada a $1 per 
tal que Wikimedia ho revisi?";
 "hockeyapp-alert-question-with-response-field" = "Voldríeu enviar un informe 
de fallada a $1 per tal que Wikimedia ho revisi? Descriviu què va passar quan 
va produir-se la fallada.";
@@ -262,3 +261,4 @@
 "hockeyapp-alert-always-send" = "Envia sempre";
 "hockeyapp-alert-do-not-send" = "No enviïs";
 "hockeyapp-alert-privacy" = "Privadesa de $1";
+"migration-update-progress-label" = "S'estan actualitzant les dades locals";
diff --git a/wikipedia/de.lproj/Localizable.strings 
b/wikipedia/de.lproj/Localizable.strings
index 09b16b1..2c512e9 100644
--- a/wikipedia/de.lproj/Localizable.strings
+++ b/wikipedia/de.lproj/Localizable.strings
@@ -247,7 +247,7 @@
 "nearby-location-updates-settings-menu" = "Datenschutz > Ortungsdienste > 
Wikipedia";
 "nearby-location-general-error" = "Standort konnte nicht bestimmt werden. Zum 
Aktualisieren ziehen oder später erneut versuchen.";
 "nearby-wifi" = "Das Aktivieren von Wi-Fi kann dabei helfen, den Standort 
deines Gerätes besser zu bestimmen.";
-"update-progress-label" = "Aktualisiere lokale Daten";
+"migration-update-progress-label" = "Aktualisiere lokale Daten";
 "image-gallery-unknown-owner" = "Hochlader unbekannt.";
 "hockeyapp-alert-question" = "Möchtest du einen Absturzbericht an $1 senden, 
so dass Wikimedia deinen Absturz überprüfen kann?";
 "hockeyapp-alert-question-with-response-field" = "Möchtest du einen 
Absturzbericht an $1 senden, so dass Wikimedia deinen Absturz überprüfen kann? 
Bitte beschreibe, was passiert ist, als der Absturz aufgetreten ist:";
diff --git a/wikipedia/en.lproj/Localizable.strings 
b/wikipedia/en.lproj/Localizable.strings
index e54416f..5230a09 100644
--- a/wikipedia/en.lproj/Localizable.strings
+++ b/wikipedia/en.lproj/Localizable.strings
@@ -280,7 +280,9 @@
 "nearby-location-general-error" = "Unable to determine location. Pull to 
refresh or try again later.";
 "nearby-wifi" = "Enabling Wi-Fi can help your device better determine your 
location.";
 
-"update-progress-label" = "Upgrading local data";
+"migration-update-progress-label" = "Upgrading local data";
+"migration-update-progress-count-label" = "Migrating Article $1 of $2";
+
 
 "image-gallery-unknown-owner" = "Uploader unknown.";
 
diff --git a/wikipedia/es.lproj/Localizable.strings 
b/wikipedia/es.lproj/Localizable.strings
index 2417646..c562107 100644
--- a/wikipedia/es.lproj/Localizable.strings
+++ b/wikipedia/es.lproj/Localizable.strings
@@ -253,11 +253,11 @@
 "nearby-location-updates-settings-menu" = "Privacidad > Servicios de 
localización > Wikipedia";
 "nearby-location-general-error" = "No se puede determinar la ubicación. Tira 
para actualizar o inténtalo más tarde.";
 "nearby-wifi" = "Activar wifi puede ayudar a que tu dispositivo determine 
mejor tu ubicación.";
-"update-progress-label" = "Actualización de datos locales";
 "image-gallery-unknown-owner" = "Cargador desconocido.";
 "hockeyapp-alert-question" = "¿Te gustaría enviar un informe a $1 para que 
Wikimedia pueda revisar tu fallo?";
 "hockeyapp-alert-question-with-response-field" = "¿Te gustaría enviar un 
informe a $1 para que Wikimedia pueda revisar tu fallo? Describe lo que pasó en 
el momento del fallo:";
 "hockeyapp-alert-title" = "La aplicación falló la última vez";
+"migration-update-progress-label" = "Actualización de datos locales";
 "hockeyapp-alert-send-report" = "Enviar informe";
 "hockeyapp-alert-always-send" = "Enviar siempre";
 "hockeyapp-alert-do-not-send" = "No enviar";
diff --git a/wikipedia/fi.lproj/Localizable.strings 
b/wikipedia/fi.lproj/Localizable.strings
index fc84ffb..7f10bbc 100644
--- a/wikipedia/fi.lproj/Localizable.strings
+++ b/wikipedia/fi.lproj/Localizable.strings
@@ -249,6 +249,6 @@
 "nearby-location-updates-settings-menu" = "Yksityisyys > Sijaintipalvelut > 
Wikipedia";
 "nearby-location-general-error" = "Sijainnin määritys ei onnistu. Vedä 
päivittääksesi tai yritä uudelleen myöhemmin.";
 "nearby-wifi" = "Langattoman verkkoyhteyden käyttöönotto voi auttaa laitettasi 
määrittämään sijaintisi paremmin.";
-"update-progress-label" = "Päivitetään paikallisia tietoja";
 "hockeyapp-alert-always-send" = "Lähetä aina";
 "hockeyapp-alert-do-not-send" = "Älä lähetä";
+"migration-update-progress-label" = "Päivitetään paikallisia tietoja";
diff --git a/wikipedia/fr.lproj/Localizable.strings 
b/wikipedia/fr.lproj/Localizable.strings
index 58f2935..acbd21a 100644
--- a/wikipedia/fr.lproj/Localizable.strings
+++ b/wikipedia/fr.lproj/Localizable.strings
@@ -254,7 +254,7 @@
 "nearby-location-updates-settings-menu" = "Confidentialité > Services 
d’emplacement > Wikipédia";
 "nearby-location-general-error" = "Impossible de déterminer l’emplacement. 
Tirer pour rafraîchir ou réessayer ultérieurement.";
 "nearby-wifi" = "L’activation du wifi peut aider votre appareil à mieux 
déterminer votre emplacement.";
-"update-progress-label" = "Mise à jour des données locales";
+"migration-update-progress-label" = "Mise à jour des données locales";
 "image-gallery-unknown-owner" = "Téléchargeur inconnu.";
 "hockeyapp-alert-question" = "Voulez-vous envoyer un rapport de plantage à $1 
pour que Wikipédia puisse l’étudier ?";
 "hockeyapp-alert-question-with-response-field" = "Voulez-vous envoyer un 
rapport de plantage à $1 pour que Wikipédia puisse l’étudier ? Veuillez décrire 
ce qui s’est produit lorsque le plantage s’est produit :";
diff --git a/wikipedia/he.lproj/Localizable.strings 
b/wikipedia/he.lproj/Localizable.strings
index 3bc95d0..34ab147 100644
--- a/wikipedia/he.lproj/Localizable.strings
+++ b/wikipedia/he.lproj/Localizable.strings
@@ -250,7 +250,7 @@
 "nearby-location-updates-settings-menu" = "פרטיות > שירותי מיקום > ויקיפדיה";
 "nearby-location-general-error" = "לא ניתן להבין מה המיקום. נא למשוך לרענון או 
לנסות מאוחר יותר.";
 "nearby-wifi" = "הפעלת וייפיי יכולה לעזור למכשיר שלך להבין את המיקום טוב 
יותר.";
-"update-progress-label" = "שדרוג נתונים מקומיים";
+"migration-update-progress-label" = "שדרוג נתונים מקומיים";
 "image-gallery-unknown-owner" = "המעלֶה אינו ידוע.";
 "hockeyapp-alert-question" = "האם לשלוח דיווח קריסה אל $1 כדי שוויקימדיה תוכל 
לתקן את הקריסה שלך?";
 "hockeyapp-alert-question-with-response-field" = "האם לשלוח דיווח קריסה אל $1 
כדי שוויקימדיה תוכל לבדוק את הקריסה שלך? נא לתאר מה קרה בזמן שאירעה הקריסה:";
diff --git a/wikipedia/id.lproj/Localizable.strings 
b/wikipedia/id.lproj/Localizable.strings
index 3a07de2..b3963ef 100644
--- a/wikipedia/id.lproj/Localizable.strings
+++ b/wikipedia/id.lproj/Localizable.strings
@@ -254,5 +254,5 @@
 "nearby-location-updates-settings-menu" = "Privasi > Layanan Lokasi > 
Wikipedia";
 "nearby-location-general-error" = "Tidak dapat menentukan lokasi. Tarik untuk 
menyegarkan atau coba lagi nanti.";
 "nearby-wifi" = "Mengaktifkan Wi-Fi dapat membantu perangkat Anda menentukan 
lokasi Anda lebih baik.";
-"update-progress-label" = "Meningkatkan data lokal";
+"migration-update-progress-label" = "Meningkatkan data lokal";
 "image-gallery-unknown-owner" = "Pengunggah tidak diketahui.";
diff --git a/wikipedia/it.lproj/Localizable.strings 
b/wikipedia/it.lproj/Localizable.strings
index c4cebff..9f337cc 100644
--- a/wikipedia/it.lproj/Localizable.strings
+++ b/wikipedia/it.lproj/Localizable.strings
@@ -256,11 +256,11 @@
 "nearby-location-updates-settings-menu" = "Privacy > Localizzazione > 
Wikipedia";
 "nearby-location-general-error" = "Impossibile determinare la posizione. Tira 
su per ricaricare o riprova più tardi.";
 "nearby-wifi" = "Abilitando il WiFi, aiuti il dispositivo a determinar meglio 
la tua posizione.";
-"update-progress-label" = "Aggiornamento di dati locali";
 "image-gallery-unknown-owner" = "Uploader sconosciuto.";
 "hockeyapp-alert-question" = "Desideri inviare una segnalazione di crash a $1 
in modo che Wikimedia sia in grado di esaminare il crash?";
 "hockeyapp-alert-question-with-response-field" = "Desideri inviare una 
segnalazione di crash a $1 in modo che Wikimedia sia in grado di esaminare il 
crash? Per favore descrivi ciò che è successo quando si è verificato il crash:";
 "hockeyapp-alert-title" = "Siamo spiacenti, l'ultima volta l'app è andata in 
stallo";
+"migration-update-progress-label" = "Aggiornamento di dati locali";
 "hockeyapp-alert-send-report" = "Invia segnalazione";
 "hockeyapp-alert-always-send" = "Invia sempre";
 "hockeyapp-alert-do-not-send" = "Non inviare";
diff --git a/wikipedia/ja.lproj/Localizable.strings 
b/wikipedia/ja.lproj/Localizable.strings
index d5804fe..b5ba77c 100644
--- a/wikipedia/ja.lproj/Localizable.strings
+++ b/wikipedia/ja.lproj/Localizable.strings
@@ -252,7 +252,7 @@
 "nearby-location-updates-settings-menu" = "プライバシー > 位置情報サービス > ウィキペディア";
 "nearby-location-general-error" = "位置を特定できません。引っ張って更新するか、後ほどもう一度試してみてください。";
 "nearby-wifi" = "Wi-Fi を有効にすると、位置情報の精度をより高めることができます。";
-"update-progress-label" = "ローカルデータをアップグレード中";
+"migration-update-progress-label" = "ローカルデータをアップグレード中";
 "image-gallery-unknown-owner" = "アップロード者不明。";
 "hockeyapp-alert-question" = "クラッシュレポートを $1 に送信しますか? 
そうすることであなたの前回のクラッシュをWikimediaがレビューできるようになります。";
 "hockeyapp-alert-question-with-response-field" = "クラッシュレポートを $1 に送信しますか? 
そうすることであなたの前回のクラッシュをWikimediaがレビューできるようになります。クラッシュが発生した際に何が起こったか記述してください。";
diff --git a/wikipedia/ko.lproj/Localizable.strings 
b/wikipedia/ko.lproj/Localizable.strings
index 06e7be6..28486d0 100644
--- a/wikipedia/ko.lproj/Localizable.strings
+++ b/wikipedia/ko.lproj/Localizable.strings
@@ -249,5 +249,5 @@
 "nearby-location-updates-settings-menu" = "개인 정보 보호 > 위치 서비스 > 위키백과";
 "nearby-location-general-error" = "위치를 확정할 수 없습니다. 새로 고치려면 당기거나 나중에 다시 시도하세요.";
 "nearby-wifi" = "Wi-Fi를 활성화하면 장치가 위치를 더 정확하도록 도울 수 있습니다.";
-"update-progress-label" = "로컬 데이터 업그레이드";
+"migration-update-progress-label" = "로컬 데이터 업그레이드";
 "image-gallery-unknown-owner" = "업로더 모름";
diff --git a/wikipedia/lb.lproj/Localizable.strings 
b/wikipedia/lb.lproj/Localizable.strings
index 6db61fc..51fcd84 100644
--- a/wikipedia/lb.lproj/Localizable.strings
+++ b/wikipedia/lb.lproj/Localizable.strings
@@ -232,7 +232,7 @@
 "nearby-location-updates-denied" = "Dës App huet net d'Recht fir 
Aktualisatiounen iwwer d'Plaz wou e grad ass ze kréien.";
 "nearby-location-general-error" = "D'Plaz wou Dir sidd konnt net festgestallt 
ginn. Dréckt fir z'aktualiséieren oder probéiert méi spéit nach eng Kéier.";
 "nearby-wifi" = "D'Aschalte vum Wifi kann Ärem Apparat hëllefen d'Plaz wou Dir 
sidd besser festzeleeën.";
-"update-progress-label" = "Aktualiséiere vu lokalen Donnéeën";
+"migration-update-progress-label" = "Aktualiséiere vu lokalen Donnéeën";
 "image-gallery-unknown-owner" = "Eroplueder onbekannt.";
 "hockeyapp-alert-question" = "Wëllt Dir e Rapport vum Crash u $1 schécken fir 
datt Wikimedia Äre Crash ënnersiche kann?";
 "hockeyapp-alert-title" = "Leider ass d'App déi leschte Kéier ofgestierzt";
diff --git a/wikipedia/mk.lproj/Localizable.strings 
b/wikipedia/mk.lproj/Localizable.strings
index 0efbaad..66e70c8 100644
--- a/wikipedia/mk.lproj/Localizable.strings
+++ b/wikipedia/mk.lproj/Localizable.strings
@@ -248,7 +248,7 @@
 "nearby-location-updates-settings-menu" = "Приватност > Местоположбени услуги 
> Википедија";
 "nearby-location-general-error" = "Не можам да ја утврдам местоположбата. 
Повлечете за да превчитате или обидете се повторно.";
 "nearby-wifi" = "Ако ја вклучите безжичната линија (Wi-Fi), уредот ќе може 
подобро да ја утврди вашата местоположба.";
-"update-progress-label" = "Надградба на месните податоци";
+"migration-update-progress-label" = "Надградба на месните податоци";
 "image-gallery-unknown-owner" = "Подигачот е непознат";
 "hockeyapp-alert-question" = "Дали би сакале да испратите пријава за уривање 
на $1 за Викимедија да ви го разгледа проблемот?";
 "hockeyapp-alert-question-with-response-field" = "Дали би сакале да испратите 
пријава за уривање на $1 за Викимедија да ви го арзгледа проблемот? Опишете што 
се случи кога настана уривањето:";
diff --git a/wikipedia/ms.lproj/Localizable.strings 
b/wikipedia/ms.lproj/Localizable.strings
index 5908ed1..f77f0be 100644
--- a/wikipedia/ms.lproj/Localizable.strings
+++ b/wikipedia/ms.lproj/Localizable.strings
@@ -234,4 +234,4 @@
 "nearby-location-updates-settings-menu" = "Privasi > Perkhidmatan Lokasi > 
Wikipedia\n(Privacy > Location Services > Wikipedia)";
 "nearby-location-general-error" = "Lokasi tidak dapat ditentukan. Sila tarik 
untuk muat semula atau cuba lagi nanti.";
 "nearby-wifi" = "Memasang Wi-Fi boleh membantu peranti anda menentukan lokasi 
anda dengan lebih baik.";
-"update-progress-label" = "Menaiktaraf data setempat";
+"migration-update-progress-label" = "Menaiktaraf data setempat";
diff --git a/wikipedia/nl.lproj/Localizable.strings 
b/wikipedia/nl.lproj/Localizable.strings
index a1bd9f3..11dc693 100644
--- a/wikipedia/nl.lproj/Localizable.strings
+++ b/wikipedia/nl.lproj/Localizable.strings
@@ -249,4 +249,4 @@
 "nearby-location-updates-settings-menu" = "Privacy > Locatievoorzieningen > 
Wikipedia";
 "nearby-location-general-error" = "Kan locatie niet bepalen. Trek naar beneden 
om bij te werken of probeer het later opnieuw.";
 "nearby-wifi" = "Het inschakelen van Wi-Fi zorgt voor een nauwkeuriger 
locatie.";
-"update-progress-label" = "Lokale gegevens bijwerken";
+"migration-update-progress-label" = "Lokale gegevens bijwerken";
diff --git a/wikipedia/pt-br.lproj/Localizable.strings 
b/wikipedia/pt-br.lproj/Localizable.strings
index db52024..e5b5b50 100644
--- a/wikipedia/pt-br.lproj/Localizable.strings
+++ b/wikipedia/pt-br.lproj/Localizable.strings
@@ -252,4 +252,4 @@
 "nearby-location-updates-settings-menu" = "Privacidade > Serviços de 
localização > Wikipédia";
 "nearby-location-general-error" = "Não foi possível determinar a localização. 
Puxe para atualizar ou tente novamente mais tarde.";
 "nearby-wifi" = "Ativar o WiFi pode ajudar o seu dispositivo a determinar a 
sua localização.";
-"update-progress-label" = "Atualizando dados locais";
+"migration-update-progress-label" = "Atualizando dados locais";
diff --git a/wikipedia/pt.lproj/Localizable.strings 
b/wikipedia/pt.lproj/Localizable.strings
index 8ae96d6..96d9855 100644
--- a/wikipedia/pt.lproj/Localizable.strings
+++ b/wikipedia/pt.lproj/Localizable.strings
@@ -251,7 +251,7 @@
 "nearby-location-updates-settings-menu" = "Privacidade > Serviços de 
localização > Wikipédia";
 "nearby-location-general-error" = "Não foi possível determinar a localização. 
Puxe para atualizar ou tente novamente mais tarde.";
 "nearby-wifi" = "Ativar o WiFi pode ajudar o seu dispositivo a determinar a 
sua localização.";
-"update-progress-label" = "A atualizar dados locais";
+"migration-update-progress-label" = "A atualizar dados locais";
 "image-gallery-unknown-owner" = "Autor desconhecido.";
 // Fuzzy
 "hockeyapp-alert-question" = "Deseja enviar um relatório da falha de $1 para 
que possamos resolver o problema?";
diff --git a/wikipedia/qqq.lproj/Localizable.strings 
b/wikipedia/qqq.lproj/Localizable.strings
index ae05b8c..730147a 100644
--- a/wikipedia/qqq.lproj/Localizable.strings
+++ b/wikipedia/qqq.lproj/Localizable.strings
@@ -254,7 +254,8 @@
 "nearby-location-updates-settings-menu" = "Menu items to tap in the iOS 
Settings App to enable the Wikipedia App to get location updates. Please check 
on an iOS device to ensure correct menu text.";
 "nearby-location-general-error" = "General location determination error 
message";
 "nearby-wifi" = "Alert text telling user how to improve location accuracy";
-"update-progress-label" = "Label shown during automatic upgrade of local data 
to new internal format. May be on screen very briefly or for a few seconds.";
+"migration-update-progress-label" = "Label shown during automatic upgrade of 
local data to new internal format. May be on screen very briefly or for a few 
seconds.";
+"migration-update-progress-count-label" = "Shows the progress of article 
migration in text: 4 / 15, 5 / 15, etc…";
 "image-gallery-unknown-owner" = "Fallback text for when an item in the image 
gallery doesn't have a specified owner.";
 "hockeyapp-alert-question" = "Alert dialog question asking user whether to 
send a crash report to HockeyApp crash reporting server. $1 will be replaced 
programmatically with the constant string 'HockeyApp'";
 "hockeyapp-alert-question-with-response-field" = "Alert dialog question asking 
user whether to send a crash report to HockeyApp crash reporting server, and 
asking the user to describe what happened when the crash occurred. $1 will be 
replaced programmatically with the constant string 'HockeyApp'";
diff --git a/wikipedia/ro.lproj/Localizable.strings 
b/wikipedia/ro.lproj/Localizable.strings
index c6dd8be..38d76fb 100644
--- a/wikipedia/ro.lproj/Localizable.strings
+++ b/wikipedia/ro.lproj/Localizable.strings
@@ -246,7 +246,7 @@
 "nearby-location-updates-settings-menu" = "Intimitate > Servicii de localizare 
> Wikipedia";
 "nearby-location-general-error" = "Nu s-a putut efectua localizarea. Trageți 
pentru a reîmprospăta sau reîncercați mai târziu.";
 "nearby-wifi" = "Activarea conexiunii WiFi poate ajuta dispozitivul 
dumnevoastră să vă localizeze mai precis.";
-"update-progress-label" = "Se face upgrade datelor locale";
+"migration-update-progress-label" = "Se face upgrade datelor locale";
 "image-gallery-unknown-owner" = "Încărcare de la o persoană necunoscută.";
 "hockeyapp-alert-question" = "Ați dori să trimiteți un raport de blocare a 
aplicației către $1, astfel încât Wikimedia să studieze problema?";
 "hockeyapp-alert-question-with-response-field" = "Ați dori să trimiteți un 
raport de blocare a aplicației către $1, astfel încât Wikimedia să studieze 
problema? Vă rugăm să descrieți împrejurarea în care s-a produs blocarea:";
diff --git a/wikipedia/ru.lproj/Localizable.strings 
b/wikipedia/ru.lproj/Localizable.strings
index 598dee5..110ebdd 100644
--- a/wikipedia/ru.lproj/Localizable.strings
+++ b/wikipedia/ru.lproj/Localizable.strings
@@ -253,7 +253,7 @@
 "nearby-location-updates-settings-menu" = "Приватность > Службы геолокации > 
Википедия";
 "nearby-location-general-error" = "Не удаётся определить местоположение. 
Потяните, чтобы обновить или повторите попытку позже.";
 "nearby-wifi" = "Включение Wi-Fi может помочь устройству лучше определить ваше 
местоположение.";
-"update-progress-label" = "Обновление локальных данных";
+"migration-update-progress-label" = "Обновление локальных данных";
 "image-gallery-unknown-owner" = "Загрузивший файл неизвестен.";
 "hockeyapp-alert-question" = "Не хотели бы вы отправить отчет в $1, чтобы Фонд 
Викимедиа смог изучить ваш случай «падения»?";
 "hockeyapp-alert-question-with-response-field" = "Не хотели бы вы отправить 
отчет в $1, чтобы Фонд Викимедиа смог изучить ваш случай «падения»? Пожалуйста, 
опишите, что могло привести к этому:";
diff --git a/wikipedia/sv.lproj/Localizable.strings 
b/wikipedia/sv.lproj/Localizable.strings
index 8ab7dbe..b5308af 100644
--- a/wikipedia/sv.lproj/Localizable.strings
+++ b/wikipedia/sv.lproj/Localizable.strings
@@ -255,7 +255,7 @@
 "nearby-location-updates-settings-menu" = "Sekretess > Platstjänster > 
Wikipedia";
 "nearby-location-general-error" = "Det gick inte att bestämma plats. Dra för 
att uppdatera eller försök igen senare.";
 "nearby-wifi" = "Att aktivera wifi kan hjälpa din enhet att bättre avgöra din 
position.";
-"update-progress-label" = "Uppgraderar lokal data";
+"migration-update-progress-label" = "Uppgraderar lokal data";
 "image-gallery-unknown-owner" = "Okänd uppladdare.";
 "hockeyapp-alert-question" = "Vill du skicka en kraschrapport till $1 så kan 
Wikimedia kan undersöka din krasch?";
 "hockeyapp-alert-question-with-response-field" = "Vill du skicka en 
kraschrapport till $1 så att Wikimedia  undersöka din krasch? Beskriv vad som 
hände när kraschen inträffade:";
diff --git a/wikipedia/tr.lproj/Localizable.strings 
b/wikipedia/tr.lproj/Localizable.strings
index c1208d8..a06b8eb 100644
--- a/wikipedia/tr.lproj/Localizable.strings
+++ b/wikipedia/tr.lproj/Localizable.strings
@@ -252,7 +252,7 @@
 "nearby-location-updates-settings-menu" = "Gizlilik > Konum Servisleri > 
Wikipedia";
 "nearby-location-general-error" = "Konum belirlenemiyor. Yenilemek için aşağı 
çekin veya daha sonra tekrar deneyin.";
 "nearby-wifi" = "Kablosuz bağlantıyı etkinleştirmek, cihazınızın konumunuzu 
daha iyi belirlemesine yardımcı olabilir.";
-"update-progress-label" = "Yerel veri güncelleniyor";
+"migration-update-progress-label" = "Yerel veri güncelleniyor";
 "image-gallery-unknown-owner" = "Yükleyen bilinmiyor.";
 "hockeyapp-alert-question" = "Oluşan hatayı Wikimedia'nın inceleyebilmesi için 
$1'e çökme raporu göndermek ister misiniz?";
 "hockeyapp-alert-question-with-response-field" = "Oluşan hatayı Wikimedia'nın 
inceleyebilmesi için $1'e çökme raporu göndermek ister misiniz? Lütfen çökme 
gerçekleştiği sırada ne olduğunu tanımlayabilir misiniz:";
diff --git a/wikipedia/vi.lproj/Localizable.strings 
b/wikipedia/vi.lproj/Localizable.strings
index 1831a30..7554da4 100644
--- a/wikipedia/vi.lproj/Localizable.strings
+++ b/wikipedia/vi.lproj/Localizable.strings
@@ -249,7 +249,7 @@
 "nearby-location-updates-settings-menu" = "Bảo mật > Địa điểm > Wikipedia";
 "nearby-location-general-error" = "Không thể xác định vị trí. Kéo xuống để làm 
mới hoặc thử lại sau.";
 "nearby-wifi" = "Bật lên Wi-Fi để giúp thiết bị của bạn xác định vị trí của 
bạn một cách chính xác hơn.";
-"update-progress-label" = "Đang nâng cấp dữ liệu địa phương";
+"migration-update-progress-label" = "Đang nâng cấp dữ liệu địa phương";
 "image-gallery-unknown-owner" = "Người tải lên không rõ.";
 // Fuzzy
 "hockeyapp-alert-question" = "Bạn có muốn gửi bản báo cáo sự cố cho $1 để giúp 
chúng tôi sửa lỗi này?";
diff --git a/wikipedia/zh-hans.lproj/Localizable.strings 
b/wikipedia/zh-hans.lproj/Localizable.strings
index 74f277f..425e13e 100644
--- a/wikipedia/zh-hans.lproj/Localizable.strings
+++ b/wikipedia/zh-hans.lproj/Localizable.strings
@@ -253,7 +253,7 @@
 "nearby-location-updates-settings-menu" = "隐私 > 位置服务 > 维基百科";
 "nearby-location-general-error" = "无法确定位置。下拉刷新或稍后重试。";
 "nearby-wifi" = "启用Wi-Fi可使您的设备更好的确定您的位置。";
-"update-progress-label" = "升级本地数据";
+"migration-update-progress-label" = "升级本地数据";
 "image-gallery-unknown-owner" = "上传者未知。";
 "hockeyapp-alert-question" = "您想要将崩溃报告发送至$1,这样维基媒体可以复查您的崩溃么?";
 "hockeyapp-alert-question-with-response-field" = 
"您想要将崩溃报告发送至$1,这样维基媒体可以复查您的崩溃么?请描述崩溃发生时出现了什么现象:";

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I1297bb95e943749a28a99ba7488bd8d35acaf901
Gerrit-PatchSet: 1
Gerrit-Project: apps/ios/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Fjalapeno <[email protected]>

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

Reply via email to