From 5216c7d359c5c8975d4883ce7cd80848e0e1a4d2 Mon Sep 17 00:00:00 2001 From: Elias Projahn Date: Sun, 19 Apr 2020 18:37:16 +0200 Subject: [PATCH] Store URI within tracks --- .../kotlin/de/johrpan/musicus/MainActivity.kt | 5 +++++ lib/music_library.dart | 12 +++++++++++- lib/platform.dart | 16 ++++++++++++++++ 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/android/app/src/main/kotlin/de/johrpan/musicus/MainActivity.kt b/android/app/src/main/kotlin/de/johrpan/musicus/MainActivity.kt index 153be69..9427258 100644 --- a/android/app/src/main/kotlin/de/johrpan/musicus/MainActivity.kt +++ b/android/app/src/main/kotlin/de/johrpan/musicus/MainActivity.kt @@ -44,6 +44,11 @@ class MainActivity : FlutterActivity() { val treeUri = Uri.parse(call.argument("treeUri")) val id = call.argument("id")!! result.success(readFile(treeUri, id)) + } else if (call.method == "getUriByName") { + val treeUri = Uri.parse(call.argument("treeUri")) + val parentId = call.argument("parentId")!! + val fileName = call.argument("fileName")!! + result.success(getUriByName(treeUri, parentId, fileName).toString()) } else if (call.method == "readFileByName") { val treeUri = Uri.parse(call.argument("treeUri")) val parentId = call.argument("parentId")!! diff --git a/lib/music_library.dart b/lib/music_library.dart index c03be8d..9365744 100644 --- a/lib/music_library.dart +++ b/lib/music_library.dart @@ -24,6 +24,8 @@ class Track { /// Which work parts of the recorded work are contained in this track. final List partIds; + String uri; + Track({ this.fileName, this.index, @@ -110,6 +112,10 @@ class MusicLibrary { final content = await Platform.readFile(treeUri, child.id); final musicusFile = MusicusFile.fromJson(jsonDecode(content)); for (final track in musicusFile.tracks) { + final uri = + await Platform.getUriByName(treeUri, parentId, track.fileName); + track.uri = uri; + if (tracks.containsKey(track.recordingId)) { tracks[track.recordingId].add(track); } else { @@ -124,7 +130,7 @@ class MusicLibrary { } /// Add a list of new tracks to the music library. - /// + /// /// They are stored in this instance and on disk in the directory denoted by /// [parentId]. Future addTracks(String parentId, List newTracks) async { @@ -140,6 +146,10 @@ class MusicLibrary { } for (final track in newTracks) { + final uri = + await Platform.getUriByName(treeUri, parentId, track.fileName); + track.uri = uri; + musicusFile.tracks.add(track); if (tracks.containsKey(track.recordingId)) { diff --git a/lib/platform.dart b/lib/platform.dart index 3284621..13dfba0 100644 --- a/lib/platform.dart +++ b/lib/platform.dart @@ -62,6 +62,22 @@ class Platform { ); } + /// Get document URI by file name + /// + /// [treeId] is the base URI from the SAF, [parentId] is the document ID of + /// the parent directory. + static Future getUriByName( + String treeUri, String parentId, String fileName) async { + return await _platform.invokeMethod( + 'getUriByName', + { + 'treeUri': treeUri, + 'parentId': parentId, + 'fileName': fileName, + }, + ); + } + /// Read contents of file by name /// /// [treeId] is the base URI from the SAF, [parentId] is the document ID of