diff --git a/ios/App/App.xcodeproj/project.pbxproj b/ios/App/App.xcodeproj/project.pbxproj index e7f37c63..728502dc 100644 --- a/ios/App/App.xcodeproj/project.pbxproj +++ b/ios/App/App.xcodeproj/project.pbxproj @@ -23,6 +23,10 @@ 3AF1970E2806E3CA0096F747 /* AbsAudioPlayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3AF1970D2806E3CA0096F747 /* AbsAudioPlayer.swift */; }; 3AF197102806E3DC0096F747 /* AbsAudioPlayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 3AF1970F2806E3DC0096F747 /* AbsAudioPlayer.m */; }; 3AFCB5E827EA240D00ECCC05 /* NowPlayingInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3AFCB5E727EA240D00ECCC05 /* NowPlayingInfo.swift */; }; + 4D66B952282EE822008272D4 /* AbsDownloader.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D66B951282EE822008272D4 /* AbsDownloader.m */; }; + 4D66B954282EE87C008272D4 /* AbsDownloader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D66B953282EE87C008272D4 /* AbsDownloader.swift */; }; + 4D66B956282EE951008272D4 /* AbsFileSystem.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D66B955282EE951008272D4 /* AbsFileSystem.m */; }; + 4D66B958282EEA14008272D4 /* AbsFileSystem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D66B957282EEA14008272D4 /* AbsFileSystem.swift */; }; 50379B232058CBB4000EE86E /* capacitor.config.json in Resources */ = {isa = PBXBuildFile; fileRef = 50379B222058CBB4000EE86E /* capacitor.config.json */; }; 504EC3081FED79650016851F /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 504EC3071FED79650016851F /* AppDelegate.swift */; }; 504EC30D1FED79650016851F /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 504EC30B1FED79650016851F /* Main.storyboard */; }; @@ -50,6 +54,10 @@ 3AF1970D2806E3CA0096F747 /* AbsAudioPlayer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AbsAudioPlayer.swift; sourceTree = ""; }; 3AF1970F2806E3DC0096F747 /* AbsAudioPlayer.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AbsAudioPlayer.m; sourceTree = ""; }; 3AFCB5E727EA240D00ECCC05 /* NowPlayingInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NowPlayingInfo.swift; sourceTree = ""; }; + 4D66B951282EE822008272D4 /* AbsDownloader.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AbsDownloader.m; sourceTree = ""; }; + 4D66B953282EE87C008272D4 /* AbsDownloader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AbsDownloader.swift; sourceTree = ""; }; + 4D66B955282EE951008272D4 /* AbsFileSystem.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AbsFileSystem.m; sourceTree = ""; }; + 4D66B957282EEA14008272D4 /* AbsFileSystem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AbsFileSystem.swift; sourceTree = ""; }; 4D8D412C26E187E400BA5F0D /* App-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "App-Bridging-Header.h"; sourceTree = ""; }; 50379B222058CBB4000EE86E /* capacitor.config.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = capacitor.config.json; sourceTree = ""; }; 504EC3041FED79650016851F /* App.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = App.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -111,6 +119,10 @@ 3AD4FCE628043E72006DB301 /* AbsDatabase.m */, 3AF1970D2806E3CA0096F747 /* AbsAudioPlayer.swift */, 3AF1970F2806E3DC0096F747 /* AbsAudioPlayer.m */, + 4D66B951282EE822008272D4 /* AbsDownloader.m */, + 4D66B953282EE87C008272D4 /* AbsDownloader.swift */, + 4D66B955282EE951008272D4 /* AbsFileSystem.m */, + 4D66B957282EEA14008272D4 /* AbsFileSystem.swift */, ); path = plugins; sourceTree = ""; @@ -303,16 +315,20 @@ 3ABF580928059BAE005DFBE5 /* PlaybackSession.swift in Sources */, 3ABF618F2804325C0070250E /* PlayerHandler.swift in Sources */, 3AD4FCED28044E6C006DB301 /* Store.swift in Sources */, + 4D66B958282EEA14008272D4 /* AbsFileSystem.swift in Sources */, 3AF1970E2806E3CA0096F747 /* AbsAudioPlayer.swift in Sources */, 3AD4FCE928043FD7006DB301 /* ServerConnectionConfig.swift in Sources */, 3A200C1527D64D7E00CBF02E /* AudioPlayer.swift in Sources */, + 4D66B956282EE951008272D4 /* AbsFileSystem.m in Sources */, 3AFCB5E827EA240D00ECCC05 /* NowPlayingInfo.swift in Sources */, 3AB34053280829BF0039308B /* Extensions.swift in Sources */, 3AD4FCEB280443DD006DB301 /* Database.swift in Sources */, 3AD4FCE528043E50006DB301 /* AbsDatabase.swift in Sources */, + 4D66B952282EE822008272D4 /* AbsDownloader.m in Sources */, 3AF197102806E3DC0096F747 /* AbsAudioPlayer.m in Sources */, 3AF1970C2806E2590096F747 /* ApiClient.swift in Sources */, C4D0677528106D0C00B8F875 /* DataClasses.swift in Sources */, + 4D66B954282EE87C008272D4 /* AbsDownloader.swift in Sources */, 3AB34055280832720039308B /* PlayerEvents.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -484,7 +500,7 @@ CLANG_ENABLE_MODULES = YES; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 7; - DEVELOPMENT_TEAM = ""; + DEVELOPMENT_TEAM = 7UFJ7D8V6A; INFOPLIST_FILE = App/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; diff --git a/ios/App/App/plugins/AbsDownloader.m b/ios/App/App/plugins/AbsDownloader.m new file mode 100644 index 00000000..fa1a55ee --- /dev/null +++ b/ios/App/App/plugins/AbsDownloader.m @@ -0,0 +1,13 @@ +// +// AbsDownloader.m +// App +// +// Created by advplyr on 5/13/22. +// + +#import +#import + +CAP_PLUGIN(AbsDownloader, "AbsDownloader", + CAP_PLUGIN_METHOD(downloadLibraryItem, CAPPluginReturnPromise); + ) diff --git a/ios/App/App/plugins/AbsDownloader.swift b/ios/App/App/plugins/AbsDownloader.swift new file mode 100644 index 00000000..d80ce193 --- /dev/null +++ b/ios/App/App/plugins/AbsDownloader.swift @@ -0,0 +1,23 @@ +// +// AbsDownloader.swift +// App +// +// Created by advplyr on 5/13/22. +// + +import Foundation +import Capacitor + +@objc(AbsDownloader) +public class AbsDownloader: CAPPlugin { + @objc func downloadLibraryItem(_ call: CAPPluginCall) { + let libraryItemId = call.getString("libraryItemId") + let episodeId = call.getString("episodeId") + let localFolderId = call.getString("localFolderId") + + // TODO: Implement download + NSLog("Download library item \(libraryItemId ?? "N/A") episode \(episodeId ?? "") to folder \(localFolderId ?? "N/A")") + + call.resolve() + } +} diff --git a/ios/App/App/plugins/AbsFileSystem.m b/ios/App/App/plugins/AbsFileSystem.m new file mode 100644 index 00000000..b1c01f18 --- /dev/null +++ b/ios/App/App/plugins/AbsFileSystem.m @@ -0,0 +1,20 @@ +// +// AbsFileSystem.m +// App +// +// Created by advplyr on 5/13/22. +// + +#import +#import + +CAP_PLUGIN(AbsFileSystem, "AbsFileSystem", + CAP_PLUGIN_METHOD(selectFolder, CAPPluginReturnPromise); + CAP_PLUGIN_METHOD(checkFolderPermission, CAPPluginReturnPromise); + CAP_PLUGIN_METHOD(scanFolder, CAPPluginReturnPromise); + CAP_PLUGIN_METHOD(removeFolder, CAPPluginReturnPromise); + CAP_PLUGIN_METHOD(removeLocalLibraryItem, CAPPluginReturnPromise); + CAP_PLUGIN_METHOD(scanLocalLibraryItem, CAPPluginReturnPromise); + CAP_PLUGIN_METHOD(deleteItem, CAPPluginReturnPromise); + CAP_PLUGIN_METHOD(deleteTrackFromItem, CAPPluginReturnPromise); + ) diff --git a/ios/App/App/plugins/AbsFileSystem.swift b/ios/App/App/plugins/AbsFileSystem.swift new file mode 100644 index 00000000..c2d59580 --- /dev/null +++ b/ios/App/App/plugins/AbsFileSystem.swift @@ -0,0 +1,91 @@ +// +// AbsFileSystem.swift +// App +// +// Created by advplyr on 5/13/22. +// + +import Foundation +import Capacitor + +@objc(AbsFileSystem) +public class AbsFileSystem: CAPPlugin { + @objc func selectFolder(_ call: CAPPluginCall) { + let mediaType = call.getString("mediaType") + + // TODO: Implement + NSLog("Select Folder for media type \(mediaType ?? "UNSET")") + + call.resolve() + } + + @objc func checkFolderPermission(_ call: CAPPluginCall) { + let folderUrl = call.getString("folderUrl") + + // TODO: Is this even necessary on iOS? + NSLog("checkFolderPermission for folder \(folderUrl ?? "UNSET")") + + call.resolve([ + "value": true + ]) + } + + @objc func scanFolder(_ call: CAPPluginCall) { + let folderId = call.getString("folderId") + let forceAudioProbe = call.getBool("forceAudioProbe", false) + + // TODO: Implement + NSLog("scanFolder \(folderId ?? "UNSET") | Force Probe = \(forceAudioProbe)") + + call.resolve() + } + + @objc func removeFolder(_ call: CAPPluginCall) { + let folderId = call.getString("folderId") + + // TODO: Implement + NSLog("removeFolder \(folderId ?? "UNSET")") + + call.resolve() + } + + @objc func removeLocalLibraryItem(_ call: CAPPluginCall) { + let localLibraryItemId = call.getString("localLibraryItemId") + + // TODO: Implement + NSLog("removeLocalLibraryItem \(localLibraryItemId ?? "UNSET")") + + call.resolve() + } + + @objc func scanLocalLibraryItem(_ call: CAPPluginCall) { + let localLibraryItemId = call.getString("localLibraryItemId") + let forceAudioProbe = call.getBool("forceAudioProbe", false) + + // TODO: Implement + NSLog("scanLocalLibraryItem \(localLibraryItemId ?? "UNSET") | Force Probe = \(forceAudioProbe)") + + call.resolve() + } + + @objc func deleteItem(_ call: CAPPluginCall) { + let localLibraryItemId = call.getString("localLibraryItemId") + let contentUrl = call.getString("contentUrl") + + // TODO: Implement + NSLog("deleteItem \(localLibraryItemId ?? "UNSET") url \(contentUrl ?? "UNSET")") + + call.resolve() + } + + @objc func deleteTrackFromItem(_ call: CAPPluginCall) { + let localLibraryItemId = call.getString("localLibraryItemId") + let trackLocalFileId = call.getString("trackLocalFileId") + let contentUrl = call.getString("contentUrl") + + // TODO: Implement + NSLog("deleteTrackFromItem \(localLibraryItemId ?? "UNSET") track file \(trackLocalFileId ?? "UNSET") url \(contentUrl ?? "UNSET")") + + call.resolve() + } +} diff --git a/ios/App/Podfile b/ios/App/Podfile index 89125e80..dcdae730 100644 --- a/ios/App/Podfile +++ b/ios/App/Podfile @@ -9,12 +9,12 @@ install! 'cocoapods', :disable_input_output_paths => true def capacitor_pods pod 'Capacitor', :path => '../../node_modules/@capacitor/ios' pod 'CapacitorCordova', :path => '../../node_modules/@capacitor/ios' - pod 'CapacitorApp', :path => '..\..\node_modules\@capacitor\app' - pod 'CapacitorDialog', :path => '..\..\node_modules\@capacitor\dialog' - pod 'CapacitorHaptics', :path => '..\..\node_modules\@capacitor\haptics' - pod 'CapacitorNetwork', :path => '..\..\node_modules\@capacitor\network' - pod 'CapacitorStatusBar', :path => '..\..\node_modules\@capacitor\status-bar' - pod 'CapacitorStorage', :path => '..\..\node_modules\@capacitor\storage' + pod 'CapacitorApp', :path => '../../node_modules/@capacitor/app' + pod 'CapacitorDialog', :path => '../../node_modules/@capacitor/dialog' + pod 'CapacitorHaptics', :path => '../../node_modules/@capacitor/haptics' + pod 'CapacitorNetwork', :path => '../../node_modules/@capacitor/network' + pod 'CapacitorStatusBar', :path => '../../node_modules/@capacitor/status-bar' + pod 'CapacitorStorage', :path => '../../node_modules/@capacitor/storage' end target 'App' do