Dr0ptp4kt has submitted this change and it was merged.
Change subject: Add text progress to migration Move migration to background
thread / context Hold reference to schema convertor
......................................................................
Add text progress to migration
Move migration to background thread / context
Hold reference to schema convertor
Change-Id: I1297bb95e943749a28a99ba7488bd8d35acaf901
---
M OldDataSchema/Data/ArticleDataContextSingleton.h
M OldDataSchema/Data/ArticleDataContextSingleton.m
M Wikipedia.xcodeproj/project.pbxproj
M WikipediaUnitTests/OldDataSchemaMigratorTests.m
M wikipedia/Data/OldDataSchemaMigrator.h
M wikipedia/Data/OldDataSchemaMigrator.m
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
32 files changed, 311 insertions(+), 213 deletions(-)
Approvals:
Dr0ptp4kt: Looks good to me, approved
Mhurd: Looks good to me, but someone else must approve
jenkins-bot: Verified
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/Wikipedia.xcodeproj/project.pbxproj
b/Wikipedia.xcodeproj/project.pbxproj
index 891d779..b3dbec8 100644
--- a/Wikipedia.xcodeproj/project.pbxproj
+++ b/Wikipedia.xcodeproj/project.pbxproj
@@ -744,9 +744,6 @@
08D631F91A69B8CD00D87AD0 /* WMFImageGalleryCollectionViewCell.m
*/ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType =
sourcecode.c.objc; name = WMFImageGalleryCollectionViewCell.m; path = "Image
Gallery/WMFImageGalleryCollectionViewCell.m"; 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; };
- 0ED01D611AC1DD3200B6947B /* OldDataSchemaMigrator.h */ = {isa =
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path =
OldDataSchemaMigrator.h; sourceTree = "<group>"; };
- 0ED01D621AC1DD3200B6947B /* OldDataSchemaMigrator.m */ = {isa =
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path
= OldDataSchemaMigrator.m; sourceTree = "<group>"; };
- 0ED01D631AC1DD3200B6947B /* OldDataSchemaMigrator_Private.h */
= {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType =
sourcecode.c.h; path = OldDataSchemaMigrator_Private.h; sourceTree = "<group>";
};
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>"; };
357504E50DA104E39C6ACFEB /* Pods.release.xcconfig */ = {isa =
PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name =
Pods.release.xcconfig; path = "Pods/Target Support
Files/Pods/Pods.release.xcconfig"; sourceTree = "<group>"; };
8CE61C6963F825760822A28A /* libPods-WikipediaUnitTests.a */ =
{isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0;
path = "libPods-WikipediaUnitTests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -2033,17 +2030,6 @@
name = "Image Gallery";
sourceTree = "<group>";
};
- 0ED01D601AC1DD3200B6947B /* OldDataSchemaMigrator */ = {
- isa = PBXGroup;
- children = (
- 0ED01D611AC1DD3200B6947B /*
OldDataSchemaMigrator.h */,
- 0ED01D621AC1DD3200B6947B /*
OldDataSchemaMigrator.m */,
- 0ED01D631AC1DD3200B6947B /*
OldDataSchemaMigrator_Private.h */,
- );
- name = OldDataSchemaMigrator;
- path = OldDataSchema/OldDataSchema;
- sourceTree = SOURCE_ROOT;
- };
BC8309941A7BF935003FC5C7 /* WikipediaUnitTests */ = {
isa = PBXGroup;
children = (
@@ -2406,7 +2392,6 @@
D4EE00BB182445670090790F /* mw-support */,
C9180EC118AED30C006C1DCA /* mw-utils */,
049566BF18F5F4CB0058EA12 /* Zero */,
- 0ED01D601AC1DD3200B6947B /*
OldDataSchemaMigrator */,
);
name = Wikipedia;
path = wikipedia;
diff --git a/WikipediaUnitTests/OldDataSchemaMigratorTests.m
b/WikipediaUnitTests/OldDataSchemaMigratorTests.m
index c58f861..a1be3b1 100644
--- a/WikipediaUnitTests/OldDataSchemaMigratorTests.m
+++ b/WikipediaUnitTests/OldDataSchemaMigratorTests.m
@@ -172,12 +172,8 @@
- (void)verifyArticleSectionAndLeadImages:(MWKArticle*)migratedArticle
correspondsToOldArticle:(Article*)oldArticle {
NSArray* oldArticleImages = [oldArticle allImages];
-
- // if the article has a thumbnail, it will be the first element, followed
by the images from each section
NSUInteger const thumbnailModifier = oldArticle.thumbnailImage ? 1 : 0;
-
- assertThat(@(migratedArticle.images.count), is(@(oldArticleImages.count +
thumbnailModifier)));
-
+ assertThat(@(migratedArticle.images.count),
is(equalToInt(oldArticleImages.count + thumbnailModifier)));
for (NSUInteger i = thumbnailModifier; i < oldArticleImages.count; i++) {
Image* oldImage = oldArticleImages[i];
MWKImage* migratedImage = migratedArticle.images[i +
thumbnailModifier];
diff --git a/wikipedia/Data/OldDataSchemaMigrator.h
b/wikipedia/Data/OldDataSchemaMigrator.h
index 2c51954..626fceb 100644
--- a/wikipedia/Data/OldDataSchemaMigrator.h
+++ b/wikipedia/Data/OldDataSchemaMigrator.h
@@ -25,13 +25,29 @@
@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;
-- (void)migrateData;
-- (void)removeOldData;
+-(BOOL)exists;
+
+/**
+ * This runs asynchronously.
+ * Use the progress delegate methods to get notifified when the migration
completes.
+ */
+-(void)migrateData;
@end
diff --git a/wikipedia/Data/OldDataSchemaMigrator.m
b/wikipedia/Data/OldDataSchemaMigrator.m
index 22c2e0b..73e9db9 100644
--- a/wikipedia/Data/OldDataSchemaMigrator.m
+++ b/wikipedia/Data/OldDataSchemaMigrator.m
@@ -13,40 +13,48 @@
#import "NSManagedObjectContext+SimpleFetch.h"
#import "Article+ConvenienceAccessors.h"
-@implementation OldDataSchemaMigrator {
- ArticleDataContextSingleton* context;
- NSMutableSet* savedTitles;
-}
+@interface OldDataSchemaMigrator ()
-- (instancetype)init {
+@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;
}
-- (NSString*)sqlitePath {
- NSArray* documentPaths =
NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
- NSString* documentRootPath = [documentPaths objectAtIndex:0];
- NSString* filePath = [documentRootPath
stringByAppendingPathComponent:@"articleData6.sqlite"];
+-(NSString *)sqlitePath
+{
+ NSArray *documentPaths =
NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
+ NSString *documentRootPath = [documentPaths objectAtIndex:0];
+ NSString *filePath = [documentRootPath
stringByAppendingPathComponent:@"articleData6.sqlite"];
return filePath;
}
-- (BOOL)exists {
- NSString* filePath = [self sqlitePath];
+-(BOOL)exists
+{
+ NSString *filePath = [self sqlitePath];
return [[NSFileManager defaultManager] fileExistsAtPath:filePath];
}
-- (void)removeOldData {
- NSString* filePath = [self sqlitePath];
- NSString* backupPath = [filePath stringByAppendingString:@".bak"];
- NSError* err = nil;
+-(void)removeOldData
+{
+ NSString *filePath = [self sqlitePath];
+ NSString *backupPath = [filePath stringByAppendingString:@".bak"];
+ NSError *err = nil;
[[NSFileManager defaultManager] moveItemAtPath:filePath
toPath:backupPath
error:&err];
@@ -55,35 +63,69 @@
}
}
-- (void)migrateData {
+-(void)migrateData
+{
// 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];
@@ -93,43 +135,41 @@
return [[self migrateArticleSite:article] titleWithString:article.title];
}
-- (void)migrateSaved:(Saved*)saved {
- NSDictionary* dict = [self exportSaved:saved];
+-(void)migrateSaved:(Saved *)saved
+{
+ NSDictionary *dict = [self exportSaved:saved];
[self.delegate oldDataSchema:self migrateSavedEntry:dict];
}
-- (void)migrateHistory:(History*)history {
- NSDictionary* dict = [self exportHistory:history];
+-(void)migrateHistory:(History *)history
+{
+ NSDictionary *dict = [self exportHistory:history];
[self.delegate oldDataSchema:self migrateHistoryEntry:dict];
}
-- (void)migrateArticle:(Article*)article {
- NSString* key = [NSString stringWithFormat:@"%@:%@", article.domain,
article.title];
- if ([savedTitles containsObject:key]) {
+-(void)migrateArticle:(Article *)article
+{
+ NSString *key = [NSString stringWithFormat:@"%@:%@", article.domain,
article.title];
+ 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]];
- Image* thumbnail = article.thumbnailImage;
+ Image *thumbnail = article.thumbnailImage;
if (thumbnail) {
[self migrateThumbnailImage:thumbnail article:article
newArticle:migratedArticle];
}
// HACK: setting thumbnailURL after migration prevents it from being
added to the image list twice
migratedArticle.thumbnailURL = thumbnail.sourceUrl;
- for (Section* section in [article sectionsBySectionId]) {
- for (SectionImage* sectionImage in [section sectionImagesByIndex])
{
+ for (Section *section in [article sectionsBySectionId]) {
+ for (SectionImage *sectionImage in [section sectionImagesByIndex])
{
[self migrateImage:sectionImage newArticle:migratedArticle];
}
}
-
- 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]) {
@@ -147,39 +187,44 @@
}
}
-- (void)migrateThumbnailImage:(Image*)thumbnailImage article:(Article*)article
newArticle:(MWKArticle*)newArticle {
- NSDictionary* dict = [self exportThumbnailImage:thumbnailImage
article:article];
+-(void)migrateThumbnailImage:(Image *)thumbnailImage article:(Article
*)article newArticle:(MWKArticle *)newArticle
+{
+ NSDictionary *dict = [self exportThumbnailImage:thumbnailImage
article:article];
[self.delegate oldDataSchema:self migrateImage:dict newArticle:newArticle];
}
-- (void)migrateImage:(SectionImage*)sectionImage
newArticle:(MWKArticle*)newArticle {
- NSDictionary* dict = [self exportImage:sectionImage];
+-(void)migrateImage:(SectionImage *)sectionImage newArticle:(MWKArticle
*)newArticle
+{
+ NSDictionary *dict = [self exportImage:sectionImage];
[self.delegate oldDataSchema:self migrateImage:dict newArticle:newArticle];
}
-- (NSDictionary*)exportSaved:(Saved*)saved {
+-(NSDictionary *)exportSaved:(Saved *)saved
+{
return @{
- @"domain": @"wikipedia.org",
- @"language": saved.article.domain,
- @"title": saved.article.title,
- @"date": [[NSDateFormatter wmf_iso8601Formatter]
stringFromDate:saved.dateSaved]
- };
+ @"domain": @"wikipedia.org",
+ @"language": saved.article.domain,
+ @"title": saved.article.title,
+ @"date": [[NSDateFormatter wmf_iso8601Formatter]
stringFromDate:saved.dateSaved]
+ };
}
-- (NSDictionary*)exportHistory:(History*)history {
+-(NSDictionary *)exportHistory:(History *)history
+{
return @{
- @"domain": @"wikipedia.org",
- @"language": history.article.domain,
- @"title": history.article.title,
- @"date": [[NSDateFormatter wmf_iso8601Formatter]
stringFromDate:history.dateVisited],
- @"discoveryMethod": history.discoveryMethod,
- @"scrollPosition": history.article.lastScrollY
- };
+ @"domain": @"wikipedia.org",
+ @"language": history.article.domain,
+ @"title": history.article.title,
+ @"date": [[NSDateFormatter wmf_iso8601Formatter]
stringFromDate:history.dateVisited],
+ @"discoveryMethod": history.discoveryMethod,
+ @"scrollPosition": history.article.lastScrollY
+ };
}
-- (NSDictionary*)exportArticle:(Article*)article {
+-(NSDictionary *)exportArticle:(Article *)article
+{
NSParameterAssert(article);
- NSMutableDictionary* dict = [@{} mutableCopy];
+ NSMutableDictionary *dict = [@{} mutableCopy];
if (article.redirected) {
dict[@"redirected"] = article.redirected;
@@ -189,9 +234,9 @@
}
if (article.lastmodifiedby) {
dict[@"lastmodifiedby"] = @{
- @"name": article.lastmodifiedby,
- @"gender": @"unknown"
- };
+ @"name": article.lastmodifiedby,
+ @"gender": @"unknown"
+ };
}
if (article.articleId) {
dict[@"id"] = article.articleId;
@@ -204,8 +249,8 @@
}
if (article.protectionStatus) {
dict[@"protection"] = @{
- @"edit": article.protectionStatus
- };
+ @"edit": article.protectionStatus
+ };
}
if (article.editable) {
dict[@"editable"] = @"";
@@ -218,22 +263,23 @@
for (int i = 0; i < numSections; i++) {
dict[@"sections"][i] = [NSNull null]; // stub out
}
- for (Section* section in article.section) {
+ for (Section *section in article.section) {
int sectionId = [section.sectionId intValue];
dict[@"sections"][sectionId] = [self exportSection:section];
}
}
return @{
- @"language": article.domain,
- @"title": article.title,
- @"dict": dict
- };
+ @"language": article.domain,
+ @"title": article.title,
+ @"dict": dict
+ };
}
-- (NSDictionary*)exportSection:(Section*)section {
+-(NSDictionary *)exportSection:(Section *)section
+{
NSParameterAssert(section);
- NSMutableDictionary* dict = [@{} mutableCopy];
+ NSMutableDictionary *dict = [@{} mutableCopy];
if (section.tocLevel) {
dict[@"toclevel"] = section.tocLevel;
@@ -258,16 +304,17 @@
return dict;
}
-- (NSDictionary*)exportThumbnailImage:(Image*)image article:(Article*)article {
+-(NSDictionary *)exportThumbnailImage:(Image *)image article:(Article *)article
+{
NSParameterAssert(image);
NSParameterAssert(article);
- ImageData* imageData = image.imageData;
+ ImageData *imageData = image.imageData;
- NSMutableDictionary* dict = [[NSMutableDictionary alloc] init];
+ NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
- dict[@"domain"] = @"wikipedia.org";
+ dict[@"domain"] = @"wikipedia.org";
dict[@"language"] = article.domain;
- dict[@"title"] = article.title;
+ dict[@"title"] = article.title;
dict[@"sectionId"] = @(-1);
@@ -279,18 +326,19 @@
return dict;
}
-- (NSDictionary*)exportImage:(SectionImage*)sectionImage {
+-(NSDictionary *)exportImage:(SectionImage *)sectionImage
+{
NSParameterAssert(sectionImage);
- Section* section = sectionImage.section;
- Article* article = section.article;
- Image* image = sectionImage.image;
- ImageData* imageData = image.imageData;
+ Section *section = sectionImage.section;
+ Article *article = section.article;
+ Image *image = sectionImage.image;
+ ImageData *imageData = image.imageData;
- NSMutableDictionary* dict = [[NSMutableDictionary alloc] init];
+ NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
- dict[@"domain"] = @"wikipedia.org";
+ dict[@"domain"] = @"wikipedia.org";
dict[@"language"] = article.domain;
- dict[@"title"] = article.title;
+ dict[@"title"] = article.title;
dict[@"sectionId"] = section.sectionId;
diff --git a/wikipedia/View
Controllers/DataMigration/DataMigrationProgressViewController.m
b/wikipedia/View Controllers/DataMigration/DataMigrationProgressViewController.m
index 5294ed1..7312b9d 100644
--- a/wikipedia/View
Controllers/DataMigration/DataMigrationProgressViewController.m
+++ b/wikipedia/View
Controllers/DataMigration/DataMigrationProgressViewController.m
@@ -23,24 +23,21 @@
BUTTON_INDEX_SUBMIT = 1
} MigrationButtonIndexIds;
-@interface DataMigrationProgressViewController ()
+@interface DataMigrationProgressViewController
()<OldDataSchemaMigratorProgressDelegate>
-@property (readonly) OldDataSchemaMigrator* oldDataSchema;
-@property (readonly) DataMigrator* dataMigrator;
+@property (nonatomic, strong) SchemaConverter* schemaConvertor;
+@property (nonatomic, strong) OldDataSchemaMigrator* oldDataSchema;
+@property (nonatomic, strong) DataMigrator* dataMigrator;
@end
-@implementation DataMigrationProgressViewController {
- OldDataSchemaMigrator* _oldDataSchema;
- DataMigrator* _dataMigrator;
-}
-
+@implementation DataMigrationProgressViewController
- (void)viewDidLoad {
[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 +48,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 {
@@ -68,68 +72,71 @@
return _dataMigrator;
}
+- (SchemaConverter*)schemaConvertor{
+ if(!_schemaConvertor){
+ _schemaConvertor = [[SchemaConverter alloc]
initWithDataStore:[SessionSingleton sharedInstance].dataStore];
+ }
+ return _schemaConvertor;
+}
+
- (BOOL)needsMigration {
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");
+ self.oldDataSchema.delegate = self.schemaConvertor;
+ 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: merged
Gerrit-Change-Id: I1297bb95e943749a28a99ba7488bd8d35acaf901
Gerrit-PatchSet: 6
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: Mhurd <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits