VLCMDFBrowsingArtworkProvider.m 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. /*****************************************************************************
  2. * VLC for iOS
  3. *****************************************************************************
  4. * Copyright (c) 2015 VideoLAN. All rights reserved.
  5. * $Id$
  6. *
  7. * Authors: Felix Paul Kühne <fkuehne # videolan.org>
  8. *
  9. * Refer to the COPYING file of the official project for license.
  10. *****************************************************************************/
  11. #import "VLCMDFBrowsingArtworkProvider.h"
  12. #import "MetaDataFetcherKit.h"
  13. @interface VLCMDFBrowsingArtworkProvider () <MDFMovieDBFetcherDataRecipient, MDFHatchetFetcherDataRecipient>
  14. {
  15. MDFMovieDBFetcher *_tmdbFetcher;
  16. MDFHatchetFetcher *_hatchetFetcher;
  17. }
  18. @end
  19. @implementation VLCMDFBrowsingArtworkProvider
  20. - (void)reset
  21. {
  22. if (_tmdbFetcher) {
  23. [_tmdbFetcher cancelAllRequests];
  24. if (_hatchetFetcher)
  25. [_hatchetFetcher cancelAllRequests];
  26. } else {
  27. _tmdbFetcher = [[MDFMovieDBFetcher alloc] init];
  28. _tmdbFetcher.dataRecipient = self;
  29. _tmdbFetcher.shouldDecrapifyInputStrings = YES;
  30. if (_searchForAudioMetadata) {
  31. _hatchetFetcher = [[MDFHatchetFetcher alloc] init];
  32. _hatchetFetcher.dataRecipient = self;
  33. }
  34. }
  35. }
  36. - (void)setSearchForAudioMetadata:(BOOL)searchForAudioMetadata
  37. {
  38. if (searchForAudioMetadata) {
  39. _hatchetFetcher = [[MDFHatchetFetcher alloc] init];
  40. _hatchetFetcher.dataRecipient = self;
  41. }
  42. _searchForAudioMetadata = searchForAudioMetadata;
  43. }
  44. - (void)searchForArtworkForVideoRelatedString:(NSString *)string
  45. {
  46. [_tmdbFetcher searchForMovie:string];
  47. }
  48. #pragma mark - MDFMovieDB
  49. - (void)MDFMovieDBFetcher:(MDFMovieDBFetcher *)aFetcher didFindMovie:(MDFMovie *)details forSearchRequest:(NSString *)searchRequest
  50. {
  51. if (details == nil) {
  52. return;
  53. }
  54. [aFetcher cancelAllRequests];
  55. MDFMovieDBSessionManager *sessionManager = [MDFMovieDBSessionManager sharedInstance];
  56. if (!sessionManager.hasFetchedProperties) {
  57. return;
  58. }
  59. if (details.movieDBID == 0) {
  60. /* we found nothing, let's see if it's a TV show */
  61. [_tmdbFetcher searchForTVShow:searchRequest];
  62. return;
  63. }
  64. NSString *imagePath = details.posterPath;
  65. NSArray *sizes = sessionManager.posterSizes;
  66. NSString *imageSize;
  67. if (sizes != nil) {
  68. NSUInteger count = sizes.count;
  69. if (count > 1) {
  70. imageSize = sizes[1];
  71. } else if (count > 0) {
  72. imageSize = sizes.firstObject;
  73. }
  74. }
  75. if (!imagePath) {
  76. imagePath = details.backdropPath;
  77. sizes = sessionManager.backdropSizes;
  78. if (sizes != nil && sizes.count > 0) {
  79. imageSize = sizes.firstObject;
  80. }
  81. }
  82. if (!imagePath) {
  83. return;
  84. }
  85. NSString *thumbnailURLString = [NSString stringWithFormat:@"%@%@%@",
  86. sessionManager.imageBaseURL,
  87. imageSize,
  88. imagePath];
  89. self.artworkReceiver.thumbnailURL = [NSURL URLWithString:thumbnailURLString];
  90. }
  91. - (void)MDFMovieDBFetcher:(MDFMovieDBFetcher *)aFetcher didFailToFindMovieForSearchRequest:(NSString *)searchRequest
  92. {
  93. APLog(@"Failed to find a movie for '%@'", searchRequest);
  94. if (_searchForAudioMetadata) {
  95. [_hatchetFetcher searchForArtist:searchRequest];
  96. }
  97. }
  98. - (void)MDFMovieDBFetcher:(MDFMovieDBFetcher *)aFetcher didFindTVShow:(MDFTVShow *)details forSearchRequest:(NSString *)searchRequest
  99. {
  100. if (details == nil) {
  101. if (_searchForAudioMetadata) {
  102. [_hatchetFetcher searchForArtist:searchRequest];
  103. }
  104. return;
  105. }
  106. [aFetcher cancelAllRequests];
  107. MDFMovieDBSessionManager *sessionManager = [MDFMovieDBSessionManager sharedInstance];
  108. if (!sessionManager.hasFetchedProperties)
  109. return;
  110. NSString *imagePath = details.posterPath;
  111. NSArray *sizes = sessionManager.posterSizes;
  112. NSString *imageSize;
  113. if (sizes != nil) {
  114. NSUInteger count = sizes.count;
  115. if (count > 1) {
  116. imageSize = sizes[1];
  117. } else if (count > 0) {
  118. imageSize = sizes.firstObject;
  119. }
  120. }
  121. if (!imagePath) {
  122. imagePath = details.backdropPath;
  123. sizes = sessionManager.backdropSizes;
  124. if (sizes != nil && sizes.count > 0) {
  125. imageSize = sizes.firstObject;
  126. }
  127. }
  128. if (!imagePath) {
  129. if (_searchForAudioMetadata) {
  130. [_hatchetFetcher searchForArtist:searchRequest];
  131. }
  132. return;
  133. }
  134. NSString *thumbnailURLString = [NSString stringWithFormat:@"%@%@%@",
  135. sessionManager.imageBaseURL,
  136. imageSize,
  137. imagePath];
  138. self.artworkReceiver.thumbnailURL = [NSURL URLWithString:thumbnailURLString];
  139. }
  140. - (void)MDFMovieDBFetcher:(MDFMovieDBFetcher *)aFetcher didFailToFindTVShowForSearchRequest:(NSString *)searchRequest
  141. {
  142. APLog(@"failed to find TV show");
  143. if (_searchForAudioMetadata) {
  144. [_hatchetFetcher searchForArtist:searchRequest];
  145. }
  146. }
  147. - (void)MDFHatchetFetcher:(MDFHatchetFetcher *)aFetcher didFindArtist:(MDFArtist *)artist forSearchRequest:(NSString *)searchRequest
  148. {
  149. /* we have no match */
  150. if (!artist) {
  151. [self _simplifyMetaDataSearchString:searchRequest];
  152. return;
  153. }
  154. NSArray *imageURLStrings = artist.largeSizedImages;
  155. NSString *imageURLString;
  156. if (imageURLStrings.count > 0) {
  157. imageURLString = imageURLStrings.firstObject;
  158. } else {
  159. imageURLStrings = artist.mediumSizedImages;
  160. if (imageURLStrings.count > 0) {
  161. imageURLString = imageURLStrings.firstObject;
  162. }
  163. }
  164. if (imageURLString) {
  165. self.artworkReceiver.thumbnailURL = [NSURL URLWithString:[NSString stringWithFormat:@"%@?height=300&width=250",imageURLString]];
  166. } else {
  167. [self _simplifyMetaDataSearchString:searchRequest];
  168. }
  169. }
  170. - (void)MDFHatchetFetcher:(MDFHatchetFetcher *)aFetcher didFailToFindArtistForSearchRequest:(NSString *)searchRequest
  171. {
  172. [self _simplifyMetaDataSearchString:searchRequest];
  173. }
  174. - (void)_simplifyMetaDataSearchString:(NSString *)searchString
  175. {
  176. NSRange lastRange = [searchString rangeOfString:@" " options:NSBackwardsSearch];
  177. if (lastRange.location != NSNotFound)
  178. [_hatchetFetcher searchForArtist:[searchString substringToIndex:lastRange.location]];
  179. }
  180. @end