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