Bgerstle has uploaded a new change for review.

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

Change subject: associate images using URLs
......................................................................

associate images using URLs

- Use source URLs to determine whether image info corresponds to an
  image
- Lazily calculate and cache the regex output used to calculate filename
  from URL
- some other minor things (fix for unit tests)

Bug: T89914
Change-Id: I862704957b81ab39646368851028e48931ae67d2
---
M MediaWikiKit/MediaWikiKit/MWKImage.m
M MediaWikiKit/MediaWikiKit/MWKImageInfo+MWKImageComparison.h
M MediaWikiKit/MediaWikiKit/MWKImageInfo+MWKImageComparison.m
M MediaWikiKit/MediaWikiKit/MWKImageInfo.h
M MediaWikiKit/MediaWikiKit/MWKImageInfo.m
M MediaWikiKit/MediaWikiKitTests/MWKImageListTests.m
M Wikipedia.xcodeproj/project.pbxproj
M wikipedia/View Controllers/Image Gallery/WMFImageGalleryViewController.m
A wikipedia/mw-utils/WMFImageURLParsing.h
A wikipedia/mw-utils/WMFImageURLParsing.m
10 files changed, 81 insertions(+), 49 deletions(-)


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

diff --git a/MediaWikiKit/MediaWikiKit/MWKImage.m 
b/MediaWikiKit/MediaWikiKit/MWKImage.m
index 34876f3..2f41f69 100644
--- a/MediaWikiKit/MediaWikiKit/MWKImage.m
+++ b/MediaWikiKit/MediaWikiKit/MWKImage.m
@@ -9,6 +9,13 @@
 #import "UIKit/UIKit.h"
 #import "WikipediaAppUtils.h"
 #import "MediaWikiKit.h"
+#import "WMFImageURLParsing.h"
+
+@interface MWKImage ()
+{
+    NSString* _fileNameNoSizePrefix;
+}
+@end
 
 @implementation MWKImage
 
@@ -17,6 +24,8 @@
     self = [super initWithSite:article.site];
     if (self) {
         _article = article;
+
+        // fileNameNoSizePrefix is lazily derived from this property, so be 
careful if _sourceURL needs to be re-set
         _sourceURL = [url copy];
 
         _dateLastAccessed = nil;
@@ -72,16 +81,7 @@
 
 +(NSString *)fileNameNoSizePrefix:(NSString *)sourceURL
 {
-    if (!sourceURL) { return nil; }
-
-    NSString *fileName = [sourceURL lastPathComponent];
-    NSRegularExpression *re = [NSRegularExpression 
regularExpressionWithPattern:@"^\\d+px-(.*)$" options:0 error:nil];
-    NSArray *matches = [re matchesInString:fileName options:0 
range:NSMakeRange(0, [fileName length])];
-    if ([matches count]) {
-        return [fileName substringWithRange:[matches[0] rangeAtIndex:1]];
-    } else {
-        return fileName;
-    }
+    return WMFParseImageNameFromSourceURL(sourceURL);
 }
 
 + (NSString*)canonicalFilenameFromSourceURL:(NSString *)sourceURL
@@ -101,9 +101,12 @@
     }
 }
 
--(NSString *)fileNameNoSizePrefix
+-(NSString*)fileNameNoSizePrefix
 {
-    return [MWKImage fileNameNoSizePrefix:self.sourceURL];
+    if (!_fileNameNoSizePrefix) {
+        _fileNameNoSizePrefix = [MWKImage fileNameNoSizePrefix:self.sourceURL];
+    }
+    return _fileNameNoSizePrefix;
 }
 
 -(id)dataExport
diff --git a/MediaWikiKit/MediaWikiKit/MWKImageInfo+MWKImageComparison.h 
b/MediaWikiKit/MediaWikiKit/MWKImageInfo+MWKImageComparison.h
index a8d6d2c..19ed0e6 100644
--- a/MediaWikiKit/MediaWikiKit/MWKImageInfo+MWKImageComparison.h
+++ b/MediaWikiKit/MediaWikiKit/MWKImageInfo+MWKImageComparison.h
@@ -9,11 +9,7 @@
 #import "MWKImageInfo.h"
 #import "MWKImage.h"
 
-FOUNDATION_EXPORT NSString* const MWKImageAssociationKeyPath;
-
 @interface MWKImageInfo (MWKImageComparison)
-
-- (id)imageAssociationValue;
 
 - (BOOL)isAssociatedWithImage:(MWKImage*)image;
 
@@ -21,7 +17,7 @@
 
 @interface MWKImage (MWKImageInfoComparison)
 
-- (id)infoAssociationValue;
+@property (nonatomic, readonly) id infoAssociationValue;
 
 - (BOOL)isAssociatedWithInfo:(MWKImageInfo*)info;
 
diff --git a/MediaWikiKit/MediaWikiKit/MWKImageInfo+MWKImageComparison.m 
b/MediaWikiKit/MediaWikiKit/MWKImageInfo+MWKImageComparison.m
index 7d08be2..6e6e540 100644
--- a/MediaWikiKit/MediaWikiKit/MWKImageInfo+MWKImageComparison.m
+++ b/MediaWikiKit/MediaWikiKit/MWKImageInfo+MWKImageComparison.m
@@ -10,18 +10,11 @@
 #import "MWKImage.h"
 #import "WikipediaAppUtils.h"
 
-NSString* const MWKImageAssociationKeyPath = @"canonicalFilename";
-
 @implementation MWKImageInfo (MWKImageComparison)
-
-- (id)imageAssociationValue
-{
-    return self.canonicalFilename;
-}
 
 - (BOOL)isAssociatedWithImage:(MWKImage *)image
 {
-    return [self.canonicalFilename isEqualToString:image.canonicalFilename];
+    return [self.imageAssociationValue isEqual:image.infoAssociationValue];
 }
 
 @end
@@ -30,7 +23,7 @@
 
 - (id)infoAssociationValue
 {
-    return self.canonicalFilename;
+    return self.fileNameNoSizePrefix;
 }
 
 - (BOOL)isAssociatedWithInfo:(MWKImageInfo *)info
diff --git a/MediaWikiKit/MediaWikiKit/MWKImageInfo.h 
b/MediaWikiKit/MediaWikiKit/MWKImageInfo.h
index 6f88475..73790d6 100644
--- a/MediaWikiKit/MediaWikiKit/MWKImageInfo.h
+++ b/MediaWikiKit/MediaWikiKit/MWKImageInfo.h
@@ -46,7 +46,7 @@
                              imageThumbURL:(NSURL*)imageThumbURL
                                      owner:(NSString*)owner;
 
-/// Name of the canonical file associated with the receiver, without the 
"File:" prefix.
-- (NSString*)canonicalFilename;
+/// Value which can be used to associate the receiver with a @c MWKImage.
+- (id)imageAssociationValue;
 
 @end
diff --git a/MediaWikiKit/MediaWikiKit/MWKImageInfo.m 
b/MediaWikiKit/MediaWikiKit/MWKImageInfo.m
index 818623c..14d449c 100644
--- a/MediaWikiKit/MediaWikiKit/MWKImageInfo.m
+++ b/MediaWikiKit/MediaWikiKit/MWKImageInfo.m
@@ -8,6 +8,7 @@
 #import "MediaWikiKit.h"
 #import "NSMutableDictionary+WMFMaybeSet.h"
 #import "WikipediaAppUtils.h"
+#import "WMFImageURLParsing.h"
 
 // !!!: don't change key constants w/o writing conversion code to pull values 
from the old keys
 
@@ -23,6 +24,13 @@
 NSString* const MWKImageInfoImageThumbURLKey = @"imageThumbURL";
 NSString* const MWKImageInfoOwnerKey = @"owner";
 NSString* const MWKImageInfoLicenseKey = @"license";
+
+@interface MWKImageInfo ()
+{
+    /// Lazily value derived from @c imageURL.
+    id _imageAssociationValue;
+}
+@end
 
 @implementation MWKImageInfo
 
@@ -97,13 +105,13 @@
 - (BOOL)isEqualToGalleryItem:(MWKImageInfo*)other
 {
     return WMF_EQUAL(self.canonicalPageTitle, isEqualToString:, 
other.canonicalPageTitle)
-            && WMF_IS_EQUAL(self.canonicalFileURL, other.canonicalFileURL)
-            && WMF_EQUAL(self.imageDescription, isEqualToString:, 
other.imageDescription)
-            && WMF_EQUAL(self.license, isEqualToLicense:, other.license)
-            && WMF_IS_EQUAL(self.filePageURL, other.filePageURL)
-            && WMF_IS_EQUAL(self.imageURL, other.imageURL)
-            && WMF_IS_EQUAL(self.imageThumbURL, other.imageThumbURL)
-            && WMF_EQUAL(self.owner, isEqualToString:, other.owner);
+           && WMF_IS_EQUAL(self.canonicalFileURL, other.canonicalFileURL)
+           && WMF_EQUAL(self.imageDescription, isEqualToString:, 
other.imageDescription)
+           && WMF_EQUAL(self.license, isEqualToLicense:, other.license)
+           && WMF_IS_EQUAL(self.filePageURL, other.filePageURL)
+           && WMF_IS_EQUAL(self.imageURL, other.imageURL)
+           && WMF_IS_EQUAL(self.imageThumbURL, other.imageThumbURL)
+           && WMF_EQUAL(self.owner, isEqualToString:, other.owner);
 }
 
 - (NSUInteger)hash
@@ -118,14 +126,12 @@
 
 #pragma mark - Calculated properties
 
-- (NSString*)canonicalFilename
+- (id)imageAssociationValue
 {
-    if (self.canonicalPageTitle.length > 5) {
-        // string after "File:" prefix
-        return [self.canonicalPageTitle substringFromIndex:5];
-    } else {
-        return nil;
+    if (!_imageAssociationValue) {
+        _imageAssociationValue = WMFParseImageNameFromSourceURL(self.imageURL);
     }
+    return _imageAssociationValue;
 }
 
 @end
diff --git a/MediaWikiKit/MediaWikiKitTests/MWKImageListTests.m 
b/MediaWikiKit/MediaWikiKitTests/MWKImageListTests.m
index 0427a6d..f4be8fd 100644
--- a/MediaWikiKit/MediaWikiKitTests/MWKImageListTests.m
+++ b/MediaWikiKit/MediaWikiKitTests/MWKImageListTests.m
@@ -46,7 +46,7 @@
 
     // create article w/ mock section to prevent crashing due to image import 
side effects
     MWKArticle *article = [[MWKArticle alloc] initWithTitle:nil 
dataStore:tmpDataStore];
-    [article.sections addSection:mock([MWKSection class])];
+    [article.sections setSections:mock([MWKSection class])];
 
     NSArray *dummySourceURLs = [@[@"10px-a.jpg", @"10px-b.jpg", 
@"100px-a.jpg", @"10px-c.jpg"] bk_map:^id(id obj) {
         return [MWKDataStoreValidImageSitePrefix stringByAppendingString:obj];
diff --git a/Wikipedia.xcodeproj/project.pbxproj 
b/Wikipedia.xcodeproj/project.pbxproj
index ef9816b..30c8a11 100644
--- a/Wikipedia.xcodeproj/project.pbxproj
+++ b/Wikipedia.xcodeproj/project.pbxproj
@@ -202,6 +202,8 @@
                BC50C3831A83C88F006DC7AF /* WMFJoinedPropertyParametersTests.m 
in Sources */ = {isa = PBXBuildFile; fileRef = BC50C3821A83C88F006DC7AF /* 
WMFJoinedPropertyParametersTests.m */; };
                BC50C3841A83C96D006DC7AF /* WMFNetworkUtilities.m in Sources */ 
= {isa = PBXBuildFile; fileRef = BC50C37E1A83C784006DC7AF /* 
WMFNetworkUtilities.m */; };
                BC50C3871A83CBDA006DC7AF /* MWKImageInfoResponseSerializer.m in 
Sources */ = {isa = PBXBuildFile; fileRef = BC50C3861A83CBDA006DC7AF /* 
MWKImageInfoResponseSerializer.m */; };
+               BC7DFCD61AA4E5FE000035C3 /* WMFImageURLParsing.m in Sources */ 
= {isa = PBXBuildFile; fileRef = BC7DFCD51AA4E5FE000035C3 /* 
WMFImageURLParsing.m */; };
+               BC7DFCD71AA4E5FE000035C3 /* WMFImageURLParsing.m in Sources */ 
= {isa = PBXBuildFile; fileRef = BC7DFCD51AA4E5FE000035C3 /* 
WMFImageURLParsing.m */; };
                BC86B9361A92966B00B4C039 /* 
AFHTTPRequestOperationManager+UniqueRequests.m in Sources */ = {isa = 
PBXBuildFile; fileRef = BC86B9351A92966B00B4C039 /* 
AFHTTPRequestOperationManager+UniqueRequests.m */; };
                BC86B93D1A929CC500B4C039 /* 
UICollectionViewFlowLayout+NSCopying.m in Sources */ = {isa = PBXBuildFile; 
fileRef = BC86B93C1A929CC500B4C039 /* UICollectionViewFlowLayout+NSCopying.m 
*/; };
                BC86B9401A929D7900B4C039 /* 
UICollectionViewFlowLayout+WMFItemSizeThatFits.m in Sources */ = {isa = 
PBXBuildFile; fileRef = BC86B93F1A929D7900B4C039 /* 
UICollectionViewFlowLayout+WMFItemSizeThatFits.m */; };
@@ -290,12 +292,12 @@
                BCB66A0C1A85183000C7B1FE /* NSString+WMFHTMLParsing.m in 
Sources */ = {isa = PBXBuildFile; fileRef = BCB66A0B1A85183000C7B1FE /* 
NSString+WMFHTMLParsing.m */; };
                BCB66A0D1A85183000C7B1FE /* NSString+WMFHTMLParsing.m in 
Sources */ = {isa = PBXBuildFile; fileRef = BCB66A0B1A85183000C7B1FE /* 
NSString+WMFHTMLParsing.m */; };
                BCB66A101A851C9B00C7B1FE /* MWKImageListTests.m in Sources */ = 
{isa = PBXBuildFile; fileRef = BCB66A0F1A851C9B00C7B1FE /* MWKImageListTests.m 
*/; };
+               BCC185E81A9FA498005378F8 /* 
UICollectionViewFlowLayout+AttributeUtils.m in Sources */ = {isa = 
PBXBuildFile; fileRef = BCC185E71A9FA498005378F8 /* 
UICollectionViewFlowLayout+AttributeUtils.m */; };
+               BCC185E91A9FA498005378F8 /* 
UICollectionViewFlowLayout+AttributeUtils.m in Sources */ = {isa = 
PBXBuildFile; fileRef = BCC185E71A9FA498005378F8 /* 
UICollectionViewFlowLayout+AttributeUtils.m */; };
                C42D947E1A937DAC00A4871A /* SavedArticlesFetcher.m in Sources 
*/ = {isa = PBXBuildFile; fileRef = C42D947D1A937DAC00A4871A /* 
SavedArticlesFetcher.m */; };
                C42D94861A937DE000A4871A /* WMFBorderButton.m in Sources */ = 
{isa = PBXBuildFile; fileRef = C42D94831A937DE000A4871A /* WMFBorderButton.m 
*/; };
                C42D94871A937DE000A4871A /* WMFProgressLineView.m in Sources */ 
= {isa = PBXBuildFile; fileRef = C42D94851A937DE000A4871A /* 
WMFProgressLineView.m */; };
                C42D94BC1A95405000A4871A /* NSArray+WMFExtensions.m in Sources 
*/ = {isa = PBXBuildFile; fileRef = C42D94BB1A95405000A4871A /* 
NSArray+WMFExtensions.m */; };
-               BCC185E81A9FA498005378F8 /* 
UICollectionViewFlowLayout+AttributeUtils.m in Sources */ = {isa = 
PBXBuildFile; fileRef = BCC185E71A9FA498005378F8 /* 
UICollectionViewFlowLayout+AttributeUtils.m */; };
-               BCC185E91A9FA498005378F8 /* 
UICollectionViewFlowLayout+AttributeUtils.m in Sources */ = {isa = 
PBXBuildFile; fileRef = BCC185E71A9FA498005378F8 /* 
UICollectionViewFlowLayout+AttributeUtils.m */; };
                C46FBA4B1A8530EE00C5730F /* Pods-acknowledgements.plist in 
Resources */ = {isa = PBXBuildFile; fileRef = C46FBA4A1A8530EE00C5730F /* 
Pods-acknowledgements.plist */; };
                C90799BA1A8564C60044E13C /* WMFShareOptionsViewController.m in 
Sources */ = {isa = PBXBuildFile; fileRef = C90799B91A8564C60044E13C /* 
WMFShareOptionsViewController.m */; };
                C913C89C1A94019A00BEEAF0 /* WMFSuggestedPagesFunnel.m in 
Sources */ = {isa = PBXBuildFile; fileRef = C913C89B1A94019A00BEEAF0 /* 
WMFSuggestedPagesFunnel.m */; };
@@ -708,6 +710,8 @@
                BC50C3821A83C88F006DC7AF /* WMFJoinedPropertyParametersTests.m 
*/ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = 
sourcecode.c.objc; path = WMFJoinedPropertyParametersTests.m; sourceTree = 
"<group>"; };
                BC50C3851A83CBDA006DC7AF /* MWKImageInfoResponseSerializer.h */ 
= {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = 
sourcecode.c.h; name = MWKImageInfoResponseSerializer.h; path = 
Serializers/MWKImageInfoResponseSerializer.h; sourceTree = "<group>"; };
                BC50C3861A83CBDA006DC7AF /* MWKImageInfoResponseSerializer.m */ 
= {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = 
sourcecode.c.objc; name = MWKImageInfoResponseSerializer.m; path = 
Serializers/MWKImageInfoResponseSerializer.m; sourceTree = "<group>"; };
+               BC7DFCD41AA4E5FE000035C3 /* WMFImageURLParsing.h */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = 
WMFImageURLParsing.h; sourceTree = "<group>"; };
+               BC7DFCD51AA4E5FE000035C3 /* WMFImageURLParsing.m */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path 
= WMFImageURLParsing.m; sourceTree = "<group>"; };
                BC8309961A7BF935003FC5C7 /* Info.plist */ = {isa = 
PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; 
sourceTree = "<group>"; };
                BC8309C81A7C370B003FC5C7 /* NSArray+PredicateTests.m */ = {isa 
= PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; 
name = "NSArray+PredicateTests.m"; path = "Utilities/NSArray+PredicateTests.m"; 
sourceTree = "<group>"; };
                BC86B9341A92966B00B4C039 /* 
AFHTTPRequestOperationManager+UniqueRequests.h */ = {isa = PBXFileReference; 
fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = 
"AFHTTPRequestOperationManager+UniqueRequests.h"; sourceTree = "<group>"; };
@@ -807,6 +811,8 @@
                BCB66A0A1A85183000C7B1FE /* NSString+WMFHTMLParsing.h */ = {isa 
= PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path 
= "NSString+WMFHTMLParsing.h"; sourceTree = "<group>"; };
                BCB66A0B1A85183000C7B1FE /* NSString+WMFHTMLParsing.m */ = {isa 
= PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; 
path = "NSString+WMFHTMLParsing.m"; sourceTree = "<group>"; };
                BCB66A0F1A851C9B00C7B1FE /* MWKImageListTests.m */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path 
= MWKImageListTests.m; sourceTree = "<group>"; };
+               BCC185E61A9FA498005378F8 /* 
UICollectionViewFlowLayout+AttributeUtils.h */ = {isa = PBXFileReference; 
fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = 
"UICollectionViewFlowLayout+AttributeUtils.h"; sourceTree = "<group>"; };
+               BCC185E71A9FA498005378F8 /* 
UICollectionViewFlowLayout+AttributeUtils.m */ = {isa = PBXFileReference; 
fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = 
"UICollectionViewFlowLayout+AttributeUtils.m"; sourceTree = "<group>"; };
                C42D947C1A937DAC00A4871A /* SavedArticlesFetcher.h */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = 
SavedArticlesFetcher.h; sourceTree = "<group>"; };
                C42D947D1A937DAC00A4871A /* SavedArticlesFetcher.m */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path 
= SavedArticlesFetcher.m; sourceTree = "<group>"; };
                C42D94821A937DE000A4871A /* WMFBorderButton.h */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = 
WMFBorderButton.h; sourceTree = "<group>"; };
@@ -815,8 +821,6 @@
                C42D94851A937DE000A4871A /* WMFProgressLineView.m */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path 
= WMFProgressLineView.m; sourceTree = "<group>"; };
                C42D94BA1A95405000A4871A /* NSArray+WMFExtensions.h */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = 
"NSArray+WMFExtensions.h"; path = 
"Wikipedia/Categories/NSArray+WMFExtensions.h"; sourceTree = SOURCE_ROOT; };
                C42D94BB1A95405000A4871A /* NSArray+WMFExtensions.m */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name 
= "NSArray+WMFExtensions.m"; path = 
"Wikipedia/Categories/NSArray+WMFExtensions.m"; sourceTree = SOURCE_ROOT; };
-               BCC185E61A9FA498005378F8 /* 
UICollectionViewFlowLayout+AttributeUtils.h */ = {isa = PBXFileReference; 
fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = 
"UICollectionViewFlowLayout+AttributeUtils.h"; sourceTree = "<group>"; };
-               BCC185E71A9FA498005378F8 /* 
UICollectionViewFlowLayout+AttributeUtils.m */ = {isa = PBXFileReference; 
fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = 
"UICollectionViewFlowLayout+AttributeUtils.m"; sourceTree = "<group>"; };
                C46FBA4A1A8530EE00C5730F /* Pods-acknowledgements.plist */ = 
{isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; 
name = "Pods-acknowledgements.plist"; path = "../../../Pods/Target Support 
Files/Pods/Pods-acknowledgements.plist"; sourceTree = "<group>"; };
                C90799B81A8564C60044E13C /* WMFShareOptionsViewController.h */ 
= {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = 
sourcecode.c.h; name = WMFShareOptionsViewController.h; path = 
ShareCard/WMFShareOptionsViewController.h; sourceTree = "<group>"; };
                C90799B91A8564C60044E13C /* WMFShareOptionsViewController.m */ 
= {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = 
sourcecode.c.objc; name = WMFShareOptionsViewController.m; path = 
ShareCard/WMFShareOptionsViewController.m; sourceTree = "<group>"; };
@@ -2103,6 +2107,8 @@
                        children = (
                                C9180EC218AED30C006C1DCA /* WikipediaAppUtils.h 
*/,
                                C9180EC318AED30C006C1DCA /* WikipediaAppUtils.m 
*/,
+                               BC7DFCD41AA4E5FE000035C3 /* 
WMFImageURLParsing.h */,
+                               BC7DFCD51AA4E5FE000035C3 /* 
WMFImageURLParsing.m */,
                        );
                        path = "mw-utils";
                        sourceTree = "<group>";
@@ -2740,6 +2746,7 @@
                                BC42735E1A7C73B300068882 /* 
NSArray+PredicateTests.m in Sources */,
                                BCB669F01A83F71C00C7B1FE /* MWKSavedPageList.m 
in Sources */,
                                BCB669FD1A84158200C7B1FE /* 
CircularBitwiseRotationTests.m in Sources */,
+                               BC7DFCD71AA4E5FE000035C3 /* 
WMFImageURLParsing.m in Sources */,
                                BCB669D31A83F6D300C7B1FE /* MWKTestCase.m in 
Sources */,
                                BCB669E51A83F6D300C7B1FE /* 
MWKImageStorageTests.m in Sources */,
                                BCB669F51A83F71C00C7B1FE /* MWKImageInfo.m in 
Sources */,
@@ -2886,6 +2893,7 @@
                                D407E6411A51DBDA00CCC8B1 /* SchemaConverter.m 
in Sources */,
                                BCB669A71A83F6C400C7B1FE /* MWKSiteDataObject.m 
in Sources */,
                                043BFC7A1A932BA50068B932 /* 
LegalFooterViewController.m in Sources */,
+                               BC7DFCD61AA4E5FE000035C3 /* 
WMFImageURLParsing.m in Sources */,
                                04821CD119895EDC007558F6 /* 
ReferenceGradientView.m in Sources */,
                                0460F8DC19B0F932001BC59B /* CenteredPathView.m 
in Sources */,
                                0472BC18193AD88C00C40BDA /* 
MWKSection+DisplayHtml.m in Sources */,
diff --git a/wikipedia/View Controllers/Image 
Gallery/WMFImageGalleryViewController.m b/wikipedia/View Controllers/Image 
Gallery/WMFImageGalleryViewController.m
index e3b0930..c1ae0b7 100644
--- a/wikipedia/View Controllers/Image Gallery/WMFImageGalleryViewController.m
+++ b/wikipedia/View Controllers/Image Gallery/WMFImageGalleryViewController.m
@@ -42,6 +42,13 @@
 #define ImgGalleryLog(...)
 #endif
 
+NSDictionary* WMFIndexImageInfo(NSArray* imageInfo)
+{
+    return [imageInfo bk_index:^id<NSCopying>(MWKImageInfo* info) {
+        return info.imageAssociationValue ?: [NSNull null];
+    }];
+}
+
 @interface WMFImageGalleryViewController ()
 <UIGestureRecognizerDelegate, UICollectionViewDelegateFlowLayout>
 {
@@ -144,8 +151,7 @@
 - (NSDictionary*)indexedImageInfo
 {
     if (!_indexedImageInfo) {
-        _indexedImageInfo = [[self.dataStore imageInfoForArticle:self.article]
-                             bk_indexWithKeypath:MWKImageAssociationKeyPath];
+        _indexedImageInfo = WMFIndexImageInfo([self.dataStore 
imageInfoForArticle:self.article]);
     }
     return _indexedImageInfo;
 }
@@ -219,7 +225,7 @@
 
 - (void)updateImageInfo:(NSArray*)imageInfo
 {
-    _indexedImageInfo = [imageInfo 
bk_indexWithKeypath:MWKImageAssociationKeyPath];
+    _indexedImageInfo = WMFIndexImageInfo(imageInfo);
     [self.collectionView 
reloadItemsAtIndexPaths:self.collectionView.indexPathsForVisibleItems];
 }
 
diff --git a/wikipedia/mw-utils/WMFImageURLParsing.h 
b/wikipedia/mw-utils/WMFImageURLParsing.h
new file mode 100644
index 0000000..7d2036e
--- /dev/null
+++ b/wikipedia/mw-utils/WMFImageURLParsing.h
@@ -0,0 +1,5 @@
+#import <Foundation/Foundation.h>
+
+FOUNDATION_EXPORT NSString* WMFParseImageNameFromSourceURL(NSURL* sourceURL) 
__attribute__((overloadable));
+
+FOUNDATION_EXPORT NSString* WMFParseImageNameFromSourceURL(NSString* 
sourceURL) __attribute__((overloadable));
\ No newline at end of file
diff --git a/wikipedia/mw-utils/WMFImageURLParsing.m 
b/wikipedia/mw-utils/WMFImageURLParsing.m
new file mode 100644
index 0000000..d56ccf8
--- /dev/null
+++ b/wikipedia/mw-utils/WMFImageURLParsing.m
@@ -0,0 +1,15 @@
+#import "WMFImageURLParsing.h"
+
+NSString* WMFParseImageNameFromSourceURL(NSURL* sourceURL)  
__attribute__((overloadable))
+{
+    return WMFParseImageNameFromSourceURL(sourceURL.absoluteString);
+}
+
+NSString* WMFParseImageNameFromSourceURL(NSString* sourceURL)  
__attribute__((overloadable))
+{
+    if (!sourceURL) { return nil; }
+    NSString *fileName = [sourceURL lastPathComponent];
+    NSRegularExpression *re = [NSRegularExpression 
regularExpressionWithPattern:@"^\\d+px-(.*)$" options:0 error:nil];
+    NSArray *matches = [re matchesInString:fileName options:0 
range:NSMakeRange(0, [fileName length])];
+    return matches.count ? [fileName substringWithRange:[matches[0] 
rangeAtIndex:1]] : fileName;
+}
\ No newline at end of file

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I862704957b81ab39646368851028e48931ae67d2
Gerrit-PatchSet: 1
Gerrit-Project: apps/ios/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Bgerstle <bgers...@wikimedia.org>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to