@@ -22,7 +22,6 @@ import 'package:photos/events/user_logged_out_event.dart';
|
||||
import 'package:photos/models/key_attributes.dart';
|
||||
import 'package:photos/models/key_gen_result.dart';
|
||||
import 'package:photos/models/private_key_attributes.dart';
|
||||
import 'package:photos/services/billing_service.dart';
|
||||
import 'package:photos/services/collections_service.dart';
|
||||
import 'package:photos/services/favorites_service.dart';
|
||||
import "package:photos/services/home_widget_service.dart";
|
||||
@@ -216,7 +215,6 @@ class Configuration {
|
||||
CollectionsService.instance.clearCache();
|
||||
FavoritesService.instance.clearCache();
|
||||
MemoriesService.instance.clearCache();
|
||||
BillingService.instance.clearCache();
|
||||
SearchService.instance.clearCache();
|
||||
unawaited(HomeWidgetService.instance.clearHomeWidget());
|
||||
Bus.instance.fire(UserLoggedOutEvent());
|
||||
|
||||
@@ -13,4 +13,5 @@ enum LocTagEventType {
|
||||
add,
|
||||
update,
|
||||
delete,
|
||||
dataSetLoaded,
|
||||
}
|
||||
|
||||
@@ -28,28 +28,23 @@ import "package:photos/extensions/stop_watch.dart";
|
||||
import "package:photos/l10n/l10n.dart";
|
||||
import "package:photos/service_locator.dart";
|
||||
import 'package:photos/services/app_lifecycle_service.dart';
|
||||
import 'package:photos/services/billing_service.dart';
|
||||
import 'package:photos/services/collections_service.dart';
|
||||
import 'package:photos/services/favorites_service.dart';
|
||||
import "package:photos/services/filedata/filedata_service.dart";
|
||||
import 'package:photos/services/home_widget_service.dart';
|
||||
import 'package:photos/services/local_file_update_service.dart';
|
||||
import 'package:photos/services/local_sync_service.dart';
|
||||
import "package:photos/services/location_service.dart";
|
||||
import "package:photos/services/machine_learning/face_ml/person/person_service.dart";
|
||||
import "package:photos/services/machine_learning/machine_learning_controller.dart";
|
||||
import 'package:photos/services/machine_learning/ml_service.dart';
|
||||
import 'package:photos/services/machine_learning/semantic_search/semantic_search_service.dart';
|
||||
import "package:photos/services/magic_cache_service.dart";
|
||||
import 'package:photos/services/memories_service.dart';
|
||||
import "package:photos/services/notification_service.dart";
|
||||
import 'package:photos/services/push_service.dart';
|
||||
import 'package:photos/services/remote_sync_service.dart';
|
||||
import 'package:photos/services/search_service.dart';
|
||||
import 'package:photos/services/sync_service.dart';
|
||||
import 'package:photos/services/trash_sync_service.dart';
|
||||
import 'package:photos/services/user_remote_flag_service.dart';
|
||||
import 'package:photos/services/user_service.dart';
|
||||
import "package:photos/services/sync_service.dart";
|
||||
import "package:photos/services/user_service.dart";
|
||||
import 'package:photos/ui/tools/app_lock.dart';
|
||||
import 'package:photos/ui/tools/lock_screen.dart';
|
||||
import 'package:photos/utils/crypto_util.dart';
|
||||
@@ -246,18 +241,6 @@ Future<void> _init(bool isBackground, {String via = ''}) async {
|
||||
await UserService.instance.init();
|
||||
_logger.info("UserService init done $tlog");
|
||||
|
||||
_logger.info("LocationService init $tlog");
|
||||
LocationService.instance.init(preferences);
|
||||
_logger.info("LocationService init done $tlog");
|
||||
|
||||
_logger.info("UserRemoteFlagService init $tlog");
|
||||
await UserRemoteFlagService.instance.init();
|
||||
_logger.info("UserRemoteFlagService init done $tlog");
|
||||
|
||||
_logger.info("BillingService init $tlog");
|
||||
BillingService.instance.init();
|
||||
_logger.info("BillingService init done $tlog");
|
||||
|
||||
_logger.info("CollectionsService init $tlog");
|
||||
await CollectionsService.instance.init(preferences);
|
||||
_logger.info("CollectionsService init done $tlog");
|
||||
@@ -272,7 +255,6 @@ Future<void> _init(bool isBackground, {String via = ''}) async {
|
||||
await LocalSyncService.instance.init(preferences);
|
||||
_logger.info("LocalSyncService init done $tlog");
|
||||
|
||||
TrashSyncService.instance.init(preferences);
|
||||
RemoteSyncService.instance.init(preferences);
|
||||
|
||||
_logger.info("SyncService init $tlog");
|
||||
@@ -301,7 +283,6 @@ Future<void> _init(bool isBackground, {String via = ''}) async {
|
||||
_logger.info("PushService/HomeWidget done $tlog");
|
||||
unawaited(SemanticSearchService.instance.init());
|
||||
MachineLearningController.instance.init();
|
||||
|
||||
_logger.info("MachineLearningController done $tlog");
|
||||
unawaited(MLService.instance.init());
|
||||
PersonService.init(
|
||||
@@ -309,8 +290,6 @@ Future<void> _init(bool isBackground, {String via = ''}) async {
|
||||
MLDataDB.instance,
|
||||
preferences,
|
||||
);
|
||||
MagicCacheService.instance.init(preferences);
|
||||
|
||||
initComplete = true;
|
||||
_logger.info("Initialization done $tlog");
|
||||
} catch (e, s) {
|
||||
|
||||
@@ -4,9 +4,14 @@ import "package:ente_cast_normal/ente_cast_normal.dart";
|
||||
import "package:ente_feature_flag/ente_feature_flag.dart";
|
||||
import "package:package_info_plus/package_info_plus.dart";
|
||||
import "package:photos/gateways/entity_gw.dart";
|
||||
import "package:photos/services/billing_service.dart";
|
||||
import "package:photos/services/entity_service.dart";
|
||||
import "package:photos/services/location_service.dart";
|
||||
import "package:photos/services/magic_cache_service.dart";
|
||||
import "package:photos/services/storage_bonus_service.dart";
|
||||
import "package:photos/services/trash_sync_service.dart";
|
||||
import "package:photos/services/update_service.dart";
|
||||
import "package:photos/services/user_remote_flag_service.dart";
|
||||
import "package:photos/utils/local_settings.dart";
|
||||
import "package:shared_preferences/shared_preferences.dart";
|
||||
|
||||
@@ -78,3 +83,43 @@ EntityService get entityService {
|
||||
);
|
||||
return _entityService!;
|
||||
}
|
||||
|
||||
TrashSyncService? _trashSyncService;
|
||||
TrashSyncService get trashSyncService {
|
||||
_trashSyncService ??= TrashSyncService(
|
||||
ServiceLocator.instance.prefs,
|
||||
ServiceLocator.instance.enteDio,
|
||||
);
|
||||
return _trashSyncService!;
|
||||
}
|
||||
|
||||
LocationService? _locationService;
|
||||
LocationService get locationService {
|
||||
_locationService ??= LocationService(ServiceLocator.instance.prefs);
|
||||
return _locationService!;
|
||||
}
|
||||
|
||||
UserRemoteFlagService? _userRemoteFlagService;
|
||||
UserRemoteFlagService get userRemoteFlagService {
|
||||
_userRemoteFlagService ??= UserRemoteFlagService(
|
||||
ServiceLocator.instance.enteDio,
|
||||
ServiceLocator.instance.prefs,
|
||||
);
|
||||
return _userRemoteFlagService!;
|
||||
}
|
||||
|
||||
MagicCacheService? _magicCacheService;
|
||||
MagicCacheService get magicCacheService {
|
||||
_magicCacheService ??= MagicCacheService(
|
||||
ServiceLocator.instance.prefs,
|
||||
);
|
||||
return _magicCacheService!;
|
||||
}
|
||||
|
||||
BillingService? _billingService;
|
||||
BillingService get billingService {
|
||||
_billingService ??= BillingService(
|
||||
ServiceLocator.instance.enteDio,
|
||||
);
|
||||
return _billingService!;
|
||||
}
|
||||
|
||||
@@ -7,7 +7,6 @@ import 'package:flutter/material.dart';
|
||||
import 'package:in_app_purchase/in_app_purchase.dart';
|
||||
import 'package:logging/logging.dart';
|
||||
import 'package:photos/core/errors.dart';
|
||||
import 'package:photos/core/network/network.dart';
|
||||
import "package:photos/generated/l10n.dart";
|
||||
import 'package:photos/models/billing_plan.dart';
|
||||
import 'package:photos/models/subscription.dart';
|
||||
@@ -32,16 +31,16 @@ const kFamilyPlanManagementUrl = String.fromEnvironment(
|
||||
);
|
||||
|
||||
class BillingService {
|
||||
BillingService._privateConstructor();
|
||||
|
||||
static final BillingService instance = BillingService._privateConstructor();
|
||||
|
||||
final _logger = Logger("BillingService");
|
||||
final _enteDio = NetworkClient.instance.enteDio;
|
||||
late final _logger = Logger("BillingService");
|
||||
final Dio _enteDio;
|
||||
|
||||
bool _isOnSubscriptionPage = false;
|
||||
|
||||
Future<BillingPlans>? _future;
|
||||
BillingService(this._enteDio) {
|
||||
_logger.finest("BillingService constructor");
|
||||
init();
|
||||
}
|
||||
|
||||
void init() {
|
||||
// if (Platform.isIOS && kDebugMode) {
|
||||
|
||||
@@ -3,6 +3,7 @@ import "dart:io";
|
||||
import "dart:math";
|
||||
|
||||
import "package:computer/computer.dart";
|
||||
import "package:flutter/foundation.dart";
|
||||
import "package:logging/logging.dart";
|
||||
import "package:photos/core/constants.dart";
|
||||
import "package:photos/core/event_bus.dart";
|
||||
@@ -18,21 +19,23 @@ import "package:photos/services/remote_assets_service.dart";
|
||||
import "package:shared_preferences/shared_preferences.dart";
|
||||
|
||||
class LocationService {
|
||||
late SharedPreferences prefs;
|
||||
final SharedPreferences prefs;
|
||||
final Logger _logger = Logger((LocationService).toString());
|
||||
final Computer _computer = Computer.shared();
|
||||
|
||||
LocationService._privateConstructor();
|
||||
|
||||
static final LocationService instance = LocationService._privateConstructor();
|
||||
// If the discovery section is loaded before the cities are loaded, then we
|
||||
// need to refresh the discovery section after the cities are loaded.
|
||||
bool reloadLocationDiscoverySection = false;
|
||||
|
||||
static const kCitiesRemotePath = "https://static.ente.io/world_cities.json";
|
||||
|
||||
List<City> _cities = [];
|
||||
|
||||
void init(SharedPreferences preferences) {
|
||||
prefs = preferences;
|
||||
_loadCities();
|
||||
LocationService(this.prefs) {
|
||||
debugPrint('LocationService constructor');
|
||||
Future.delayed(const Duration(seconds: 3), () {
|
||||
_loadCities();
|
||||
});
|
||||
}
|
||||
|
||||
Future<Iterable<LocalEntity<LocationTag>>> _getStoredLocationTags() async {
|
||||
@@ -46,6 +49,9 @@ class LocationService {
|
||||
List<EnteFile> allFiles,
|
||||
String query,
|
||||
) async {
|
||||
if (allFiles.isEmpty && query.isEmpty) {
|
||||
reloadLocationDiscoverySection = true;
|
||||
}
|
||||
final EnteWatch w = EnteWatch("cities_search")..start();
|
||||
w.log('start for files ${allFiles.length} and query $query');
|
||||
final result = await _computer.compute(
|
||||
@@ -223,9 +229,13 @@ class LocationService {
|
||||
await _computer.compute(parseCities, param: {"filePath": file.path});
|
||||
final endTime = DateTime.now();
|
||||
_logger.info(
|
||||
"Loaded cities in ${(endTime.millisecondsSinceEpoch - startTime.millisecondsSinceEpoch)}ms",
|
||||
"Loaded cities in ${(endTime.millisecondsSinceEpoch - startTime.millisecondsSinceEpoch)}ms, reloadingDiscovery: $reloadLocationDiscoverySection",
|
||||
);
|
||||
_logger.info("Loaded cities");
|
||||
if (reloadLocationDiscoverySection) {
|
||||
reloadLocationDiscoverySection = false;
|
||||
Bus.instance
|
||||
.fire(LocationTagUpdatedEvent(LocTagEventType.dataSetLoaded));
|
||||
}
|
||||
} catch (e, s) {
|
||||
_logger.severe("Failed to load cities", e, s);
|
||||
}
|
||||
|
||||
@@ -27,7 +27,6 @@ import "package:photos/services/machine_learning/ml_indexing_isolate.dart";
|
||||
import 'package:photos/services/machine_learning/ml_result.dart';
|
||||
import "package:photos/services/machine_learning/semantic_search/clip/clip_image_encoder.dart";
|
||||
import "package:photos/services/machine_learning/semantic_search/semantic_search_service.dart";
|
||||
import "package:photos/services/magic_cache_service.dart";
|
||||
import "package:photos/utils/ml_util.dart";
|
||||
import "package:photos/utils/network_util.dart";
|
||||
import "package:synchronized/synchronized.dart";
|
||||
@@ -133,7 +132,7 @@ class MLService {
|
||||
}
|
||||
if (_mlControllerStatus == true) {
|
||||
// refresh discover section
|
||||
MagicCacheService.instance.updateCache(forced: force).ignore();
|
||||
magicCacheService.updateCache(forced: force).ignore();
|
||||
}
|
||||
await indexAllImages();
|
||||
if ((await MLDataDB.instance.getUnclusteredFaceCount()) > 0) {
|
||||
@@ -141,7 +140,7 @@ class MLService {
|
||||
}
|
||||
if (_mlControllerStatus == true) {
|
||||
// refresh discover section
|
||||
MagicCacheService.instance.updateCache().ignore();
|
||||
magicCacheService.updateCache().ignore();
|
||||
}
|
||||
} catch (e, s) {
|
||||
_logger.severe("runAllML failed", e, s);
|
||||
@@ -213,7 +212,7 @@ class MLService {
|
||||
fileAnalyzedCount += sumFutures;
|
||||
}
|
||||
if (fileAnalyzedCount > 0) {
|
||||
MagicCacheService.instance.queueUpdate('fileIndexed');
|
||||
magicCacheService.queueUpdate('fileIndexed');
|
||||
}
|
||||
_logger.info(
|
||||
"`indexAllImages()` finished. Analyzed $fileAnalyzedCount images, in ${stopwatch.elapsed.inSeconds} seconds (avg of ${stopwatch.elapsed.inSeconds / fileAnalyzedCount} seconds per image)",
|
||||
|
||||
@@ -155,29 +155,26 @@ class MagicCacheService {
|
||||
/// lot of other things are happening.
|
||||
static const _kCacheUpdateDelay = Duration(seconds: 10);
|
||||
|
||||
late SharedPreferences _prefs;
|
||||
final Logger _logger = Logger((MagicCacheService).toString());
|
||||
MagicCacheService._privateConstructor();
|
||||
final SharedPreferences _prefs;
|
||||
late final Logger _logger = Logger((MagicCacheService).toString());
|
||||
|
||||
Future<List<MagicCache>>? _magicCacheFuture;
|
||||
Future<List<Prompt>>? _promptFuture;
|
||||
final Set<String> _pendingUpdateReason = {};
|
||||
bool _isUpdateInProgress = false;
|
||||
|
||||
static final MagicCacheService instance =
|
||||
MagicCacheService._privateConstructor();
|
||||
|
||||
void init(SharedPreferences preferences) {
|
||||
_logger.info("Initializing MagicCacheService");
|
||||
_prefs = preferences;
|
||||
Future.delayed(_kCacheUpdateDelay, () {
|
||||
_updateCacheIfTheTimeHasCome();
|
||||
});
|
||||
MagicCacheService(this._prefs) {
|
||||
_logger.fine("MagicCacheService constructor");
|
||||
Bus.instance.on<FileUploadedEvent>().listen((event) {
|
||||
queueUpdate("File uploaded");
|
||||
});
|
||||
Future.delayed(_kCacheUpdateDelay, () {
|
||||
_updateCacheIfTheTimeHasCome();
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
Future<void> _resetLastMagicCacheUpdateTime() async {
|
||||
await _prefs.setInt(
|
||||
_lastMagicCacheUpdateTime,
|
||||
|
||||
@@ -30,7 +30,6 @@ import 'package:photos/services/ignored_files_service.dart';
|
||||
import 'package:photos/services/local_file_update_service.dart';
|
||||
import "package:photos/services/notification_service.dart";
|
||||
import 'package:photos/services/sync_service.dart';
|
||||
import 'package:photos/services/trash_sync_service.dart';
|
||||
import 'package:photos/utils/diff_fetcher.dart';
|
||||
import 'package:photos/utils/file_uploader.dart';
|
||||
import 'package:photos/utils/file_util.dart';
|
||||
@@ -121,7 +120,7 @@ class RemoteSyncService {
|
||||
await syncDeviceCollectionFilesForUpload();
|
||||
}
|
||||
await _pullDiff();
|
||||
await TrashSyncService.instance.syncTrash();
|
||||
await trashSyncService.syncTrash();
|
||||
if (!hasSyncedBefore) {
|
||||
await _prefs.setBool(_isFirstRemoteSyncDone, true);
|
||||
await syncDeviceCollectionFilesForUpload();
|
||||
|
||||
@@ -32,7 +32,6 @@ import "package:photos/services/location_service.dart";
|
||||
import "package:photos/services/machine_learning/face_ml/face_filtering/face_filtering_constants.dart";
|
||||
import "package:photos/services/machine_learning/face_ml/person/person_service.dart";
|
||||
import 'package:photos/services/machine_learning/semantic_search/semantic_search_service.dart';
|
||||
import "package:photos/services/magic_cache_service.dart";
|
||||
import "package:photos/states/location_screen_state.dart";
|
||||
import "package:photos/ui/viewer/location/add_location_sheet.dart";
|
||||
import "package:photos/ui/viewer/location/location_screen.dart";
|
||||
@@ -181,7 +180,7 @@ class SearchService {
|
||||
BuildContext context,
|
||||
) async {
|
||||
if (localSettings.isMLIndexingEnabled) {
|
||||
return MagicCacheService.instance.getMagicGenericSearchResult(context);
|
||||
return magicCacheService.getMagicGenericSearchResult(context);
|
||||
} else {
|
||||
return <GenericSearchResult>[];
|
||||
}
|
||||
@@ -634,8 +633,7 @@ class SearchService {
|
||||
}
|
||||
|
||||
Future<List<GenericSearchResult>> getLocationResults(String query) async {
|
||||
final locationTagEntities =
|
||||
(await LocationService.instance.getLocationTags());
|
||||
final locationTagEntities = (await locationService.getLocationTags());
|
||||
final Map<LocalEntity<LocationTag>, List<EnteFile>> result = {};
|
||||
final bool showNoLocationTag = query.length > 2 &&
|
||||
"No Location Tag".toLowerCase().startsWith(query.toLowerCase());
|
||||
@@ -720,8 +718,7 @@ class SearchService {
|
||||
if (allCitiesSearch) {
|
||||
query = '';
|
||||
}
|
||||
final results =
|
||||
await LocationService.instance.getFilesInCity(allFiles, query);
|
||||
final results = await locationService.getFilesInCity(allFiles, query);
|
||||
final List<City> sortedByResultCount = results.keys.toList()
|
||||
..sort((a, b) => results[b]!.length.compareTo(results[a]!.length));
|
||||
for (final city in sortedByResultCount) {
|
||||
@@ -912,8 +909,7 @@ class SearchService {
|
||||
try {
|
||||
final Map<LocalEntity<LocationTag>, List<EnteFile>> tagToItemsMap = {};
|
||||
final List<GenericSearchResult> tagSearchResults = [];
|
||||
final locationTagEntities =
|
||||
(await LocationService.instance.getLocationTags());
|
||||
final locationTagEntities = (await locationService.getLocationTags());
|
||||
final allFiles = await getAllFiles();
|
||||
final List<EnteFile> filesWithNoLocTag = [];
|
||||
|
||||
@@ -969,8 +965,8 @@ class SearchService {
|
||||
}
|
||||
}
|
||||
if (limit == null || tagSearchResults.length < limit) {
|
||||
final results = await LocationService.instance
|
||||
.getFilesInCity(filesWithNoLocTag, '');
|
||||
final results =
|
||||
await locationService.getFilesInCity(filesWithNoLocTag, '');
|
||||
final List<City> sortedByResultCount = results.keys.toList()
|
||||
..sort((a, b) => results[b]!.length.compareTo(results[a]!.length));
|
||||
for (final city in sortedByResultCount) {
|
||||
|
||||
@@ -4,7 +4,6 @@ import 'package:dio/dio.dart';
|
||||
import 'package:logging/logging.dart';
|
||||
import 'package:photos/core/constants.dart';
|
||||
import 'package:photos/core/event_bus.dart';
|
||||
import 'package:photos/core/network/network.dart';
|
||||
import 'package:photos/db/trash_db.dart';
|
||||
import 'package:photos/events/collection_updated_event.dart';
|
||||
import 'package:photos/events/force_reload_trash_page_event.dart';
|
||||
@@ -20,16 +19,16 @@ import 'package:shared_preferences/shared_preferences.dart';
|
||||
|
||||
class TrashSyncService {
|
||||
final _logger = Logger("TrashSyncService");
|
||||
final _diffFetcher = TrashDiffFetcher();
|
||||
final TrashDiffFetcher _diffFetcher;
|
||||
final _trashDB = TrashDB.instance;
|
||||
static const kLastTrashSyncTime = "last_trash_sync_time";
|
||||
late SharedPreferences _prefs;
|
||||
final Dio _enteDio;
|
||||
|
||||
TrashSyncService._privateConstructor();
|
||||
|
||||
static final TrashSyncService instance =
|
||||
TrashSyncService._privateConstructor();
|
||||
final _enteDio = NetworkClient.instance.enteDio;
|
||||
TrashSyncService(this._prefs, this._enteDio)
|
||||
: _diffFetcher = TrashDiffFetcher(_enteDio) {
|
||||
_logger.fine("TrashSyncService constructor");
|
||||
}
|
||||
|
||||
void init(SharedPreferences preferences) {
|
||||
_prefs = preferences;
|
||||
|
||||
@@ -2,23 +2,19 @@ import 'dart:async';
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:collection/collection.dart';
|
||||
import "package:dio/dio.dart";
|
||||
import "package:flutter/foundation.dart";
|
||||
import 'package:logging/logging.dart';
|
||||
import 'package:photos/core/event_bus.dart';
|
||||
import 'package:photos/core/network/network.dart';
|
||||
import 'package:photos/events/notification_event.dart';
|
||||
import "package:photos/service_locator.dart";
|
||||
import 'package:photos/services/user_service.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
|
||||
class UserRemoteFlagService {
|
||||
final _enteDio = NetworkClient.instance.enteDio;
|
||||
final _logger = Logger((UserRemoteFlagService).toString());
|
||||
late SharedPreferences _prefs;
|
||||
|
||||
UserRemoteFlagService._privateConstructor();
|
||||
|
||||
static final UserRemoteFlagService instance =
|
||||
UserRemoteFlagService._privateConstructor();
|
||||
final Dio _enteDio;
|
||||
late final _logger = Logger((UserRemoteFlagService).toString());
|
||||
final SharedPreferences _prefs;
|
||||
|
||||
static const String recoveryVerificationFlag = "recoveryKeyVerified";
|
||||
static const String mapEnabled = "mapEnabled";
|
||||
@@ -26,8 +22,8 @@ class UserRemoteFlagService {
|
||||
static const String needRecoveryKeyVerification =
|
||||
"needRecoveryKeyVerification";
|
||||
|
||||
Future<void> init() async {
|
||||
_prefs = await SharedPreferences.getInstance();
|
||||
UserRemoteFlagService(this._enteDio, this._prefs) {
|
||||
debugPrint("UserRemoteFlagService constructor");
|
||||
}
|
||||
|
||||
bool shouldShowRecoveryVerification() {
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
import 'dart:ui';
|
||||
|
||||
import 'package:bip39/bip39.dart' as bip39;
|
||||
import 'package:dio/dio.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
@@ -8,8 +6,8 @@ import 'package:photos/core/event_bus.dart';
|
||||
import 'package:photos/ente_theme_data.dart';
|
||||
import 'package:photos/events/notification_event.dart';
|
||||
import "package:photos/generated/l10n.dart";
|
||||
import "package:photos/service_locator.dart";
|
||||
import 'package:photos/services/local_authentication_service.dart';
|
||||
import 'package:photos/services/user_remote_flag_service.dart';
|
||||
import 'package:photos/services/user_service.dart';
|
||||
import "package:photos/theme/ente_theme.dart";
|
||||
import 'package:photos/ui/account/recovery_key_page.dart';
|
||||
@@ -42,7 +40,7 @@ class _VerifyRecoveryPageState extends State<VerifyRecoveryPage> {
|
||||
final String recoveryKeyWords = bip39.entropyToMnemonic(recoveryKey);
|
||||
if (inputKey == recoveryKey || inputKey == recoveryKeyWords) {
|
||||
try {
|
||||
await UserRemoteFlagService.instance.markRecoveryVerificationAsDone();
|
||||
await userRemoteFlagService.markRecoveryVerificationAsDone();
|
||||
} catch (e) {
|
||||
await dialog.hide();
|
||||
if (e is DioError && e.type == DioErrorType.other) {
|
||||
|
||||
@@ -8,8 +8,8 @@ import 'package:photos/ente_theme_data.dart';
|
||||
import 'package:photos/events/notification_event.dart';
|
||||
import 'package:photos/events/sync_status_update_event.dart';
|
||||
import "package:photos/generated/l10n.dart";
|
||||
import "package:photos/service_locator.dart";
|
||||
import 'package:photos/services/sync_service.dart';
|
||||
import 'package:photos/services/user_remote_flag_service.dart';
|
||||
import "package:photos/theme/ente_theme.dart";
|
||||
import 'package:photos/theme/text_style.dart';
|
||||
import 'package:photos/ui/account/verify_recovery_page.dart';
|
||||
@@ -112,7 +112,7 @@ class _StatusBarWidgetState extends State<StatusBarWidget> {
|
||||
_showErrorBanner
|
||||
? HeaderErrorWidget(error: _syncError)
|
||||
: const SizedBox.shrink(),
|
||||
UserRemoteFlagService.instance.shouldShowRecoveryVerification() &&
|
||||
userRemoteFlagService.shouldShowRecoveryVerification() &&
|
||||
!_showErrorBanner
|
||||
? Padding(
|
||||
padding:
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import "package:flutter/cupertino.dart";
|
||||
import "package:photos/generated/l10n.dart";
|
||||
import 'package:photos/models/button_result.dart';
|
||||
import "package:photos/service_locator.dart";
|
||||
import "package:photos/services/user_remote_flag_service.dart";
|
||||
import "package:photos/ui/components/buttons/button_widget.dart";
|
||||
import "package:photos/ui/components/dialog_widget.dart";
|
||||
@@ -9,7 +10,7 @@ import "package:photos/utils/toast_util.dart";
|
||||
|
||||
Future<bool> requestForMapEnable(BuildContext context) async {
|
||||
const String flagName = UserRemoteFlagService.mapEnabled;
|
||||
if (UserRemoteFlagService.instance.getCachedBoolValue(flagName)) {
|
||||
if (userRemoteFlagService.getCachedBoolValue(flagName)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -25,7 +26,7 @@ Future<bool> requestForMapEnable(BuildContext context) async {
|
||||
labelText: S.of(context).enableMaps,
|
||||
isInAlert: true,
|
||||
onTap: () async {
|
||||
await UserRemoteFlagService.instance.setBoolValue(
|
||||
await userRemoteFlagService.setBoolValue(
|
||||
flagName,
|
||||
true,
|
||||
);
|
||||
@@ -51,6 +52,5 @@ Future<bool> requestForMapEnable(BuildContext context) async {
|
||||
|
||||
//For debugging.
|
||||
void disableMap() {
|
||||
UserRemoteFlagService.instance
|
||||
.setBoolValue(UserRemoteFlagService.mapEnabled, false);
|
||||
userRemoteFlagService.setBoolValue(UserRemoteFlagService.mapEnabled, false);
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@ import "package:photos/core/constants.dart";
|
||||
import 'package:photos/ente_theme_data.dart';
|
||||
import "package:photos/generated/l10n.dart";
|
||||
import 'package:photos/models/subscription.dart';
|
||||
import "package:photos/service_locator.dart";
|
||||
import 'package:photos/services/billing_service.dart';
|
||||
import 'package:photos/services/user_service.dart';
|
||||
import 'package:photos/ui/common/loading_widget.dart';
|
||||
@@ -29,7 +30,7 @@ class PaymentWebPage extends StatefulWidget {
|
||||
class _PaymentWebPageState extends State<PaymentWebPage> {
|
||||
final _logger = Logger("PaymentWebPageState");
|
||||
final UserService userService = UserService.instance;
|
||||
final BillingService billingService = BillingService.instance;
|
||||
late final BillingService billService = billingService;
|
||||
final String basePaymentUrl = kWebPaymentBaseEndpoint;
|
||||
InAppWebViewController? webView;
|
||||
double progress = 0;
|
||||
@@ -229,7 +230,7 @@ class _PaymentWebPageState extends State<PaymentWebPage> {
|
||||
final checkoutSessionID = queryParams['session_id'] ?? '';
|
||||
try {
|
||||
// ignore: unused_local_variable
|
||||
final response = await billingService.verifySubscription(
|
||||
final response = await billService.verifySubscription(
|
||||
widget.planId,
|
||||
checkoutSessionID,
|
||||
paymentProvider: stripe,
|
||||
|
||||
@@ -12,7 +12,7 @@ import "package:photos/generated/l10n.dart";
|
||||
import 'package:photos/models/billing_plan.dart';
|
||||
import 'package:photos/models/subscription.dart';
|
||||
import 'package:photos/models/user_details.dart';
|
||||
import 'package:photos/services/billing_service.dart';
|
||||
import "package:photos/service_locator.dart";
|
||||
import 'package:photos/services/user_service.dart';
|
||||
import "package:photos/theme/colors.dart";
|
||||
import "package:photos/theme/ente_theme.dart";
|
||||
@@ -46,7 +46,7 @@ class StoreSubscriptionPage extends StatefulWidget {
|
||||
|
||||
class _StoreSubscriptionPageState extends State<StoreSubscriptionPage> {
|
||||
final _logger = Logger("SubscriptionPage");
|
||||
final _billingService = BillingService.instance;
|
||||
late final _billingService = billingService;
|
||||
final _userService = UserService.instance;
|
||||
Subscription? _currentSubscription;
|
||||
late StreamSubscription _purchaseUpdateSubscription;
|
||||
@@ -445,7 +445,7 @@ class _StoreSubscriptionPageState extends State<StoreSubscriptionPage> {
|
||||
(route) => false,
|
||||
);
|
||||
unawaited(
|
||||
BillingService.instance.verifySubscription(
|
||||
_billingService.verifySubscription(
|
||||
freeProductID,
|
||||
"",
|
||||
paymentProvider: "ente",
|
||||
@@ -501,7 +501,7 @@ class _StoreSubscriptionPageState extends State<StoreSubscriptionPage> {
|
||||
(route) => false,
|
||||
);
|
||||
unawaited(
|
||||
BillingService.instance.verifySubscription(
|
||||
_billingService.verifySubscription(
|
||||
freeProductID,
|
||||
"",
|
||||
paymentProvider: "ente",
|
||||
@@ -625,7 +625,7 @@ class _StoreSubscriptionPageState extends State<StoreSubscriptionPage> {
|
||||
(route) => false,
|
||||
);
|
||||
unawaited(
|
||||
BillingService.instance.verifySubscription(
|
||||
_billingService.verifySubscription(
|
||||
freeProductID,
|
||||
"",
|
||||
paymentProvider: "ente",
|
||||
|
||||
@@ -9,7 +9,7 @@ import "package:photos/generated/l10n.dart";
|
||||
import 'package:photos/models/billing_plan.dart';
|
||||
import 'package:photos/models/subscription.dart';
|
||||
import 'package:photos/models/user_details.dart';
|
||||
import 'package:photos/services/billing_service.dart';
|
||||
import "package:photos/service_locator.dart";
|
||||
import 'package:photos/services/user_service.dart';
|
||||
import "package:photos/theme/colors.dart";
|
||||
import 'package:photos/theme/ente_theme.dart';
|
||||
@@ -46,7 +46,7 @@ class StripeSubscriptionPage extends StatefulWidget {
|
||||
}
|
||||
|
||||
class _StripeSubscriptionPageState extends State<StripeSubscriptionPage> {
|
||||
final _billingService = BillingService.instance;
|
||||
late final _billingService = billingService;
|
||||
final _userService = UserService.instance;
|
||||
Subscription? _currentSubscription;
|
||||
late ProgressDialog _dialog;
|
||||
@@ -484,7 +484,7 @@ class _StripeSubscriptionPageState extends State<StripeSubscriptionPage> {
|
||||
(route) => false,
|
||||
);
|
||||
unawaited(
|
||||
BillingService.instance.verifySubscription(
|
||||
_billingService.verifySubscription(
|
||||
freeProductID,
|
||||
"",
|
||||
paymentProvider: "ente",
|
||||
@@ -609,7 +609,7 @@ class _StripeSubscriptionPageState extends State<StripeSubscriptionPage> {
|
||||
(route) => false,
|
||||
);
|
||||
unawaited(
|
||||
BillingService.instance.verifySubscription(
|
||||
_billingService.verifySubscription(
|
||||
freeProductID,
|
||||
"",
|
||||
paymentProvider: "ente",
|
||||
|
||||
@@ -173,19 +173,17 @@ class _AdvancedSettingsScreenState extends State<AdvancedSettingsScreen> {
|
||||
singleBorderRadius: 8,
|
||||
alignCaptionedTextToLeft: true,
|
||||
trailingWidget: ToggleSwitchWidget(
|
||||
value: () => UserRemoteFlagService.instance
|
||||
.getCachedBoolValue(
|
||||
value: () =>
|
||||
userRemoteFlagService.getCachedBoolValue(
|
||||
UserRemoteFlagService.mapEnabled,
|
||||
),
|
||||
onChanged: () async {
|
||||
final isEnabled = UserRemoteFlagService
|
||||
.instance
|
||||
.getCachedBoolValue(
|
||||
final isEnabled =
|
||||
userRemoteFlagService.getCachedBoolValue(
|
||||
UserRemoteFlagService.mapEnabled,
|
||||
);
|
||||
|
||||
await UserRemoteFlagService.instance
|
||||
.setBoolValue(
|
||||
await userRemoteFlagService.setBoolValue(
|
||||
UserRemoteFlagService.mapEnabled,
|
||||
!isEnabled,
|
||||
);
|
||||
|
||||
@@ -11,7 +11,6 @@ import "package:photos/services/machine_learning/face_ml/face_recognition_servic
|
||||
import "package:photos/services/machine_learning/face_ml/person/person_service.dart";
|
||||
import 'package:photos/services/machine_learning/ml_service.dart';
|
||||
import "package:photos/services/machine_learning/semantic_search/semantic_search_service.dart";
|
||||
import "package:photos/services/magic_cache_service.dart";
|
||||
import 'package:photos/theme/ente_theme.dart';
|
||||
import 'package:photos/ui/components/captioned_text_widget.dart';
|
||||
import 'package:photos/ui/components/expandable_menu_item_widget.dart';
|
||||
@@ -239,7 +238,7 @@ class _MLDebugSectionWidgetState extends State<MLDebugSectionWidget> {
|
||||
trailingIconIsMuted: true,
|
||||
onTap: () async {
|
||||
try {
|
||||
await MagicCacheService.instance.updateCache(forced: true);
|
||||
await magicCacheService.updateCache(forced: true);
|
||||
} catch (e, s) {
|
||||
logger.warning('Update discover failed', e, s);
|
||||
await showGenericErrorDialog(context: context, error: e);
|
||||
|
||||
@@ -4,7 +4,7 @@ import 'package:flutter/material.dart';
|
||||
import "package:photos/app.dart";
|
||||
import "package:photos/generated/l10n.dart";
|
||||
import "package:photos/l10n/l10n.dart";
|
||||
import 'package:photos/services/billing_service.dart';
|
||||
import "package:photos/service_locator.dart";
|
||||
import 'package:photos/services/user_service.dart';
|
||||
import 'package:photos/theme/ente_theme.dart';
|
||||
import "package:photos/ui/components/captioned_text_widget.dart";
|
||||
@@ -118,7 +118,7 @@ class GeneralSectionWidget extends StatelessWidget {
|
||||
final userDetails =
|
||||
await UserService.instance.getUserDetailsV2(memoryCount: false);
|
||||
// ignore: unawaited_futures
|
||||
BillingService.instance.launchFamilyPortal(context, userDetails);
|
||||
billingService.launchFamilyPortal(context, userDetails);
|
||||
}
|
||||
|
||||
void _onNotificationsTapped(BuildContext context) {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import "package:flutter/material.dart";
|
||||
import "package:photos/generated/l10n.dart";
|
||||
import "package:photos/service_locator.dart";
|
||||
import "package:photos/services/user_remote_flag_service.dart";
|
||||
import "package:photos/theme/ente_theme.dart";
|
||||
import "package:photos/ui/common/web_page.dart";
|
||||
@@ -140,7 +141,7 @@ class _EnableMachineLearningConsentState
|
||||
|
||||
Future<void> enableMlConsent(BuildContext context) async {
|
||||
try {
|
||||
await UserRemoteFlagService.instance.setBoolValue(
|
||||
await userRemoteFlagService.setBoolValue(
|
||||
UserRemoteFlagService.mlEnabled,
|
||||
true,
|
||||
);
|
||||
|
||||
@@ -210,7 +210,7 @@ class _MachineLearningSettingsPageState
|
||||
}
|
||||
|
||||
Future<void> toggleIndexingState() async {
|
||||
final hasGivenConsent = UserRemoteFlagService.instance
|
||||
final hasGivenConsent = userRemoteFlagService
|
||||
.getCachedBoolValue(UserRemoteFlagService.mlEnabled);
|
||||
if (!localSettings.isMLIndexingEnabled && !hasGivenConsent) {
|
||||
final result = await Navigator.push(
|
||||
@@ -232,8 +232,10 @@ class _MachineLearningSettingsPageState
|
||||
unawaited(MLService.instance.runAllML(force: true));
|
||||
} else {
|
||||
MLService.instance.pauseIndexingAndClustering();
|
||||
await UserRemoteFlagService.instance
|
||||
.setBoolValue(UserRemoteFlagService.mlEnabled, false);
|
||||
await userRemoteFlagService.setBoolValue(
|
||||
UserRemoteFlagService.mlEnabled,
|
||||
false,
|
||||
);
|
||||
}
|
||||
if (mounted) {
|
||||
setState(() {});
|
||||
|
||||
@@ -9,7 +9,7 @@ import "package:photos/core/event_bus.dart";
|
||||
import "package:photos/events/location_tag_updated_event.dart";
|
||||
import "package:photos/generated/l10n.dart";
|
||||
import "package:photos/models/file/file.dart";
|
||||
import "package:photos/services/location_service.dart";
|
||||
import "package:photos/service_locator.dart";
|
||||
import "package:photos/services/search_service.dart";
|
||||
import "package:photos/services/user_remote_flag_service.dart";
|
||||
import "package:photos/states/location_screen_state.dart";
|
||||
@@ -105,8 +105,8 @@ class _LocationTagsWidgetState extends State<LocationTagsWidget> {
|
||||
|
||||
Future<List<Widget>> _getLocationTags() async {
|
||||
// await Future.delayed(const Duration(seconds: 1));
|
||||
final locationTags = await LocationService.instance
|
||||
.enclosingLocationTags(widget.file.location!);
|
||||
final locationTags =
|
||||
await locationService.enclosingLocationTags(widget.file.location!);
|
||||
if (locationTags.isEmpty) {
|
||||
if (mounted) {
|
||||
setState(() {
|
||||
@@ -183,7 +183,7 @@ class _InfoMapState extends State<InfoMap> {
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
_hasEnabledMap = UserRemoteFlagService.instance
|
||||
_hasEnabledMap = userRemoteFlagService
|
||||
.getCachedBoolValue(UserRemoteFlagService.mapEnabled);
|
||||
_fileLat = widget.file.location!.latitude!;
|
||||
_fileLng = widget.file.location!.longitude!;
|
||||
|
||||
@@ -4,7 +4,7 @@ import "package:modal_bottom_sheet/modal_bottom_sheet.dart";
|
||||
import "package:photos/core/constants.dart";
|
||||
import "package:photos/generated/l10n.dart";
|
||||
import "package:photos/models/location/location.dart";
|
||||
import "package:photos/services/location_service.dart";
|
||||
import "package:photos/service_locator.dart";
|
||||
import 'package:photos/states/location_state.dart';
|
||||
import "package:photos/theme/colors.dart";
|
||||
import "package:photos/theme/ente_theme.dart";
|
||||
@@ -255,7 +255,7 @@ class _AddLocationSheetState extends State<AddLocationSheet> {
|
||||
final coordinates = locationData.centerPoint;
|
||||
final radius = locationData.selectedRadius;
|
||||
|
||||
await LocationService.instance.addLocation(
|
||||
await locationService.addLocation(
|
||||
_textEditingController.text.trim(),
|
||||
coordinates,
|
||||
radius,
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import "package:flutter/material.dart";
|
||||
import "package:photos/generated/l10n.dart";
|
||||
import "package:photos/models/location/location.dart";
|
||||
import "package:photos/services/location_service.dart";
|
||||
import "package:photos/service_locator.dart";
|
||||
import "package:photos/states/location_state.dart";
|
||||
import "package:photos/theme/ente_theme.dart";
|
||||
import "package:photos/ui/components/buttons/icon_button_widget.dart";
|
||||
@@ -14,7 +14,7 @@ class EditCenterPointTileWidget extends StatelessWidget {
|
||||
Widget build(BuildContext context) {
|
||||
final textTheme = getEnteTextTheme(context);
|
||||
final colorScheme = getEnteColorScheme(context);
|
||||
final centerPointInDMS = LocationService.instance.convertLocationToDMS(
|
||||
final centerPointInDMS = locationService.convertLocationToDMS(
|
||||
InheritedLocationTagData.of(context).centerPoint,
|
||||
);
|
||||
return Row(
|
||||
|
||||
@@ -5,7 +5,7 @@ import "package:photos/core/constants.dart";
|
||||
import "package:photos/generated/l10n.dart";
|
||||
import "package:photos/models/local_entity_data.dart";
|
||||
import "package:photos/models/location_tag/location_tag.dart";
|
||||
import "package:photos/services/location_service.dart";
|
||||
import "package:photos/service_locator.dart";
|
||||
import "package:photos/states/location_state.dart";
|
||||
import "package:photos/theme/colors.dart";
|
||||
import "package:photos/theme/ente_theme.dart";
|
||||
@@ -244,7 +244,7 @@ class _EditLocationSheetState extends State<EditLocationSheet> {
|
||||
|
||||
Future<void> _editLocation() async {
|
||||
final locationTagState = InheritedLocationTagData.of(context);
|
||||
await LocationService.instance.updateLocationTag(
|
||||
await locationService.updateLocationTag(
|
||||
locationTagEntity: locationTagState.locationTagEntity!,
|
||||
newRadius: locationTagState.selectedRadius,
|
||||
newName: _textEditingController.text.trim(),
|
||||
|
||||
@@ -13,6 +13,7 @@ import 'package:photos/models/file/file.dart';
|
||||
import "package:photos/models/file_load_result.dart";
|
||||
import "package:photos/models/gallery_type.dart";
|
||||
import "package:photos/models/selected_files.dart";
|
||||
import "package:photos/service_locator.dart";
|
||||
import "package:photos/services/collections_service.dart";
|
||||
import "package:photos/services/filter/db_filters.dart";
|
||||
import "package:photos/services/location_service.dart";
|
||||
@@ -118,7 +119,7 @@ class LocationScreenPopUpMenu extends StatelessWidget {
|
||||
);
|
||||
} else if (value == "delete") {
|
||||
try {
|
||||
await LocationService.instance.deleteLocationTag(
|
||||
await locationService.deleteLocationTag(
|
||||
InheritedLocationScreenState.of(context).locationTagEntity.id,
|
||||
);
|
||||
Navigator.of(context).pop();
|
||||
|
||||
@@ -7,8 +7,8 @@ import "package:logging/logging.dart";
|
||||
import "package:photos/generated/l10n.dart";
|
||||
import "package:photos/models/file/file.dart";
|
||||
import "package:photos/models/location/location.dart";
|
||||
import "package:photos/service_locator.dart";
|
||||
import "package:photos/services/files_service.dart";
|
||||
import "package:photos/services/location_service.dart";
|
||||
import "package:photos/theme/effects.dart";
|
||||
import "package:photos/theme/ente_theme.dart";
|
||||
import "package:photos/ui/map/map_button.dart";
|
||||
@@ -97,8 +97,7 @@ class _UpdateLocationDataWidgetState extends State<UpdateLocationDataWidget> {
|
||||
child: ValueListenableBuilder(
|
||||
valueListenable: selectedLocation,
|
||||
builder: (context, value, _) {
|
||||
final locationInDMS =
|
||||
LocationService.instance.convertLocationToDMS(
|
||||
final locationInDMS = locationService.convertLocationToDMS(
|
||||
Location(
|
||||
latitude: value?.latitude,
|
||||
longitude: value?.longitude,
|
||||
|
||||
@@ -17,9 +17,9 @@ import 'package:photos/models/file/file.dart';
|
||||
import "package:photos/models/files_split.dart";
|
||||
import 'package:photos/models/selected_files.dart';
|
||||
import 'package:photos/models/trash_item_request.dart';
|
||||
import "package:photos/service_locator.dart";
|
||||
import 'package:photos/services/remote_sync_service.dart';
|
||||
import 'package:photos/services/sync_service.dart';
|
||||
import 'package:photos/services/trash_sync_service.dart';
|
||||
import 'package:photos/ui/common/linear_progress_dialog.dart';
|
||||
import 'package:photos/ui/components/action_sheet_widget.dart';
|
||||
import 'package:photos/ui/components/buttons/button_widget.dart';
|
||||
@@ -97,8 +97,7 @@ Future<void> deleteFilesFromEverywhere(
|
||||
try {
|
||||
final fileIDs =
|
||||
uploadedFilesToBeTrashed.map((item) => item.fileID).toList();
|
||||
await TrashSyncService.instance
|
||||
.trashFilesOnServer(uploadedFilesToBeTrashed);
|
||||
await trashSyncService.trashFilesOnServer(uploadedFilesToBeTrashed);
|
||||
await FilesDB.instance.deleteMultipleUploadedFiles(fileIDs);
|
||||
} catch (e) {
|
||||
_logger.severe(e);
|
||||
@@ -160,7 +159,7 @@ Future<void> deleteFilesFromRemoteOnly(
|
||||
trashRequests.add(TrashRequest(file.uploadedFileID!, file.collectionID!));
|
||||
}
|
||||
try {
|
||||
await TrashSyncService.instance.trashFilesOnServer(trashRequests);
|
||||
await trashSyncService.trashFilesOnServer(trashRequests);
|
||||
await FilesDB.instance.deleteMultipleUploadedFiles(uploadedFileIDs);
|
||||
} catch (e, s) {
|
||||
_logger.severe("Failed to delete files from remote", e, s);
|
||||
@@ -260,7 +259,7 @@ Future<bool> deleteFromTrash(BuildContext context, List<EnteFile> files) async {
|
||||
firstButtonOnTap: () async {
|
||||
try {
|
||||
didDeletionStart = true;
|
||||
await TrashSyncService.instance.deleteFromTrash(files);
|
||||
await trashSyncService.deleteFromTrash(files);
|
||||
Bus.instance.fire(
|
||||
FilesUpdatedEvent(
|
||||
files,
|
||||
@@ -301,7 +300,7 @@ Future<bool> emptyTrash(BuildContext context) async {
|
||||
isCritical: true,
|
||||
firstButtonOnTap: () async {
|
||||
try {
|
||||
await TrashSyncService.instance.emptyTrash();
|
||||
await trashSyncService.emptyTrash();
|
||||
} catch (e, s) {
|
||||
_logger.info("failed empty trash", e, s);
|
||||
rethrow;
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import 'dart:convert';
|
||||
import 'dart:math';
|
||||
|
||||
import "package:dio/dio.dart";
|
||||
import 'package:logging/logging.dart';
|
||||
import 'package:photos/core/network/network.dart';
|
||||
import 'package:photos/models/file/trash_file.dart';
|
||||
import "package:photos/models/metadata/file_magic.dart";
|
||||
import 'package:photos/utils/crypto_util.dart';
|
||||
@@ -10,7 +10,9 @@ import "package:photos/utils/file_key.dart";
|
||||
|
||||
class TrashDiffFetcher {
|
||||
final _logger = Logger("TrashDiffFetcher");
|
||||
final _enteDio = NetworkClient.instance.enteDio;
|
||||
final Dio _enteDio;
|
||||
|
||||
TrashDiffFetcher(this._enteDio);
|
||||
|
||||
Future<Diff> getTrashFilesDiff(int sinceTime) async {
|
||||
try {
|
||||
|
||||
Reference in New Issue
Block a user