diff --git a/android/app/src/main/kotlin/deckers/thibault/aves/MainActivity.kt b/android/app/src/main/kotlin/deckers/thibault/aves/MainActivity.kt index 1377c88a3..95f14d79f 100644 --- a/android/app/src/main/kotlin/deckers/thibault/aves/MainActivity.kt +++ b/android/app/src/main/kotlin/deckers/thibault/aves/MainActivity.kt @@ -61,7 +61,8 @@ class MainActivity : FlutterActivity() { MethodChannel(messenger, GeocodingHandler.CHANNEL).setMethodCallHandler(GeocodingHandler(this)) MethodChannel(messenger, GlobalSearchHandler.CHANNEL).setMethodCallHandler(GlobalSearchHandler(this)) MethodChannel(messenger, MediaStoreHandler.CHANNEL).setMethodCallHandler(MediaStoreHandler(this)) - MethodChannel(messenger, MetadataHandler.CHANNEL).setMethodCallHandler(MetadataHandler(this)) + MethodChannel(messenger, MetadataEditHandler.CHANNEL).setMethodCallHandler(MetadataEditHandler(this)) + MethodChannel(messenger, MetadataFetchHandler.CHANNEL).setMethodCallHandler(MetadataFetchHandler(this)) MethodChannel(messenger, StorageHandler.CHANNEL).setMethodCallHandler(StorageHandler(this)) MethodChannel(messenger, TimeHandler.CHANNEL).setMethodCallHandler(TimeHandler()) MethodChannel(messenger, WindowHandler.CHANNEL).setMethodCallHandler(WindowHandler(this)) diff --git a/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/ImageFileHandler.kt b/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/ImageFileHandler.kt index 8a00d5cf1..0858fcd9d 100644 --- a/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/ImageFileHandler.kt +++ b/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/ImageFileHandler.kt @@ -10,7 +10,6 @@ import deckers.thibault.aves.channel.calls.fetchers.RegionFetcher import deckers.thibault.aves.channel.calls.fetchers.SvgRegionFetcher import deckers.thibault.aves.channel.calls.fetchers.ThumbnailFetcher import deckers.thibault.aves.channel.calls.fetchers.TiffRegionFetcher -import deckers.thibault.aves.model.ExifOrientationOp import deckers.thibault.aves.model.FieldMap import deckers.thibault.aves.model.provider.ImageProvider.ImageOpCallback import deckers.thibault.aves.model.provider.ImageProviderFactory.getProvider @@ -36,9 +35,6 @@ class ImageFileHandler(private val activity: Activity) : MethodCallHandler { "getRegion" -> GlobalScope.launch(Dispatchers.IO) { safeSuspend(call, result, ::getRegion) } "captureFrame" -> GlobalScope.launch(Dispatchers.IO) { safeSuspend(call, result, ::captureFrame) } "rename" -> GlobalScope.launch(Dispatchers.IO) { safeSuspend(call, result, ::rename) } - "rotate" -> GlobalScope.launch(Dispatchers.IO) { safe(call, result, ::rotate) } - "flip" -> GlobalScope.launch(Dispatchers.IO) { safe(call, result, ::flip) } - "editDate" -> GlobalScope.launch(Dispatchers.IO) { safe(call, result, ::editDate) } "clearSizedThumbnailDiskCache" -> GlobalScope.launch(Dispatchers.IO) { safe(call, result, ::clearSizedThumbnailDiskCache) } else -> result.notImplemented() } @@ -194,78 +190,6 @@ class ImageFileHandler(private val activity: Activity) : MethodCallHandler { }) } - private fun rotate(call: MethodCall, result: MethodChannel.Result) { - val clockwise = call.argument("clockwise") - if (clockwise == null) { - result.error("rotate-args", "failed because of missing arguments", null) - return - } - - val op = if (clockwise) ExifOrientationOp.ROTATE_CW else ExifOrientationOp.ROTATE_CCW - editOrientation(call, result, op) - } - - private fun flip(call: MethodCall, result: MethodChannel.Result) { - editOrientation(call, result, ExifOrientationOp.FLIP) - } - - private fun editOrientation(call: MethodCall, result: MethodChannel.Result, op: ExifOrientationOp) { - val entryMap = call.argument("entry") - if (entryMap == null) { - result.error("editOrientation-args", "failed because of missing arguments", null) - return - } - - val uri = (entryMap["uri"] as String?)?.let { Uri.parse(it) } - val path = entryMap["path"] as String? - val mimeType = entryMap["mimeType"] as String? - if (uri == null || path == null || mimeType == null) { - result.error("editOrientation-args", "failed because entry fields are missing", null) - return - } - - val provider = getProvider(uri) - if (provider == null) { - result.error("editOrientation-provider", "failed to find provider for uri=$uri", null) - return - } - - provider.editOrientation(activity, path, uri, mimeType, op, object : ImageOpCallback { - override fun onSuccess(fields: FieldMap) = result.success(fields) - override fun onFailure(throwable: Throwable) = result.error("editOrientation-failure", "failed to change orientation", throwable.message) - }) - } - - private fun editDate(call: MethodCall, result: MethodChannel.Result) { - val dateMillis = call.argument("dateMillis")?.toLong() - val shiftMinutes = call.argument("shiftMinutes")?.toLong() - val fields = call.argument>("fields") - val entryMap = call.argument("entry") - if (entryMap == null || fields == null) { - result.error("editDate-args", "failed because of missing arguments", null) - return - } - - val uri = (entryMap["uri"] as String?)?.let { Uri.parse(it) } - val path = entryMap["path"] as String? - val mimeType = entryMap["mimeType"] as String? - if (uri == null || path == null || mimeType == null) { - result.error("editDate-args", "failed because entry fields are missing", null) - return - } - - val provider = getProvider(uri) - if (provider == null) { - result.error("editDate-provider", "failed to find provider for uri=$uri", null) - return - } - - provider.editDate(activity, path, uri, mimeType, dateMillis, shiftMinutes, fields, object : ImageOpCallback { - override fun onSuccess(fields: FieldMap) = result.success(fields) - override fun onFailure(throwable: Throwable) = result.error("editDate-failure", "failed to edit date", throwable.message) - }) - } - private fun clearSizedThumbnailDiskCache(@Suppress("UNUSED_PARAMETER") call: MethodCall, result: MethodChannel.Result) { Glide.get(activity).clearDiskCache() result.success(null) diff --git a/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/MetadataEditHandler.kt b/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/MetadataEditHandler.kt new file mode 100644 index 000000000..fa67c8fb4 --- /dev/null +++ b/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/MetadataEditHandler.kt @@ -0,0 +1,102 @@ +package deckers.thibault.aves.channel.calls + +import android.app.Activity +import android.net.Uri +import deckers.thibault.aves.channel.calls.Coresult.Companion.safe +import deckers.thibault.aves.model.ExifOrientationOp +import deckers.thibault.aves.model.FieldMap +import deckers.thibault.aves.model.provider.ImageProvider.ImageOpCallback +import deckers.thibault.aves.model.provider.ImageProviderFactory.getProvider +import io.flutter.plugin.common.MethodCall +import io.flutter.plugin.common.MethodChannel +import io.flutter.plugin.common.MethodChannel.MethodCallHandler +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.launch + +class MetadataEditHandler(private val activity: Activity) : MethodCallHandler { + override fun onMethodCall(call: MethodCall, result: MethodChannel.Result) { + when (call.method) { + "rotate" -> GlobalScope.launch(Dispatchers.IO) { safe(call, result, ::rotate) } + "flip" -> GlobalScope.launch(Dispatchers.IO) { safe(call, result, ::flip) } + "editDate" -> GlobalScope.launch(Dispatchers.IO) { safe(call, result, ::editDate) } + else -> result.notImplemented() + } + } + + private fun rotate(call: MethodCall, result: MethodChannel.Result) { + val clockwise = call.argument("clockwise") + if (clockwise == null) { + result.error("rotate-args", "failed because of missing arguments", null) + return + } + + val op = if (clockwise) ExifOrientationOp.ROTATE_CW else ExifOrientationOp.ROTATE_CCW + editOrientation(call, result, op) + } + + private fun flip(call: MethodCall, result: MethodChannel.Result) { + editOrientation(call, result, ExifOrientationOp.FLIP) + } + + private fun editOrientation(call: MethodCall, result: MethodChannel.Result, op: ExifOrientationOp) { + val entryMap = call.argument("entry") + if (entryMap == null) { + result.error("editOrientation-args", "failed because of missing arguments", null) + return + } + + val uri = (entryMap["uri"] as String?)?.let { Uri.parse(it) } + val path = entryMap["path"] as String? + val mimeType = entryMap["mimeType"] as String? + if (uri == null || path == null || mimeType == null) { + result.error("editOrientation-args", "failed because entry fields are missing", null) + return + } + + val provider = getProvider(uri) + if (provider == null) { + result.error("editOrientation-provider", "failed to find provider for uri=$uri", null) + return + } + + provider.editOrientation(activity, path, uri, mimeType, op, object : ImageOpCallback { + override fun onSuccess(fields: FieldMap) = result.success(fields) + override fun onFailure(throwable: Throwable) = result.error("editOrientation-failure", "failed to change orientation", throwable.message) + }) + } + + private fun editDate(call: MethodCall, result: MethodChannel.Result) { + val dateMillis = call.argument("dateMillis")?.toLong() + val shiftMinutes = call.argument("shiftMinutes")?.toLong() + val fields = call.argument>("fields") + val entryMap = call.argument("entry") + if (entryMap == null || fields == null) { + result.error("editDate-args", "failed because of missing arguments", null) + return + } + + val uri = (entryMap["uri"] as String?)?.let { Uri.parse(it) } + val path = entryMap["path"] as String? + val mimeType = entryMap["mimeType"] as String? + if (uri == null || path == null || mimeType == null) { + result.error("editDate-args", "failed because entry fields are missing", null) + return + } + + val provider = getProvider(uri) + if (provider == null) { + result.error("editDate-provider", "failed to find provider for uri=$uri", null) + return + } + + provider.editDate(activity, path, uri, mimeType, dateMillis, shiftMinutes, fields, object : ImageOpCallback { + override fun onSuccess(fields: FieldMap) = result.success(fields) + override fun onFailure(throwable: Throwable) = result.error("editDate-failure", "failed to edit date", throwable.message) + }) + } + + companion object { + const val CHANNEL = "deckers.thibault/aves/metadata_edit" + } +} \ No newline at end of file diff --git a/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/MetadataHandler.kt b/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/MetadataFetchHandler.kt similarity index 99% rename from android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/MetadataHandler.kt rename to android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/MetadataFetchHandler.kt index 7eab6c492..21d4b4387 100644 --- a/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/MetadataHandler.kt +++ b/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/MetadataFetchHandler.kt @@ -70,7 +70,7 @@ import java.text.ParseException import java.util.* import kotlin.math.roundToLong -class MetadataHandler(private val context: Context) : MethodCallHandler { +class MetadataFetchHandler(private val context: Context) : MethodCallHandler { override fun onMethodCall(call: MethodCall, result: MethodChannel.Result) { when (call.method) { "getAllMetadata" -> GlobalScope.launch(Dispatchers.IO) { safe(call, result, ::getAllMetadata) } @@ -755,8 +755,8 @@ class MetadataHandler(private val context: Context) : MethodCallHandler { } companion object { - private val LOG_TAG = LogUtils.createTag() - const val CHANNEL = "deckers.thibault/aves/metadata" + private val LOG_TAG = LogUtils.createTag() + const val CHANNEL = "deckers.thibault/aves/metadata_fetch" private val allMetadataRedundantDirNames = setOf( "MP4", diff --git a/lib/image_providers/region_provider.dart b/lib/image_providers/region_provider.dart index 75908bb30..f36ee71ef 100644 --- a/lib/image_providers/region_provider.dart +++ b/lib/image_providers/region_provider.dart @@ -2,7 +2,7 @@ import 'dart:async'; import 'dart:math'; import 'dart:ui' as ui show Codec; -import 'package:aves/services/services.dart'; +import 'package:aves/services/common/services.dart'; import 'package:equatable/equatable.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/widgets.dart'; diff --git a/lib/image_providers/thumbnail_provider.dart b/lib/image_providers/thumbnail_provider.dart index 5e64e045f..2dd61c259 100644 --- a/lib/image_providers/thumbnail_provider.dart +++ b/lib/image_providers/thumbnail_provider.dart @@ -1,6 +1,6 @@ import 'dart:ui' as ui show Codec; -import 'package:aves/services/services.dart'; +import 'package:aves/services/common/services.dart'; import 'package:equatable/equatable.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/widgets.dart'; diff --git a/lib/image_providers/uri_image_provider.dart b/lib/image_providers/uri_image_provider.dart index 9478b86e6..5271e74d3 100644 --- a/lib/image_providers/uri_image_provider.dart +++ b/lib/image_providers/uri_image_provider.dart @@ -1,7 +1,7 @@ import 'dart:async'; import 'dart:ui' as ui show Codec; -import 'package:aves/services/services.dart'; +import 'package:aves/services/common/services.dart'; import 'package:equatable/equatable.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/widgets.dart'; diff --git a/lib/main.dart b/lib/main.dart index e1abba8bd..1bbc8c2f3 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,6 +1,6 @@ import 'dart:isolate'; -import 'package:aves/services/services.dart'; +import 'package:aves/services/common/services.dart'; import 'package:aves/widgets/aves_app.dart'; import 'package:flutter/material.dart'; diff --git a/lib/model/covers.dart b/lib/model/covers.dart index f6b84fee8..2b3256705 100644 --- a/lib/model/covers.dart +++ b/lib/model/covers.dart @@ -1,7 +1,7 @@ import 'package:aves/model/entry.dart'; import 'package:aves/model/filters/album.dart'; import 'package:aves/model/filters/filters.dart'; -import 'package:aves/services/services.dart'; +import 'package:aves/services/common/services.dart'; import 'package:collection/collection.dart'; import 'package:equatable/equatable.dart'; import 'package:flutter/foundation.dart'; diff --git a/lib/model/entry.dart b/lib/model/entry.dart index 2725f21a3..387cfe66e 100644 --- a/lib/model/entry.dart +++ b/lib/model/entry.dart @@ -10,10 +10,10 @@ import 'package:aves/model/multipage.dart'; import 'package:aves/model/settings/settings.dart'; import 'package:aves/model/video/metadata.dart'; import 'package:aves/ref/mime_types.dart'; +import 'package:aves/services/common/service_policy.dart'; +import 'package:aves/services/common/services.dart'; import 'package:aves/services/geocoding_service.dart'; -import 'package:aves/services/service_policy.dart'; -import 'package:aves/services/services.dart'; -import 'package:aves/services/svg_metadata_service.dart'; +import 'package:aves/services/metadata/svg_metadata_service.dart'; import 'package:aves/theme/format.dart'; import 'package:aves/utils/change_notifier.dart'; import 'package:collection/collection.dart'; @@ -436,7 +436,7 @@ class AvesEntry { final fields = await VideoMetadataFormatter.getLoadingMetadata(this); await _applyNewFields(fields, persist: persist); } - catalogMetadata = await metadataService.getCatalogMetadata(this, background: background); + catalogMetadata = await metadataFetchService.getCatalogMetadata(this, background: background); if (isVideo && (catalogMetadata?.dateMillis ?? 0) == 0) { catalogMetadata = await VideoMetadataFormatter.getCatalogMetadata(this); @@ -581,7 +581,7 @@ class AvesEntry { } Future rotate({required bool clockwise, required bool persist}) async { - final newFields = await imageFileService.rotate(this, clockwise: clockwise); + final newFields = await metadataEditService.rotate(this, clockwise: clockwise); if (newFields.isEmpty) return false; final oldDateModifiedSecs = dateModifiedSecs; @@ -593,7 +593,7 @@ class AvesEntry { } Future flip({required bool persist}) async { - final newFields = await imageFileService.flip(this); + final newFields = await metadataEditService.flip(this); if (newFields.isEmpty) return false; final oldDateModifiedSecs = dateModifiedSecs; @@ -605,7 +605,7 @@ class AvesEntry { } Future editDate(DateModifier modifier, {required bool persist}) async { - final newFields = await imageFileService.editDate(this, modifier); + final newFields = await metadataEditService.editDate(this, modifier); if (newFields.isEmpty) return false; await _applyNewFields(newFields, persist: persist); @@ -696,7 +696,7 @@ class AvesEntry { .toList(), ); } else { - return await metadataService.getMultiPageInfo(this); + return await metadataFetchService.getMultiPageInfo(this); } } diff --git a/lib/model/favourites.dart b/lib/model/favourites.dart index a64633507..18123a753 100644 --- a/lib/model/favourites.dart +++ b/lib/model/favourites.dart @@ -1,5 +1,5 @@ import 'package:aves/model/entry.dart'; -import 'package:aves/services/services.dart'; +import 'package:aves/services/common/services.dart'; import 'package:collection/collection.dart'; import 'package:equatable/equatable.dart'; import 'package:flutter/widgets.dart'; diff --git a/lib/model/filters/album.dart b/lib/model/filters/album.dart index d7c8fab3f..4bf3e7501 100644 --- a/lib/model/filters/album.dart +++ b/lib/model/filters/album.dart @@ -1,6 +1,6 @@ import 'package:aves/image_providers/app_icon_image_provider.dart'; import 'package:aves/model/filters/filters.dart'; -import 'package:aves/services/services.dart'; +import 'package:aves/services/common/services.dart'; import 'package:aves/theme/icons.dart'; import 'package:aves/utils/android_file_utils.dart'; import 'package:aves/widgets/common/identity/aves_icons.dart'; diff --git a/lib/model/metadata_db.dart b/lib/model/metadata_db.dart index 10ded516b..eae41c6e0 100644 --- a/lib/model/metadata_db.dart +++ b/lib/model/metadata_db.dart @@ -7,7 +7,7 @@ import 'package:aves/model/filters/filters.dart'; import 'package:aves/model/metadata/address.dart'; import 'package:aves/model/metadata/catalog.dart'; import 'package:aves/model/metadata_db_upgrade.dart'; -import 'package:aves/services/services.dart'; +import 'package:aves/services/common/services.dart'; import 'package:collection/collection.dart'; import 'package:flutter/foundation.dart'; import 'package:sqflite/sqflite.dart'; diff --git a/lib/model/multipage.dart b/lib/model/multipage.dart index 50d60d1a0..08e3a888c 100644 --- a/lib/model/multipage.dart +++ b/lib/model/multipage.dart @@ -1,6 +1,6 @@ import 'package:aves/model/entry.dart'; import 'package:aves/ref/mime_types.dart'; -import 'package:aves/services/services.dart'; +import 'package:aves/services/common/services.dart'; import 'package:collection/collection.dart'; import 'package:flutter/foundation.dart'; diff --git a/lib/model/settings/screen_on.dart b/lib/model/settings/screen_on.dart index acf1ebf8b..2fb7dfeef 100644 --- a/lib/model/settings/screen_on.dart +++ b/lib/model/settings/screen_on.dart @@ -1,4 +1,4 @@ -import 'package:aves/services/services.dart'; +import 'package:aves/services/common/services.dart'; import 'package:aves/widgets/common/extensions/build_context.dart'; import 'package:flutter/widgets.dart'; diff --git a/lib/model/settings/settings.dart b/lib/model/settings/settings.dart index 117991a74..41e32038f 100644 --- a/lib/model/settings/settings.dart +++ b/lib/model/settings/settings.dart @@ -12,7 +12,7 @@ import 'package:aves/model/settings/map_style.dart'; import 'package:aves/model/settings/screen_on.dart'; import 'package:aves/model/source/enums.dart'; import 'package:aves/services/device_service.dart'; -import 'package:aves/services/services.dart'; +import 'package:aves/services/common/services.dart'; import 'package:collection/collection.dart'; import 'package:firebase_core/firebase_core.dart'; import 'package:flutter/material.dart'; diff --git a/lib/model/source/album.dart b/lib/model/source/album.dart index f392c4438..64bed85ae 100644 --- a/lib/model/source/album.dart +++ b/lib/model/source/album.dart @@ -2,7 +2,7 @@ import 'package:aves/model/entry.dart'; import 'package:aves/model/filters/album.dart'; import 'package:aves/model/settings/settings.dart'; import 'package:aves/model/source/collection_source.dart'; -import 'package:aves/services/services.dart'; +import 'package:aves/services/common/services.dart'; import 'package:aves/utils/android_file_utils.dart'; import 'package:aves/widgets/common/extensions/build_context.dart'; import 'package:collection/collection.dart'; diff --git a/lib/model/source/collection_source.dart b/lib/model/source/collection_source.dart index d99d9e652..b097f6896 100644 --- a/lib/model/source/collection_source.dart +++ b/lib/model/source/collection_source.dart @@ -12,8 +12,8 @@ import 'package:aves/model/source/album.dart'; import 'package:aves/model/source/enums.dart'; import 'package:aves/model/source/location.dart'; import 'package:aves/model/source/tag.dart'; -import 'package:aves/services/image_op_events.dart'; -import 'package:aves/services/services.dart'; +import 'package:aves/services/common/image_op_events.dart'; +import 'package:aves/services/common/services.dart'; import 'package:collection/collection.dart'; import 'package:event_bus/event_bus.dart'; import 'package:flutter/foundation.dart'; diff --git a/lib/model/source/location.dart b/lib/model/source/location.dart index 85f19ccc9..e1683125e 100644 --- a/lib/model/source/location.dart +++ b/lib/model/source/location.dart @@ -6,7 +6,7 @@ import 'package:aves/model/filters/location.dart'; import 'package:aves/model/metadata/address.dart'; import 'package:aves/model/source/collection_source.dart'; import 'package:aves/model/source/enums.dart'; -import 'package:aves/services/services.dart'; +import 'package:aves/services/common/services.dart'; import 'package:collection/collection.dart'; import 'package:flutter/foundation.dart'; import 'package:tuple/tuple.dart'; diff --git a/lib/model/source/media_store_source.dart b/lib/model/source/media_store_source.dart index a83b2c8a0..6f1e7c1ae 100644 --- a/lib/model/source/media_store_source.dart +++ b/lib/model/source/media_store_source.dart @@ -7,7 +7,7 @@ import 'package:aves/model/favourites.dart'; import 'package:aves/model/settings/settings.dart'; import 'package:aves/model/source/collection_source.dart'; import 'package:aves/model/source/enums.dart'; -import 'package:aves/services/services.dart'; +import 'package:aves/services/common/services.dart'; import 'package:aves/utils/android_file_utils.dart'; import 'package:collection/collection.dart'; import 'package:flutter/material.dart'; diff --git a/lib/model/source/tag.dart b/lib/model/source/tag.dart index bb30c3639..661c37483 100644 --- a/lib/model/source/tag.dart +++ b/lib/model/source/tag.dart @@ -3,7 +3,7 @@ import 'package:aves/model/filters/tag.dart'; import 'package:aves/model/metadata/catalog.dart'; import 'package:aves/model/source/collection_source.dart'; import 'package:aves/model/source/enums.dart'; -import 'package:aves/services/services.dart'; +import 'package:aves/services/common/services.dart'; import 'package:collection/collection.dart'; import 'package:flutter/foundation.dart'; diff --git a/lib/model/video/metadata.dart b/lib/model/video/metadata.dart index c20c3a805..2e830c3b0 100644 --- a/lib/model/video/metadata.dart +++ b/lib/model/video/metadata.dart @@ -10,7 +10,7 @@ import 'package:aves/model/video/profiles/h264.dart'; import 'package:aves/model/video/profiles/hevc.dart'; import 'package:aves/ref/languages.dart'; import 'package:aves/ref/mp4.dart'; -import 'package:aves/services/services.dart'; +import 'package:aves/services/common/services.dart'; import 'package:aves/theme/format.dart'; import 'package:aves/utils/file_utils.dart'; import 'package:aves/utils/math_utils.dart'; diff --git a/lib/services/android_app_service.dart b/lib/services/android_app_service.dart index 09314686b..32e930efc 100644 --- a/lib/services/android_app_service.dart +++ b/lib/services/android_app_service.dart @@ -1,7 +1,7 @@ import 'dart:typed_data'; import 'package:aves/model/entry.dart'; -import 'package:aves/services/services.dart'; +import 'package:aves/services/common/services.dart'; import 'package:aves/utils/android_file_utils.dart'; import 'package:aves/utils/math_utils.dart'; import 'package:collection/collection.dart'; diff --git a/lib/services/android_debug_service.dart b/lib/services/android_debug_service.dart index 947358f82..15f63b70d 100644 --- a/lib/services/android_debug_service.dart +++ b/lib/services/android_debug_service.dart @@ -1,6 +1,6 @@ import 'package:aves/model/entry.dart'; import 'package:aves/ref/mime_types.dart'; -import 'package:aves/services/services.dart'; +import 'package:aves/services/common/services.dart'; import 'package:flutter/services.dart'; class AndroidDebugService { diff --git a/lib/services/app_shortcut_service.dart b/lib/services/app_shortcut_service.dart index 9d96312b5..a1f0574c6 100644 --- a/lib/services/app_shortcut_service.dart +++ b/lib/services/app_shortcut_service.dart @@ -2,7 +2,7 @@ import 'dart:typed_data'; import 'package:aves/model/entry.dart'; import 'package:aves/model/filters/filters.dart'; -import 'package:aves/services/services.dart'; +import 'package:aves/services/common/services.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/services.dart'; diff --git a/lib/services/image_op_events.dart b/lib/services/common/image_op_events.dart similarity index 100% rename from lib/services/image_op_events.dart rename to lib/services/common/image_op_events.dart diff --git a/lib/services/output_buffer.dart b/lib/services/common/output_buffer.dart similarity index 100% rename from lib/services/output_buffer.dart rename to lib/services/common/output_buffer.dart diff --git a/lib/services/service_policy.dart b/lib/services/common/service_policy.dart similarity index 100% rename from lib/services/service_policy.dart rename to lib/services/common/service_policy.dart diff --git a/lib/services/services.dart b/lib/services/common/services.dart similarity index 80% rename from lib/services/services.dart rename to lib/services/common/services.dart index 52fbd7b2d..40e045aec 100644 --- a/lib/services/services.dart +++ b/lib/services/common/services.dart @@ -3,7 +3,8 @@ import 'package:aves/model/metadata_db.dart'; import 'package:aves/services/embedded_data_service.dart'; import 'package:aves/services/image_file_service.dart'; import 'package:aves/services/media_store_service.dart'; -import 'package:aves/services/metadata_service.dart'; +import 'package:aves/services/metadata/metadata_edit_service.dart'; +import 'package:aves/services/metadata/metadata_fetch_service.dart'; import 'package:aves/services/report_service.dart'; import 'package:aves/services/storage_service.dart'; import 'package:aves/services/time_service.dart'; @@ -20,7 +21,8 @@ final MetadataDb metadataDb = getIt(); final EmbeddedDataService embeddedDataService = getIt(); final ImageFileService imageFileService = getIt(); final MediaStoreService mediaStoreService = getIt(); -final MetadataService metadataService = getIt(); +final MetadataEditService metadataEditService = getIt(); +final MetadataFetchService metadataFetchService = getIt(); final ReportService reportService = getIt(); final StorageService storageService = getIt(); final TimeService timeService = getIt(); @@ -34,7 +36,8 @@ void initPlatformServices() { getIt.registerLazySingleton(() => PlatformEmbeddedDataService()); getIt.registerLazySingleton(() => PlatformImageFileService()); getIt.registerLazySingleton(() => PlatformMediaStoreService()); - getIt.registerLazySingleton(() => PlatformMetadataService()); + getIt.registerLazySingleton(() => PlatformMetadataEditService()); + getIt.registerLazySingleton(() => PlatformMetadataFetchService()); getIt.registerLazySingleton(() => CrashlyticsReportService()); getIt.registerLazySingleton(() => PlatformStorageService()); getIt.registerLazySingleton(() => PlatformTimeService()); diff --git a/lib/services/device_service.dart b/lib/services/device_service.dart index 725d8577d..f375f73df 100644 --- a/lib/services/device_service.dart +++ b/lib/services/device_service.dart @@ -1,4 +1,4 @@ -import 'package:aves/services/services.dart'; +import 'package:aves/services/common/services.dart'; import 'package:flutter/services.dart'; class DeviceService { diff --git a/lib/services/embedded_data_service.dart b/lib/services/embedded_data_service.dart index 0f2b3af82..3e117548d 100644 --- a/lib/services/embedded_data_service.dart +++ b/lib/services/embedded_data_service.dart @@ -1,7 +1,7 @@ import 'dart:typed_data'; import 'package:aves/model/entry.dart'; -import 'package:aves/services/services.dart'; +import 'package:aves/services/common/services.dart'; import 'package:flutter/services.dart'; abstract class EmbeddedDataService { diff --git a/lib/services/geocoding_service.dart b/lib/services/geocoding_service.dart index 2e41263fe..aed70015a 100644 --- a/lib/services/geocoding_service.dart +++ b/lib/services/geocoding_service.dart @@ -1,6 +1,6 @@ import 'dart:async'; -import 'package:aves/services/services.dart'; +import 'package:aves/services/common/services.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/services.dart'; import 'package:latlong2/latlong.dart'; diff --git a/lib/services/global_search.dart b/lib/services/global_search.dart index 6464c12a7..d66ba2c17 100644 --- a/lib/services/global_search.dart +++ b/lib/services/global_search.dart @@ -1,6 +1,6 @@ import 'dart:ui'; -import 'package:aves/services/services.dart'; +import 'package:aves/services/common/services.dart'; import 'package:aves/theme/format.dart'; import 'package:flutter/services.dart'; import 'package:flutter/widgets.dart'; diff --git a/lib/services/image_file_service.dart b/lib/services/image_file_service.dart index ea1cef5ec..d07454375 100644 --- a/lib/services/image_file_service.dart +++ b/lib/services/image_file_service.dart @@ -4,13 +4,11 @@ import 'dart:typed_data'; import 'dart:ui'; import 'package:aves/model/entry.dart'; -import 'package:aves/model/metadata/date_modifier.dart'; -import 'package:aves/model/metadata/enums.dart'; import 'package:aves/ref/mime_types.dart'; -import 'package:aves/services/image_op_events.dart'; -import 'package:aves/services/output_buffer.dart'; -import 'package:aves/services/service_policy.dart'; -import 'package:aves/services/services.dart'; +import 'package:aves/services/common/image_op_events.dart'; +import 'package:aves/services/common/output_buffer.dart'; +import 'package:aves/services/common/service_policy.dart'; +import 'package:aves/services/common/services.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/services.dart'; import 'package:streams_channel/streams_channel.dart'; @@ -92,12 +90,6 @@ abstract class ImageFileService { }); Future> rename(AvesEntry entry, String newName); - - Future> rotate(AvesEntry entry, {required bool clockwise}); - - Future> flip(AvesEntry entry); - - Future> editDate(AvesEntry entry, DateModifier modifier); } class PlatformImageFileService implements ImageFileService { @@ -383,62 +375,4 @@ class PlatformImageFileService implements ImageFileService { } return {}; } - - @override - Future> rotate(AvesEntry entry, {required bool clockwise}) async { - try { - // returns map with: 'rotationDegrees' 'isFlipped' - final result = await platform.invokeMethod('rotate', { - 'entry': _toPlatformEntryMap(entry), - 'clockwise': clockwise, - }); - if (result != null) return (result as Map).cast(); - } on PlatformException catch (e, stack) { - await reportService.recordError(e, stack); - } - return {}; - } - - @override - Future> flip(AvesEntry entry) async { - try { - // returns map with: 'rotationDegrees' 'isFlipped' - final result = await platform.invokeMethod('flip', { - 'entry': _toPlatformEntryMap(entry), - }); - if (result != null) return (result as Map).cast(); - } on PlatformException catch (e, stack) { - await reportService.recordError(e, stack); - } - return {}; - } - - @override - Future> editDate(AvesEntry entry, DateModifier modifier) async { - try { - final result = await platform.invokeMethod('editDate', { - 'entry': _toPlatformEntryMap(entry), - 'dateMillis': modifier.dateTime?.millisecondsSinceEpoch, - 'shiftMinutes': modifier.shiftMinutes, - 'fields': modifier.fields.map(_toExifInterfaceTag).toList(), - }); - if (result != null) return (result as Map).cast(); - } on PlatformException catch (e, stack) { - await reportService.recordError(e, stack); - } - return {}; - } - - String _toExifInterfaceTag(MetadataField field) { - switch (field) { - case MetadataField.exifDate: - return 'DateTime'; - case MetadataField.exifDateOriginal: - return 'DateTimeOriginal'; - case MetadataField.exifDateDigitized: - return 'DateTimeDigitized'; - case MetadataField.exifGpsDate: - return 'GPSDateStamp'; - } - } } diff --git a/lib/services/media_store_service.dart b/lib/services/media_store_service.dart index 3363f1686..323d8ccbe 100644 --- a/lib/services/media_store_service.dart +++ b/lib/services/media_store_service.dart @@ -1,7 +1,7 @@ import 'dart:async'; import 'package:aves/model/entry.dart'; -import 'package:aves/services/services.dart'; +import 'package:aves/services/common/services.dart'; import 'package:flutter/services.dart'; import 'package:streams_channel/streams_channel.dart'; diff --git a/lib/services/metadata/metadata_edit_service.dart b/lib/services/metadata/metadata_edit_service.dart new file mode 100644 index 000000000..276114d7a --- /dev/null +++ b/lib/services/metadata/metadata_edit_service.dart @@ -0,0 +1,92 @@ +import 'dart:async'; + +import 'package:aves/model/entry.dart'; +import 'package:aves/model/metadata/date_modifier.dart'; +import 'package:aves/model/metadata/enums.dart'; +import 'package:aves/services/common/services.dart'; +import 'package:flutter/services.dart'; + +abstract class MetadataEditService { + Future> rotate(AvesEntry entry, {required bool clockwise}); + + Future> flip(AvesEntry entry); + + Future> editDate(AvesEntry entry, DateModifier modifier); +} + +class PlatformMetadataEditService implements MetadataEditService { + static const platform = MethodChannel('deckers.thibault/aves/metadata_edit'); + + static Map _toPlatformEntryMap(AvesEntry entry) { + return { + 'uri': entry.uri, + 'path': entry.path, + 'pageId': entry.pageId, + 'mimeType': entry.mimeType, + 'width': entry.width, + 'height': entry.height, + 'rotationDegrees': entry.rotationDegrees, + 'isFlipped': entry.isFlipped, + 'dateModifiedSecs': entry.dateModifiedSecs, + 'sizeBytes': entry.sizeBytes, + }; + } + + @override + Future> rotate(AvesEntry entry, {required bool clockwise}) async { + try { + // returns map with: 'rotationDegrees' 'isFlipped' + final result = await platform.invokeMethod('rotate', { + 'entry': _toPlatformEntryMap(entry), + 'clockwise': clockwise, + }); + if (result != null) return (result as Map).cast(); + } on PlatformException catch (e, stack) { + await reportService.recordError(e, stack); + } + return {}; + } + + @override + Future> flip(AvesEntry entry) async { + try { + // returns map with: 'rotationDegrees' 'isFlipped' + final result = await platform.invokeMethod('flip', { + 'entry': _toPlatformEntryMap(entry), + }); + if (result != null) return (result as Map).cast(); + } on PlatformException catch (e, stack) { + await reportService.recordError(e, stack); + } + return {}; + } + + @override + Future> editDate(AvesEntry entry, DateModifier modifier) async { + try { + final result = await platform.invokeMethod('editDate', { + 'entry': _toPlatformEntryMap(entry), + 'dateMillis': modifier.dateTime?.millisecondsSinceEpoch, + 'shiftMinutes': modifier.shiftMinutes, + 'fields': modifier.fields.map(_toExifInterfaceTag).toList(), + }); + if (result != null) return (result as Map).cast(); + } on PlatformException catch (e, stack) { + await reportService.recordError(e, stack); + } + return {}; + } + + String _toExifInterfaceTag(MetadataField field) { + switch (field) { + case MetadataField.exifDate: + return 'DateTime'; + case MetadataField.exifDateOriginal: + return 'DateTimeOriginal'; + case MetadataField.exifDateDigitized: + return 'DateTimeDigitized'; + case MetadataField.exifGpsDate: + return 'GPSDateStamp'; + } + } +} diff --git a/lib/services/metadata_service.dart b/lib/services/metadata/metadata_fetch_service.dart similarity index 96% rename from lib/services/metadata_service.dart rename to lib/services/metadata/metadata_fetch_service.dart index 80c023077..3729b393a 100644 --- a/lib/services/metadata_service.dart +++ b/lib/services/metadata/metadata_fetch_service.dart @@ -3,12 +3,12 @@ import 'package:aves/model/metadata/catalog.dart'; import 'package:aves/model/metadata/overlay.dart'; import 'package:aves/model/multipage.dart'; import 'package:aves/model/panorama.dart'; -import 'package:aves/services/service_policy.dart'; -import 'package:aves/services/services.dart'; +import 'package:aves/services/common/service_policy.dart'; +import 'package:aves/services/common/services.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/services.dart'; -abstract class MetadataService { +abstract class MetadataFetchService { // returns Map> (map of directories, each directory being a map of metadata label and value description) Future getAllMetadata(AvesEntry entry); @@ -25,8 +25,8 @@ abstract class MetadataService { Future getContentResolverProp(AvesEntry entry, String prop); } -class PlatformMetadataService implements MetadataService { - static const platform = MethodChannel('deckers.thibault/aves/metadata'); +class PlatformMetadataFetchService implements MetadataFetchService { + static const platform = MethodChannel('deckers.thibault/aves/metadata_fetch'); @override Future getAllMetadata(AvesEntry entry) async { diff --git a/lib/services/svg_metadata_service.dart b/lib/services/metadata/svg_metadata_service.dart similarity index 98% rename from lib/services/svg_metadata_service.dart rename to lib/services/metadata/svg_metadata_service.dart index 652bceaf0..0d34d863c 100644 --- a/lib/services/svg_metadata_service.dart +++ b/lib/services/metadata/svg_metadata_service.dart @@ -1,7 +1,7 @@ import 'dart:convert'; import 'package:aves/model/entry.dart'; -import 'package:aves/services/services.dart'; +import 'package:aves/services/common/services.dart'; import 'package:aves/utils/string_utils.dart'; import 'package:collection/collection.dart'; import 'package:flutter/foundation.dart'; diff --git a/lib/services/storage_service.dart b/lib/services/storage_service.dart index cba8baadf..977239d57 100644 --- a/lib/services/storage_service.dart +++ b/lib/services/storage_service.dart @@ -1,8 +1,8 @@ import 'dart:async'; import 'dart:typed_data'; -import 'package:aves/services/output_buffer.dart'; -import 'package:aves/services/services.dart'; +import 'package:aves/services/common/output_buffer.dart'; +import 'package:aves/services/common/services.dart'; import 'package:aves/utils/android_file_utils.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/services.dart'; diff --git a/lib/services/time_service.dart b/lib/services/time_service.dart index 7f7cf2a4f..2c38166a3 100644 --- a/lib/services/time_service.dart +++ b/lib/services/time_service.dart @@ -1,4 +1,4 @@ -import 'package:aves/services/services.dart'; +import 'package:aves/services/common/services.dart'; import 'package:flutter/services.dart'; abstract class TimeService { diff --git a/lib/services/viewer_service.dart b/lib/services/viewer_service.dart index ec76a6bcc..7956e3ae3 100644 --- a/lib/services/viewer_service.dart +++ b/lib/services/viewer_service.dart @@ -1,4 +1,4 @@ -import 'package:aves/services/services.dart'; +import 'package:aves/services/common/services.dart'; import 'package:flutter/services.dart'; class ViewerService { diff --git a/lib/services/window_service.dart b/lib/services/window_service.dart index b325d264b..2a0b53b1b 100644 --- a/lib/services/window_service.dart +++ b/lib/services/window_service.dart @@ -1,4 +1,4 @@ -import 'package:aves/services/services.dart'; +import 'package:aves/services/common/services.dart'; import 'package:flutter/services.dart'; import 'package:flutter/widgets.dart'; diff --git a/lib/utils/android_file_utils.dart b/lib/utils/android_file_utils.dart index 8c557d716..378b4fd22 100644 --- a/lib/utils/android_file_utils.dart +++ b/lib/utils/android_file_utils.dart @@ -1,5 +1,5 @@ import 'package:aves/services/android_app_service.dart'; -import 'package:aves/services/services.dart'; +import 'package:aves/services/common/services.dart'; import 'package:aves/utils/change_notifier.dart'; import 'package:aves/widgets/common/extensions/build_context.dart'; import 'package:collection/collection.dart'; diff --git a/lib/widgets/about/bug_report.dart b/lib/widgets/about/bug_report.dart index 216d1ddc3..b21ad76ab 100644 --- a/lib/widgets/about/bug_report.dart +++ b/lib/widgets/about/bug_report.dart @@ -4,7 +4,7 @@ import 'dart:typed_data'; import 'package:aves/flutter_version.dart'; import 'package:aves/ref/mime_types.dart'; -import 'package:aves/services/services.dart'; +import 'package:aves/services/common/services.dart'; import 'package:aves/utils/constants.dart'; import 'package:aves/widgets/common/action_mixins/feedback.dart'; import 'package:aves/widgets/common/extensions/build_context.dart'; diff --git a/lib/widgets/about/update.dart b/lib/widgets/about/update.dart index dbd9e2d4d..8401c170d 100644 --- a/lib/widgets/about/update.dart +++ b/lib/widgets/about/update.dart @@ -1,4 +1,4 @@ -import 'package:aves/services/services.dart'; +import 'package:aves/services/common/services.dart'; import 'package:aves/utils/constants.dart'; import 'package:aves/widgets/about/news_badge.dart'; import 'package:aves/widgets/common/basic/link_chip.dart'; diff --git a/lib/widgets/aves_app.dart b/lib/widgets/aves_app.dart index 17f005d94..5321e632b 100644 --- a/lib/widgets/aves_app.dart +++ b/lib/widgets/aves_app.dart @@ -4,7 +4,7 @@ import 'package:aves/app_mode.dart'; import 'package:aves/model/settings/settings.dart'; import 'package:aves/model/source/collection_source.dart'; import 'package:aves/model/source/media_store_source.dart'; -import 'package:aves/services/services.dart'; +import 'package:aves/services/common/services.dart'; import 'package:aves/theme/durations.dart'; import 'package:aves/theme/icons.dart'; import 'package:aves/theme/themes.dart'; diff --git a/lib/widgets/collection/entry_set_action_delegate.dart b/lib/widgets/collection/entry_set_action_delegate.dart index b52b3d802..3b33d1b4c 100644 --- a/lib/widgets/collection/entry_set_action_delegate.dart +++ b/lib/widgets/collection/entry_set_action_delegate.dart @@ -9,8 +9,8 @@ import 'package:aves/model/selection.dart'; import 'package:aves/model/source/collection_lens.dart'; import 'package:aves/model/source/collection_source.dart'; import 'package:aves/services/android_app_service.dart'; -import 'package:aves/services/image_op_events.dart'; -import 'package:aves/services/services.dart'; +import 'package:aves/services/common/image_op_events.dart'; +import 'package:aves/services/common/services.dart'; import 'package:aves/theme/durations.dart'; import 'package:aves/utils/android_file_utils.dart'; import 'package:aves/widgets/collection/collection_page.dart'; diff --git a/lib/widgets/common/action_mixins/permission_aware.dart b/lib/widgets/common/action_mixins/permission_aware.dart index 76ef92e31..22b856062 100644 --- a/lib/widgets/common/action_mixins/permission_aware.dart +++ b/lib/widgets/common/action_mixins/permission_aware.dart @@ -1,5 +1,5 @@ import 'package:aves/model/entry.dart'; -import 'package:aves/services/services.dart'; +import 'package:aves/services/common/services.dart'; import 'package:aves/utils/android_file_utils.dart'; import 'package:aves/widgets/common/extensions/build_context.dart'; import 'package:aves/widgets/dialogs/aves_dialog.dart'; diff --git a/lib/widgets/common/action_mixins/size_aware.dart b/lib/widgets/common/action_mixins/size_aware.dart index dad001137..e3793e77b 100644 --- a/lib/widgets/common/action_mixins/size_aware.dart +++ b/lib/widgets/common/action_mixins/size_aware.dart @@ -3,7 +3,7 @@ import 'dart:math'; import 'package:aves/model/actions/move_type.dart'; import 'package:aves/model/entry.dart'; -import 'package:aves/services/services.dart'; +import 'package:aves/services/common/services.dart'; import 'package:aves/utils/android_file_utils.dart'; import 'package:aves/utils/collection_utils.dart'; import 'package:aves/utils/file_utils.dart'; diff --git a/lib/widgets/common/behaviour/route_tracker.dart b/lib/widgets/common/behaviour/route_tracker.dart index 2e3d53fd0..98391587b 100644 --- a/lib/widgets/common/behaviour/route_tracker.dart +++ b/lib/widgets/common/behaviour/route_tracker.dart @@ -1,4 +1,4 @@ -import 'package:aves/services/services.dart'; +import 'package:aves/services/common/services.dart'; import 'package:flutter/material.dart'; class CrashlyticsRouteTracker extends NavigatorObserver { diff --git a/lib/widgets/common/map/buttons.dart b/lib/widgets/common/map/buttons.dart index 5dae98abf..c837bfdbc 100644 --- a/lib/widgets/common/map/buttons.dart +++ b/lib/widgets/common/map/buttons.dart @@ -2,7 +2,7 @@ import 'package:aves/model/settings/enums.dart'; import 'package:aves/model/settings/map_style.dart'; import 'package:aves/model/settings/settings.dart'; import 'package:aves/services/android_app_service.dart'; -import 'package:aves/services/services.dart'; +import 'package:aves/services/common/services.dart'; import 'package:aves/theme/durations.dart'; import 'package:aves/theme/icons.dart'; import 'package:aves/widgets/common/extensions/build_context.dart'; diff --git a/lib/widgets/common/map/geo_map.dart b/lib/widgets/common/map/geo_map.dart index 3717db26d..7c6021dc9 100644 --- a/lib/widgets/common/map/geo_map.dart +++ b/lib/widgets/common/map/geo_map.dart @@ -4,7 +4,7 @@ import 'package:aves/model/entry.dart'; import 'package:aves/model/settings/enums.dart'; import 'package:aves/model/settings/map_style.dart'; import 'package:aves/model/settings/settings.dart'; -import 'package:aves/services/services.dart'; +import 'package:aves/services/common/services.dart'; import 'package:aves/theme/durations.dart'; import 'package:aves/utils/constants.dart'; import 'package:aves/utils/math_utils.dart'; diff --git a/lib/widgets/common/thumbnail/image.dart b/lib/widgets/common/thumbnail/image.dart index 919d9d8e4..1b37ffc75 100644 --- a/lib/widgets/common/thumbnail/image.dart +++ b/lib/widgets/common/thumbnail/image.dart @@ -7,7 +7,7 @@ import 'package:aves/model/entry_images.dart'; import 'package:aves/model/settings/entry_background.dart'; import 'package:aves/model/settings/enums.dart'; import 'package:aves/model/settings/settings.dart'; -import 'package:aves/services/services.dart'; +import 'package:aves/services/common/services.dart'; import 'package:aves/widgets/common/fx/checkered_decoration.dart'; import 'package:aves/widgets/common/fx/transition_image.dart'; import 'package:aves/widgets/common/providers/media_query_data_provider.dart'; diff --git a/lib/widgets/debug/cache.dart b/lib/widgets/debug/cache.dart index a88073833..0c4eda72d 100644 --- a/lib/widgets/debug/cache.dart +++ b/lib/widgets/debug/cache.dart @@ -1,4 +1,4 @@ -import 'package:aves/services/services.dart'; +import 'package:aves/services/common/services.dart'; import 'package:aves/utils/file_utils.dart'; import 'package:aves/widgets/common/identity/aves_expansion_tile.dart'; import 'package:flutter/material.dart'; diff --git a/lib/widgets/debug/database.dart b/lib/widgets/debug/database.dart index 87811ec72..c7711f779 100644 --- a/lib/widgets/debug/database.dart +++ b/lib/widgets/debug/database.dart @@ -3,7 +3,7 @@ import 'package:aves/model/entry.dart'; import 'package:aves/model/favourites.dart'; import 'package:aves/model/metadata/address.dart'; import 'package:aves/model/metadata/catalog.dart'; -import 'package:aves/services/services.dart'; +import 'package:aves/services/common/services.dart'; import 'package:aves/utils/file_utils.dart'; import 'package:aves/widgets/common/identity/aves_expansion_tile.dart'; import 'package:flutter/material.dart'; diff --git a/lib/widgets/debug/overlay.dart b/lib/widgets/debug/overlay.dart index 66850d309..143a798bd 100644 --- a/lib/widgets/debug/overlay.dart +++ b/lib/widgets/debug/overlay.dart @@ -1,4 +1,4 @@ -import 'package:aves/services/service_policy.dart'; +import 'package:aves/services/common/service_policy.dart'; import 'package:flutter/material.dart'; class DebugTaskQueueOverlay extends StatelessWidget { diff --git a/lib/widgets/debug/report.dart b/lib/widgets/debug/report.dart index fd5d842be..27227e4c2 100644 --- a/lib/widgets/debug/report.dart +++ b/lib/widgets/debug/report.dart @@ -1,5 +1,5 @@ import 'package:aves/services/android_debug_service.dart'; -import 'package:aves/services/services.dart'; +import 'package:aves/services/common/services.dart'; import 'package:aves/widgets/common/identity/aves_expansion_tile.dart'; import 'package:aves/widgets/viewer/info/common.dart'; import 'package:firebase_core/firebase_core.dart'; diff --git a/lib/widgets/debug/storage.dart b/lib/widgets/debug/storage.dart index 3b009fbdd..da2f29f55 100644 --- a/lib/widgets/debug/storage.dart +++ b/lib/widgets/debug/storage.dart @@ -1,4 +1,4 @@ -import 'package:aves/services/services.dart'; +import 'package:aves/services/common/services.dart'; import 'package:aves/utils/android_file_utils.dart'; import 'package:aves/utils/file_utils.dart'; import 'package:aves/widgets/common/identity/aves_expansion_tile.dart'; diff --git a/lib/widgets/dialogs/create_album_dialog.dart b/lib/widgets/dialogs/create_album_dialog.dart index ad4a7ab69..da9fa5759 100644 --- a/lib/widgets/dialogs/create_album_dialog.dart +++ b/lib/widgets/dialogs/create_album_dialog.dart @@ -1,6 +1,6 @@ import 'dart:io'; -import 'package:aves/services/services.dart'; +import 'package:aves/services/common/services.dart'; import 'package:aves/theme/durations.dart'; import 'package:aves/utils/android_file_utils.dart'; import 'package:aves/widgets/common/extensions/build_context.dart'; diff --git a/lib/widgets/dialogs/rename_album_dialog.dart b/lib/widgets/dialogs/rename_album_dialog.dart index ed54f9874..209468c6a 100644 --- a/lib/widgets/dialogs/rename_album_dialog.dart +++ b/lib/widgets/dialogs/rename_album_dialog.dart @@ -1,6 +1,6 @@ import 'dart:io'; -import 'package:aves/services/services.dart'; +import 'package:aves/services/common/services.dart'; import 'package:aves/widgets/common/extensions/build_context.dart'; import 'package:aves/widgets/dialogs/aves_dialog.dart'; import 'package:flutter/material.dart'; diff --git a/lib/widgets/dialogs/rename_entry_dialog.dart b/lib/widgets/dialogs/rename_entry_dialog.dart index 80b859ef8..26ba06ca4 100644 --- a/lib/widgets/dialogs/rename_entry_dialog.dart +++ b/lib/widgets/dialogs/rename_entry_dialog.dart @@ -1,7 +1,7 @@ import 'dart:io'; import 'package:aves/model/entry.dart'; -import 'package:aves/services/services.dart'; +import 'package:aves/services/common/services.dart'; import 'package:aves/widgets/common/extensions/build_context.dart'; import 'package:flutter/material.dart'; diff --git a/lib/widgets/drawer/app_drawer.dart b/lib/widgets/drawer/app_drawer.dart index 91bc081b9..f75fd6874 100644 --- a/lib/widgets/drawer/app_drawer.dart +++ b/lib/widgets/drawer/app_drawer.dart @@ -5,7 +5,7 @@ import 'package:aves/model/source/album.dart'; import 'package:aves/model/source/collection_source.dart'; import 'package:aves/model/source/location.dart'; import 'package:aves/model/source/tag.dart'; -import 'package:aves/services/services.dart'; +import 'package:aves/services/common/services.dart'; import 'package:aves/theme/durations.dart'; import 'package:aves/theme/icons.dart'; import 'package:aves/utils/android_file_utils.dart'; diff --git a/lib/widgets/filter_grids/common/action_delegates/album_set.dart b/lib/widgets/filter_grids/common/action_delegates/album_set.dart index 52a590b12..393b11c96 100644 --- a/lib/widgets/filter_grids/common/action_delegates/album_set.dart +++ b/lib/widgets/filter_grids/common/action_delegates/album_set.dart @@ -8,8 +8,8 @@ import 'package:aves/model/highlight.dart'; import 'package:aves/model/settings/settings.dart'; import 'package:aves/model/source/collection_source.dart'; import 'package:aves/model/source/enums.dart'; -import 'package:aves/services/image_op_events.dart'; -import 'package:aves/services/services.dart'; +import 'package:aves/services/common/image_op_events.dart'; +import 'package:aves/services/common/services.dart'; import 'package:aves/theme/durations.dart'; import 'package:aves/utils/android_file_utils.dart'; import 'package:aves/widgets/common/extensions/build_context.dart'; diff --git a/lib/widgets/home_page.dart b/lib/widgets/home_page.dart index 0a39dbb70..4a59f04c6 100644 --- a/lib/widgets/home_page.dart +++ b/lib/widgets/home_page.dart @@ -9,7 +9,7 @@ import 'package:aves/model/settings/settings.dart'; import 'package:aves/model/source/collection_lens.dart'; import 'package:aves/model/source/collection_source.dart'; import 'package:aves/services/global_search.dart'; -import 'package:aves/services/services.dart'; +import 'package:aves/services/common/services.dart'; import 'package:aves/services/viewer_service.dart'; import 'package:aves/utils/android_file_utils.dart'; import 'package:aves/widgets/collection/collection_page.dart'; diff --git a/lib/widgets/settings/privacy/access_grants.dart b/lib/widgets/settings/privacy/access_grants.dart index aed9627f3..421697faa 100644 --- a/lib/widgets/settings/privacy/access_grants.dart +++ b/lib/widgets/settings/privacy/access_grants.dart @@ -1,4 +1,4 @@ -import 'package:aves/services/services.dart'; +import 'package:aves/services/common/services.dart'; import 'package:aves/theme/icons.dart'; import 'package:aves/widgets/common/extensions/build_context.dart'; import 'package:aves/widgets/common/identity/empty.dart'; diff --git a/lib/widgets/settings/privacy/hidden_paths.dart b/lib/widgets/settings/privacy/hidden_paths.dart index b2f44a10f..f3bea046f 100644 --- a/lib/widgets/settings/privacy/hidden_paths.dart +++ b/lib/widgets/settings/privacy/hidden_paths.dart @@ -1,7 +1,7 @@ import 'package:aves/model/filters/path.dart'; import 'package:aves/model/settings/settings.dart'; import 'package:aves/model/source/collection_source.dart'; -import 'package:aves/services/services.dart'; +import 'package:aves/services/common/services.dart'; import 'package:aves/theme/icons.dart'; import 'package:aves/widgets/common/extensions/build_context.dart'; import 'package:aves/widgets/common/identity/empty.dart'; diff --git a/lib/widgets/settings/settings_page.dart b/lib/widgets/settings/settings_page.dart index 24528b4bd..d1ff30060 100644 --- a/lib/widgets/settings/settings_page.dart +++ b/lib/widgets/settings/settings_page.dart @@ -4,7 +4,7 @@ import 'dart:typed_data'; import 'package:aves/model/actions/settings_actions.dart'; import 'package:aves/model/settings/settings.dart'; import 'package:aves/ref/mime_types.dart'; -import 'package:aves/services/services.dart'; +import 'package:aves/services/common/services.dart'; import 'package:aves/theme/durations.dart'; import 'package:aves/theme/icons.dart'; import 'package:aves/widgets/common/action_mixins/feedback.dart'; diff --git a/lib/widgets/settings/viewer/viewer.dart b/lib/widgets/settings/viewer/viewer.dart index 185af94af..85269abb4 100644 --- a/lib/widgets/settings/viewer/viewer.dart +++ b/lib/widgets/settings/viewer/viewer.dart @@ -1,6 +1,6 @@ import 'package:aves/model/settings/enums.dart'; import 'package:aves/model/settings/settings.dart'; -import 'package:aves/services/services.dart'; +import 'package:aves/services/common/services.dart'; import 'package:aves/theme/icons.dart'; import 'package:aves/utils/color_utils.dart'; import 'package:aves/widgets/common/extensions/build_context.dart'; diff --git a/lib/widgets/viewer/debug/db.dart b/lib/widgets/viewer/debug/db.dart index eef41b005..bc150c957 100644 --- a/lib/widgets/viewer/debug/db.dart +++ b/lib/widgets/viewer/debug/db.dart @@ -1,7 +1,7 @@ import 'package:aves/model/entry.dart'; import 'package:aves/model/metadata/address.dart'; import 'package:aves/model/metadata/catalog.dart'; -import 'package:aves/services/services.dart'; +import 'package:aves/services/common/services.dart'; import 'package:aves/widgets/viewer/info/common.dart'; import 'package:collection/collection.dart'; import 'package:flutter/material.dart'; diff --git a/lib/widgets/viewer/embedded/embedded_data_opener.dart b/lib/widgets/viewer/embedded/embedded_data_opener.dart index 4216eba25..a72bab817 100644 --- a/lib/widgets/viewer/embedded/embedded_data_opener.dart +++ b/lib/widgets/viewer/embedded/embedded_data_opener.dart @@ -3,7 +3,7 @@ import 'dart:async'; import 'package:aves/model/entry.dart'; import 'package:aves/ref/mime_types.dart'; import 'package:aves/services/android_app_service.dart'; -import 'package:aves/services/services.dart'; +import 'package:aves/services/common/services.dart'; import 'package:aves/widgets/common/action_mixins/feedback.dart'; import 'package:aves/widgets/common/behaviour/routes.dart'; import 'package:aves/widgets/common/extensions/build_context.dart'; diff --git a/lib/widgets/viewer/entry_action_delegate.dart b/lib/widgets/viewer/entry_action_delegate.dart index 253353271..49f797c4b 100644 --- a/lib/widgets/viewer/entry_action_delegate.dart +++ b/lib/widgets/viewer/entry_action_delegate.dart @@ -11,8 +11,8 @@ import 'package:aves/model/source/collection_lens.dart'; import 'package:aves/model/source/collection_source.dart'; import 'package:aves/ref/mime_types.dart'; import 'package:aves/services/android_app_service.dart'; -import 'package:aves/services/image_op_events.dart'; -import 'package:aves/services/services.dart'; +import 'package:aves/services/common/image_op_events.dart'; +import 'package:aves/services/common/services.dart'; import 'package:aves/theme/durations.dart'; import 'package:aves/widgets/collection/collection_page.dart'; import 'package:aves/widgets/common/action_mixins/feedback.dart'; diff --git a/lib/widgets/viewer/entry_viewer_stack.dart b/lib/widgets/viewer/entry_viewer_stack.dart index 3e1d4de9e..222f0cdee 100644 --- a/lib/widgets/viewer/entry_viewer_stack.dart +++ b/lib/widgets/viewer/entry_viewer_stack.dart @@ -6,7 +6,7 @@ import 'package:aves/model/highlight.dart'; import 'package:aves/model/settings/enums.dart'; import 'package:aves/model/settings/settings.dart'; import 'package:aves/model/source/collection_lens.dart'; -import 'package:aves/services/services.dart'; +import 'package:aves/services/common/services.dart'; import 'package:aves/theme/durations.dart'; import 'package:aves/utils/change_notifier.dart'; import 'package:aves/widgets/collection/collection_page.dart'; diff --git a/lib/widgets/viewer/info/basic_section.dart b/lib/widgets/viewer/info/basic_section.dart index 4a6f42e00..a4642f5c2 100644 --- a/lib/widgets/viewer/info/basic_section.dart +++ b/lib/widgets/viewer/info/basic_section.dart @@ -7,7 +7,7 @@ import 'package:aves/model/filters/mime.dart'; import 'package:aves/model/filters/tag.dart'; import 'package:aves/model/filters/type.dart'; import 'package:aves/model/source/collection_lens.dart'; -import 'package:aves/services/services.dart'; +import 'package:aves/services/common/services.dart'; import 'package:aves/theme/format.dart'; import 'package:aves/utils/android_file_utils.dart'; import 'package:aves/utils/file_utils.dart'; @@ -148,8 +148,8 @@ class _OwnerPropState extends State { super.initState(); final isMediaContent = entry.uri.startsWith('content://media/external/'); if (isMediaContent) { - _ownerPackageFuture = metadataService.hasContentResolverProp(ownerPackageNamePropKey).then((exists) { - return exists ? metadataService.getContentResolverProp(entry, ownerPackageNamePropKey) : SynchronousFuture(null); + _ownerPackageFuture = metadataFetchService.hasContentResolverProp(ownerPackageNamePropKey).then((exists) { + return exists ? metadataFetchService.getContentResolverProp(entry, ownerPackageNamePropKey) : SynchronousFuture(null); }); } else { _ownerPackageFuture = SynchronousFuture(null); diff --git a/lib/widgets/viewer/info/location_section.dart b/lib/widgets/viewer/info/location_section.dart index bb3ecba87..dfbba1c64 100644 --- a/lib/widgets/viewer/info/location_section.dart +++ b/lib/widgets/viewer/info/location_section.dart @@ -3,7 +3,7 @@ import 'package:aves/model/filters/location.dart'; import 'package:aves/model/settings/coordinate_format.dart'; import 'package:aves/model/settings/settings.dart'; import 'package:aves/model/source/collection_lens.dart'; -import 'package:aves/services/services.dart'; +import 'package:aves/services/common/services.dart'; import 'package:aves/theme/icons.dart'; import 'package:aves/widgets/common/extensions/build_context.dart'; import 'package:aves/widgets/common/identity/aves_filter_chip.dart'; diff --git a/lib/widgets/viewer/info/metadata/metadata_dir_tile.dart b/lib/widgets/viewer/info/metadata/metadata_dir_tile.dart index 7961b253e..6b1189548 100644 --- a/lib/widgets/viewer/info/metadata/metadata_dir_tile.dart +++ b/lib/widgets/viewer/info/metadata/metadata_dir_tile.dart @@ -2,7 +2,7 @@ import 'dart:collection'; import 'package:aves/model/entry.dart'; import 'package:aves/ref/brand_colors.dart'; -import 'package:aves/services/svg_metadata_service.dart'; +import 'package:aves/services/metadata/svg_metadata_service.dart'; import 'package:aves/utils/color_utils.dart'; import 'package:aves/utils/constants.dart'; import 'package:aves/widgets/common/extensions/build_context.dart'; diff --git a/lib/widgets/viewer/info/metadata/metadata_section.dart b/lib/widgets/viewer/info/metadata/metadata_section.dart index b55122aa7..0cef684ca 100644 --- a/lib/widgets/viewer/info/metadata/metadata_section.dart +++ b/lib/widgets/viewer/info/metadata/metadata_section.dart @@ -5,8 +5,8 @@ import 'package:aves/model/entry.dart'; import 'package:aves/model/video/keys.dart'; import 'package:aves/model/video/metadata.dart'; import 'package:aves/ref/mime_types.dart'; -import 'package:aves/services/services.dart'; -import 'package:aves/services/svg_metadata_service.dart'; +import 'package:aves/services/common/services.dart'; +import 'package:aves/services/metadata/svg_metadata_service.dart'; import 'package:aves/theme/durations.dart'; import 'package:aves/theme/icons.dart'; import 'package:aves/utils/color_utils.dart'; @@ -130,7 +130,7 @@ class _MetadataSectionSliverState extends State { } Future _getMetadata() async { - final rawMetadata = await (entry.isSvg ? SvgMetadataService.getAllMetadata(entry) : metadataService.getAllMetadata(entry)); + final rawMetadata = await (entry.isSvg ? SvgMetadataService.getAllMetadata(entry) : metadataFetchService.getAllMetadata(entry)); final directories = rawMetadata.entries.map((dirKV) { var directoryName = dirKV.key as String; diff --git a/lib/widgets/viewer/info/metadata/metadata_thumbnail.dart b/lib/widgets/viewer/info/metadata/metadata_thumbnail.dart index 0df49a5c2..7d2864e32 100644 --- a/lib/widgets/viewer/info/metadata/metadata_thumbnail.dart +++ b/lib/widgets/viewer/info/metadata/metadata_thumbnail.dart @@ -2,7 +2,7 @@ import 'dart:async'; import 'dart:typed_data'; import 'package:aves/model/entry.dart'; -import 'package:aves/services/services.dart'; +import 'package:aves/services/common/services.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; diff --git a/lib/widgets/viewer/overlay/bottom/common.dart b/lib/widgets/viewer/overlay/bottom/common.dart index b9ed3beda..dfb1bc308 100644 --- a/lib/widgets/viewer/overlay/bottom/common.dart +++ b/lib/widgets/viewer/overlay/bottom/common.dart @@ -5,7 +5,7 @@ import 'package:aves/model/metadata/overlay.dart'; import 'package:aves/model/multipage.dart'; import 'package:aves/model/settings/coordinate_format.dart'; import 'package:aves/model/settings/settings.dart'; -import 'package:aves/services/services.dart'; +import 'package:aves/services/common/services.dart'; import 'package:aves/theme/durations.dart'; import 'package:aves/theme/format.dart'; import 'package:aves/theme/icons.dart'; @@ -72,7 +72,7 @@ class _ViewerBottomOverlayState extends State { void _initDetailLoader() { final requestEntry = entry; - _detailLoader = requestEntry != null ? metadataService.getOverlayMetadata(requestEntry) : SynchronousFuture(null); + _detailLoader = requestEntry != null ? metadataFetchService.getOverlayMetadata(requestEntry) : SynchronousFuture(null); } @override diff --git a/lib/widgets/viewer/overlay/bottom/panorama.dart b/lib/widgets/viewer/overlay/bottom/panorama.dart index 58dbe902a..a76b2e9d6 100644 --- a/lib/widgets/viewer/overlay/bottom/panorama.dart +++ b/lib/widgets/viewer/overlay/bottom/panorama.dart @@ -1,7 +1,7 @@ import 'dart:async'; import 'package:aves/model/entry.dart'; -import 'package:aves/services/services.dart'; +import 'package:aves/services/common/services.dart'; import 'package:aves/widgets/common/extensions/build_context.dart'; import 'package:aves/widgets/viewer/overlay/common.dart'; import 'package:aves/widgets/viewer/panorama_page.dart'; @@ -26,7 +26,7 @@ class PanoramaOverlay extends StatelessWidget { scale: scale, buttonLabel: context.l10n.viewerOpenPanoramaButtonLabel, onPressed: () async { - final info = await metadataService.getPanoramaInfo(entry); + final info = await metadataFetchService.getPanoramaInfo(entry); if (info != null) { unawaited(Navigator.push( context, diff --git a/lib/widgets/viewer/printer.dart b/lib/widgets/viewer/printer.dart index d653082ec..25c3c33fd 100644 --- a/lib/widgets/viewer/printer.dart +++ b/lib/widgets/viewer/printer.dart @@ -3,7 +3,7 @@ import 'dart:convert'; import 'package:aves/model/entry.dart'; import 'package:aves/model/entry_images.dart'; -import 'package:aves/services/services.dart'; +import 'package:aves/services/common/services.dart'; import 'package:aves/widgets/common/action_mixins/feedback.dart'; import 'package:aves/widgets/common/extensions/build_context.dart'; import 'package:flutter/widgets.dart'; diff --git a/lib/widgets/viewer/video_action_delegate.dart b/lib/widgets/viewer/video_action_delegate.dart index 64f07cfff..b2e7a9b75 100644 --- a/lib/widgets/viewer/video_action_delegate.dart +++ b/lib/widgets/viewer/video_action_delegate.dart @@ -4,7 +4,7 @@ import 'package:aves/model/actions/video_actions.dart'; import 'package:aves/model/filters/album.dart'; import 'package:aves/model/highlight.dart'; import 'package:aves/model/source/collection_lens.dart'; -import 'package:aves/services/services.dart'; +import 'package:aves/services/common/services.dart'; import 'package:aves/theme/durations.dart'; import 'package:aves/utils/android_file_utils.dart'; import 'package:aves/widgets/collection/collection_page.dart'; diff --git a/test/fake/media_store_service.dart b/test/fake/media_store_service.dart index 2fc34b787..2476a8ca0 100644 --- a/test/fake/media_store_service.dart +++ b/test/fake/media_store_service.dart @@ -1,6 +1,6 @@ import 'package:aves/model/entry.dart'; import 'package:aves/ref/mime_types.dart'; -import 'package:aves/services/image_op_events.dart'; +import 'package:aves/services/common/image_op_events.dart'; import 'package:aves/services/media_store_service.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter_test/flutter_test.dart'; diff --git a/test/fake/metadata_service.dart b/test/fake/metadata_fetch_service.dart similarity index 68% rename from test/fake/metadata_service.dart rename to test/fake/metadata_fetch_service.dart index fb3eaf13d..990918444 100644 --- a/test/fake/metadata_service.dart +++ b/test/fake/metadata_fetch_service.dart @@ -1,10 +1,10 @@ import 'package:aves/model/entry.dart'; import 'package:aves/model/metadata/catalog.dart'; -import 'package:aves/services/metadata_service.dart'; +import 'package:aves/services/metadata/metadata_fetch_service.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter_test/flutter_test.dart'; -class FakeMetadataService extends Fake implements MetadataService { +class FakeMetadataFetchService extends Fake implements MetadataFetchService { @override Future getCatalogMetadata(AvesEntry entry, {bool background = false}) => SynchronousFuture(null); } diff --git a/test/model/collection_source_test.dart b/test/model/collection_source_test.dart index 9b7079466..c44cbaad4 100644 --- a/test/model/collection_source_test.dart +++ b/test/model/collection_source_test.dart @@ -10,8 +10,8 @@ import 'package:aves/model/source/enums.dart'; import 'package:aves/model/source/media_store_source.dart'; import 'package:aves/services/image_file_service.dart'; import 'package:aves/services/media_store_service.dart'; -import 'package:aves/services/metadata_service.dart'; -import 'package:aves/services/services.dart'; +import 'package:aves/services/metadata/metadata_fetch_service.dart'; +import 'package:aves/services/common/services.dart'; import 'package:aves/services/storage_service.dart'; import 'package:aves/services/time_service.dart'; import 'package:aves/services/window_service.dart'; @@ -24,7 +24,7 @@ import '../fake/availability.dart'; import '../fake/image_file_service.dart'; import '../fake/media_store_service.dart'; import '../fake/metadata_db.dart'; -import '../fake/metadata_service.dart'; +import '../fake/metadata_fetch_service.dart'; import '../fake/storage_service.dart'; import '../fake/time_service.dart'; import '../fake/window_service.dart'; @@ -42,7 +42,7 @@ void main() { getIt.registerLazySingleton(() => FakeImageFileService()); getIt.registerLazySingleton(() => FakeMediaStoreService()); - getIt.registerLazySingleton(() => FakeMetadataService()); + getIt.registerLazySingleton(() => FakeMetadataFetchService()); getIt.registerLazySingleton(() => FakeStorageService()); getIt.registerLazySingleton(() => FakeTimeService()); getIt.registerLazySingleton(() => FakeWindowService()); diff --git a/test/utils/android_file_utils.dart b/test/utils/android_file_utils.dart index 66ef35d74..9d05a79c8 100644 --- a/test/utils/android_file_utils.dart +++ b/test/utils/android_file_utils.dart @@ -1,4 +1,4 @@ -import 'package:aves/services/services.dart'; +import 'package:aves/services/common/services.dart'; import 'package:aves/services/storage_service.dart'; import 'package:aves/utils/android_file_utils.dart'; import 'package:path/path.dart' as p; diff --git a/test_driver/app.dart b/test_driver/app.dart index 599100a8c..2eab39143 100644 --- a/test_driver/app.dart +++ b/test_driver/app.dart @@ -3,7 +3,7 @@ import 'dart:ui'; import 'package:aves/main.dart' as app; import 'package:aves/model/settings/enums.dart'; import 'package:aves/model/settings/settings.dart'; -import 'package:aves/services/services.dart'; +import 'package:aves/services/common/services.dart'; import 'package:aves/services/storage_service.dart'; import 'package:aves/services/window_service.dart'; import 'package:flutter/foundation.dart';