Advertisement
Guest User

Untitled

a guest
Oct 16th, 2018
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 3.68 KB | None | 0 0
  1.  if resource.performer.isEmpty || resource.performer.lowercased().trimmingCharacters(in: CharacterSet.whitespacesAndNewlines) == "unknown artist" || resource.title.isEmpty {
  2.             subscriber.putNext(.dataPart(resourceOffset: 0, data: Data(), range: 0 ..< 0, complete: true))
  3.             subscriber.putCompletion()
  4.             return EmptyDisposable
  5.         } else {
  6.             let excludeWords: [String] = [
  7.                 " vs. ",
  8.                 " vs ",
  9.                 " versus ",
  10.                 " ft. ",
  11.                 " ft ",
  12.                 " featuring ",
  13.                 " feat. ",
  14.                 " feat ",
  15.                 " presents ",
  16.                 " pres. ",
  17.                 " pres ",
  18.                 " and ",
  19.                 " & ",
  20.                 " . "
  21.             ]
  22.            
  23.             var performer = resource.performer
  24.            
  25.             for word in excludeWords {
  26.                 performer = performer.replacingOccurrences(of: word, with: " ")
  27.             }
  28.            
  29.             let metaUrl = "https://itunes.apple.com/search?term=\(urlEncodedStringFromString("\(performer) \(resource.title)"))&entity=song&limit=4"
  30.            
  31.             let fetchDisposable = MetaDisposable()
  32.            
  33.             let disposable = fetchHttpResource(url: metaUrl).start(next: { result in
  34.                 if case let .dataPart(_, data, _, complete) = result, complete {
  35.                     guard let dict = (try? JSONSerialization.jsonObject(with: data, options: [])) as? [String: Any] else {
  36.                         subscriber.putNext(.dataPart(resourceOffset: 0, data: Data(), range: 0 ..< 0, complete: true))
  37.                         subscriber.putCompletion()
  38.                         return
  39.                     }
  40.                    
  41.                     guard let results = dict["results"] as? [Any] else {
  42.                         subscriber.putNext(.dataPart(resourceOffset: 0, data: Data(), range: 0 ..< 0, complete: true))
  43.                         subscriber.putCompletion()
  44.                         return
  45.                     }
  46.                    
  47.                     guard let result = results.first as? [String: Any] else {
  48.                         subscriber.putNext(.dataPart(resourceOffset: 0, data: Data(), range: 0 ..< 0, complete: true))
  49.                         subscriber.putCompletion()
  50.                         return
  51.                     }
  52.                    
  53.                     guard var artworkUrl = result["artworkUrl100"] as? String else {
  54.                         subscriber.putNext(.dataPart(resourceOffset: 0, data: Data(), range: 0 ..< 0, complete: true))
  55.                         subscriber.putCompletion()
  56.                         return
  57.                     }
  58.                    
  59.                     if !resource.isThumbnail {
  60.                         artworkUrl = artworkUrl.replacingOccurrences(of: "100x100", with: "600x600")
  61.                     }
  62.                    
  63.                     if artworkUrl.isEmpty {
  64.                         subscriber.putNext(.dataPart(resourceOffset: 0, data: Data(), range: 0 ..< 0, complete: true))
  65.                         subscriber.putCompletion()
  66.                         return
  67.                     } else {
  68.                         fetchDisposable.set(fetchHttpResource(url: artworkUrl).start(next: { next in
  69.                             subscriber.putNext(next)
  70.                         }, completed: {
  71.                             subscriber.putCompletion()
  72.                         }))
  73.                     }
  74.                 }
  75.             })
  76.            
  77.             return ActionDisposable {
  78.                 disposable.dispose()
  79.                 fetchDisposable.dispose()
  80.             }
  81.         }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement