From 966935b677bceb7a3c7098fb89509e8675963b2d Mon Sep 17 00:00:00 2001 From: zarzet Date: Wed, 21 Jan 2026 12:22:46 +0700 Subject: [PATCH] feat: add missing platform bridge functions for batch duplicate check and cross-platform IDs --- .../kotlin/com/zarz/spotiflac/MainActivity.kt | 67 +++++++++++++++++++ ios/Runner/AppDelegate.swift | 66 ++++++++++++++++++ 2 files changed, 133 insertions(+) diff --git a/android/app/src/main/kotlin/com/zarz/spotiflac/MainActivity.kt b/android/app/src/main/kotlin/com/zarz/spotiflac/MainActivity.kt index 85a32ffe..f6c2e457 100644 --- a/android/app/src/main/kotlin/com/zarz/spotiflac/MainActivity.kt +++ b/android/app/src/main/kotlin/com/zarz/spotiflac/MainActivity.kt @@ -139,6 +139,28 @@ class MainActivity: FlutterActivity() { } result.success(response) } + "checkDuplicatesBatch" -> { + val outputDir = call.argument("output_dir") ?: "" + val tracksJson = call.argument("tracks") ?: "[]" + val response = withContext(Dispatchers.IO) { + Gobackend.checkDuplicatesBatch(outputDir, tracksJson) + } + result.success(response) + } + "preBuildDuplicateIndex" -> { + val outputDir = call.argument("output_dir") ?: "" + withContext(Dispatchers.IO) { + Gobackend.preBuildDuplicateIndex(outputDir) + } + result.success(null) + } + "invalidateDuplicateIndex" -> { + val outputDir = call.argument("output_dir") ?: "" + withContext(Dispatchers.IO) { + Gobackend.invalidateDuplicateIndex(outputDir) + } + result.success(null) + } "buildFilename" -> { val template = call.argument("template") ?: "" val metadata = call.argument("metadata") ?: "{}" @@ -306,6 +328,43 @@ class MainActivity: FlutterActivity() { } result.success(response) } + "checkAvailabilityFromDeezerID" -> { + val deezerTrackId = call.argument("deezer_track_id") ?: "" + val response = withContext(Dispatchers.IO) { + Gobackend.checkAvailabilityFromDeezerID(deezerTrackId) + } + result.success(response) + } + "checkAvailabilityByPlatformID" -> { + val platform = call.argument("platform") ?: "" + val entityType = call.argument("entity_type") ?: "" + val entityId = call.argument("entity_id") ?: "" + val response = withContext(Dispatchers.IO) { + Gobackend.checkAvailabilityByPlatformID(platform, entityType, entityId) + } + result.success(response) + } + "getSpotifyIDFromDeezerTrack" -> { + val deezerTrackId = call.argument("deezer_track_id") ?: "" + val response = withContext(Dispatchers.IO) { + Gobackend.getSpotifyIDFromDeezerTrack(deezerTrackId) + } + result.success(response) + } + "getTidalURLFromDeezerTrack" -> { + val deezerTrackId = call.argument("deezer_track_id") ?: "" + val response = withContext(Dispatchers.IO) { + Gobackend.getTidalURLFromDeezerTrack(deezerTrackId) + } + result.success(response) + } + "getAmazonURLFromDeezerTrack" -> { + val deezerTrackId = call.argument("deezer_track_id") ?: "" + val response = withContext(Dispatchers.IO) { + Gobackend.getAmazonURLFromDeezerTrack(deezerTrackId) + } + result.success(response) + } // Log methods "getLogs" -> { val response = withContext(Dispatchers.IO) { @@ -468,6 +527,14 @@ class MainActivity: FlutterActivity() { } result.success(response) } + "enrichTrackWithExtension" -> { + val extensionId = call.argument("extension_id") ?: "" + val trackJson = call.argument("track") ?: "{}" + val response = withContext(Dispatchers.IO) { + Gobackend.enrichTrackWithExtensionJSON(extensionId, trackJson) + } + result.success(response) + } "removeExtension" -> { val extensionId = call.argument("extension_id") ?: "" withContext(Dispatchers.IO) { diff --git a/ios/Runner/AppDelegate.swift b/ios/Runner/AppDelegate.swift index 31538db2..94809a20 100644 --- a/ios/Runner/AppDelegate.swift +++ b/ios/Runner/AppDelegate.swift @@ -142,6 +142,27 @@ import Gobackend // Import Go framework if let error = error { throw error } return response + case "checkDuplicatesBatch": + let args = call.arguments as! [String: Any] + let outputDir = args["output_dir"] as! String + let tracksJson = args["tracks"] as? String ?? "[]" + let response = GobackendCheckDuplicatesBatch(outputDir, tracksJson, &error) + if let error = error { throw error } + return response + + case "preBuildDuplicateIndex": + let args = call.arguments as! [String: Any] + let outputDir = args["output_dir"] as! String + GobackendPreBuildDuplicateIndex(outputDir, &error) + if let error = error { throw error } + return nil + + case "invalidateDuplicateIndex": + let args = call.arguments as! [String: Any] + let outputDir = args["output_dir"] as! String + GobackendInvalidateDuplicateIndex(outputDir) + return nil + case "buildFilename": let args = call.arguments as! [String: Any] let template = args["template"] as! String @@ -249,6 +270,43 @@ import Gobackend // Import Go framework if let error = error { throw error } return response + case "checkAvailabilityFromDeezerID": + let args = call.arguments as! [String: Any] + let deezerTrackId = args["deezer_track_id"] as! String + let response = GobackendCheckAvailabilityFromDeezerID(deezerTrackId, &error) + if let error = error { throw error } + return response + + case "checkAvailabilityByPlatformID": + let args = call.arguments as! [String: Any] + let platform = args["platform"] as! String + let entityType = args["entity_type"] as! String + let entityId = args["entity_id"] as! String + let response = GobackendCheckAvailabilityByPlatformID(platform, entityType, entityId, &error) + if let error = error { throw error } + return response + + case "getSpotifyIDFromDeezerTrack": + let args = call.arguments as! [String: Any] + let deezerTrackId = args["deezer_track_id"] as! String + let response = GobackendGetSpotifyIDFromDeezerTrack(deezerTrackId, &error) + if let error = error { throw error } + return response + + case "getTidalURLFromDeezerTrack": + let args = call.arguments as! [String: Any] + let deezerTrackId = args["deezer_track_id"] as! String + let response = GobackendGetTidalURLFromDeezerTrack(deezerTrackId, &error) + if let error = error { throw error } + return response + + case "getAmazonURLFromDeezerTrack": + let args = call.arguments as! [String: Any] + let deezerTrackId = args["deezer_track_id"] as! String + let response = GobackendGetAmazonURLFromDeezerTrack(deezerTrackId, &error) + if let error = error { throw error } + return response + case "preWarmTrackCache": let args = call.arguments as! [String: Any] let tracksJson = args["tracks"] as! String @@ -404,6 +462,14 @@ import Gobackend // Import Go framework if let error = error { throw error } return response + case "enrichTrackWithExtension": + let args = call.arguments as! [String: Any] + let extensionId = args["extension_id"] as! String + let trackJson = args["track"] as? String ?? "{}" + let response = GobackendEnrichTrackWithExtensionJSON(extensionId, trackJson, &error) + if let error = error { throw error } + return response + case "removeExtension": let args = call.arguments as! [String: Any] let extensionId = args["extension_id"] as! String