* fix(mobile): hide server addresses and tokens in shared logs * fix(mobile): stop writing server urls and oauth values to the log * fix(mobile): redact logs where they are read * fix(mobile): redact logs when they are written * fix(mobile): hide ipv6 addresses and name labels after their settings (cherry picked from commit 89d2de1274a3e1a70a6169f4cfe1feebfb327791)
89 lines
3.7 KiB
Dart
89 lines
3.7 KiB
Dart
import 'package:background_downloader/background_downloader.dart';
|
|
import 'package:immich_mobile/constants/constants.dart';
|
|
import 'package:immich_mobile/data/data_controller.dart';
|
|
import 'package:immich_mobile/domain/models/store.model.dart';
|
|
import 'package:immich_mobile/domain/services/log.service.dart';
|
|
import 'package:immich_mobile/domain/services/store.service.dart';
|
|
import 'package:immich_mobile/entities/store.entity.dart';
|
|
import 'package:immich_mobile/generated/translations.g.dart';
|
|
import 'package:immich_mobile/infrastructure/repositories/log.repository.dart';
|
|
import 'package:immich_mobile/infrastructure/repositories/network.repository.dart';
|
|
import 'package:immich_mobile/infrastructure/repositories/settings.repository.dart';
|
|
import 'package:immich_mobile/services/api.service.dart';
|
|
import 'package:logging/logging.dart';
|
|
import 'package:photo_manager/photo_manager.dart';
|
|
|
|
void configureFileDownloaderNotifications() {
|
|
final t = StaticTranslations.instance;
|
|
|
|
FileDownloader().configureNotificationForGroup(
|
|
kDownloadGroupImage,
|
|
running: TaskNotification(t.downloading_media, '${t.file_name_text}: {filename}'),
|
|
complete: TaskNotification(t.download_finished, '${t.file_name_text}: {filename}'),
|
|
progressBar: true,
|
|
);
|
|
|
|
FileDownloader().configureNotificationForGroup(
|
|
kDownloadGroupVideo,
|
|
running: TaskNotification(t.downloading_media, '${t.file_name_text}: {filename}'),
|
|
complete: TaskNotification(t.download_finished, '${t.file_name_text}: {filename}'),
|
|
progressBar: true,
|
|
);
|
|
|
|
FileDownloader().configureNotificationForGroup(
|
|
kManualUploadGroup,
|
|
running: TaskNotification(t.uploading_media, t.backup_background_service_in_progress_notification),
|
|
complete: TaskNotification(t.upload_finished, t.backup_background_service_complete_notification),
|
|
groupNotificationId: kManualUploadGroup,
|
|
);
|
|
|
|
FileDownloader().configureNotificationForGroup(
|
|
kBackupGroup,
|
|
running: TaskNotification(t.uploading_media, t.backup_background_service_in_progress_notification),
|
|
complete: TaskNotification(t.upload_finished, t.backup_background_service_complete_notification),
|
|
groupNotificationId: kBackupGroup,
|
|
);
|
|
}
|
|
|
|
abstract final class Bootstrap {
|
|
/// Initalize the base data system. Sets up primary/logging DBs, the [ApiService], and the settings store
|
|
///
|
|
/// `disableStoreWatching` prevents continually updating the setting store's cache on change
|
|
static Future<(DataController, ApiService)> initDomain({
|
|
bool shouldBufferLogs = true,
|
|
bool disableStoreWatching = false,
|
|
}) async {
|
|
await NetworkRepository.init();
|
|
|
|
final apiService = ApiService();
|
|
final (dataController, loggerDatabaseWasRecreated) = await DataController.init(
|
|
apiClient: apiService.apiClient,
|
|
disableStoreWatching: disableStoreWatching,
|
|
);
|
|
|
|
final settingsRepo = await SettingsRepository.ensureInitialized(dataController.db);
|
|
|
|
// TODO(rewrite): This is bad DB coupling and should be removed
|
|
final endpoint = Store.tryGet(StoreKey.serverEndpoint);
|
|
if (endpoint != null && endpoint.isNotEmpty) {
|
|
apiService.setEndpoint(endpoint);
|
|
}
|
|
|
|
// Take DataController's logging DB and register it with the logging service
|
|
await LogService.init(
|
|
logRepository: LogRepository(dataController.logDb),
|
|
settingsRepository: settingsRepo,
|
|
storeService: StoreService.I,
|
|
shouldBuffer: shouldBufferLogs,
|
|
);
|
|
|
|
if (loggerDatabaseWasRecreated) {
|
|
Logger('bootstrap:initLogger').warning('Logs database was corrupt and has been recreated');
|
|
}
|
|
|
|
// TODO: Remove once all asset operations are migrated to Native APIs
|
|
await PhotoManager.setIgnorePermissionCheck(true);
|
|
return (dataController, apiService);
|
|
}
|
|
}
|