PlaylistModel.swift 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. /*****************************************************************************
  2. * PlaylistModel.swift
  3. *
  4. * Copyright © 2018 VLC authors and VideoLAN
  5. * Copyright © 2018 Videolabs
  6. *
  7. * Authors: Soomin Lee <bubu@mikan.io>
  8. *
  9. * Refer to the COPYING file of the official project for license.
  10. *****************************************************************************/
  11. class PlaylistModel: MLBaseModel {
  12. typealias MLType = VLCMLPlaylist
  13. var updateView: (() -> Void)?
  14. var files = [VLCMLPlaylist]()
  15. var cellType: BaseCollectionViewCell.Type { return MovieCollectionViewCell.self }
  16. var medialibrary: VLCMediaLibraryManager
  17. var indicatorName: String = NSLocalizedString("PLAYLISTS", comment: "")
  18. required init(medialibrary: VLCMediaLibraryManager) {
  19. self.medialibrary = medialibrary
  20. medialibrary.addObserver(self)
  21. files = medialibrary.getPlaylists()
  22. }
  23. func append(_ item: VLCMLPlaylist) {
  24. for file in files {
  25. if file.identifier() == item.identifier() {
  26. return
  27. }
  28. }
  29. files.append(item)
  30. }
  31. func delete(_ items: [VLCMLObject]) {
  32. for playlist in items where playlist is VLCMLPlaylist {
  33. if !(medialibrary.deletePlaylist(with: playlist.identifier())) {
  34. assertionFailure("PlaylistModel: Failed to delete playlist: \(playlist.identifier())")
  35. }
  36. }
  37. }
  38. // Creates a VLCMLPlaylist appending it and updates linked view
  39. func create(name: String) {
  40. append(medialibrary.createPlaylist(with: name))
  41. updateView?()
  42. }
  43. }
  44. extension PlaylistModel: MediaLibraryObserver {
  45. func medialibrary(_ medialibrary: VLCMediaLibraryManager, didAddPlaylists playlists: [VLCMLPlaylist]) {
  46. playlists.forEach({ append($0) })
  47. updateView?()
  48. }
  49. func medialibrary(_ medialibrary: VLCMediaLibraryManager, didDeletePlaylistsWithIds playlistsIds: [NSNumber]) {
  50. files = files.filter() {
  51. for id in playlistsIds where $0.identifier() == id.int64Value {
  52. return false
  53. }
  54. return true
  55. }
  56. updateView?()
  57. }
  58. }
  59. extension VLCMLPlaylist {
  60. func description() -> String {
  61. let tracksString = media.count == 1 ? NSLocalizedString("TRACK", comment: "") : NSLocalizedString("TRACKS", comment: "")
  62. return String(format: tracksString, media.count)
  63. }
  64. }