Merge pull request #26 from ente-io/cf_worker_flag
Add feature flag to enable/disable CF Worker endpoint
This commit is contained in:
commit
69a9a0f67c
|
@ -13,6 +13,7 @@ import 'package:photos/core/network.dart';
|
|||
import 'package:photos/db/upload_locks_db.dart';
|
||||
import 'package:photos/services/billing_service.dart';
|
||||
import 'package:photos/services/collections_service.dart';
|
||||
import 'package:photos/services/feature_flag_service.dart';
|
||||
import 'package:photos/services/local_sync_service.dart';
|
||||
import 'package:photos/services/memories_service.dart';
|
||||
import 'package:photos/services/notification_service.dart';
|
||||
|
@ -142,6 +143,7 @@ Future<void> _init(bool isBackground) async {
|
|||
await RemoteSyncService.instance.init();
|
||||
await SyncService.instance.init();
|
||||
await MemoriesService.instance.init();
|
||||
FeatureFlagService.instance.init();
|
||||
_logger.info("Initialization done");
|
||||
_initializationStatus.complete();
|
||||
}
|
||||
|
|
|
@ -7,6 +7,7 @@ import 'package:photos/core/configuration.dart';
|
|||
import 'package:photos/core/constants.dart';
|
||||
import 'package:photos/models/file_type.dart';
|
||||
import 'package:photos/models/location.dart';
|
||||
import 'package:photos/services/feature_flag_service.dart';
|
||||
import 'package:photos/utils/crypto_util.dart';
|
||||
import 'dart:io' as io;
|
||||
|
||||
|
@ -146,7 +147,7 @@ class File {
|
|||
}
|
||||
|
||||
String getDownloadUrl() {
|
||||
if (kDebugMode) {
|
||||
if (kDebugMode || FeatureFlagService.instance.disableCFWorker()) {
|
||||
return Configuration.instance.getHttpEndpoint() +
|
||||
"/files/download/" +
|
||||
uploadedFileID.toString();
|
||||
|
@ -157,7 +158,7 @@ class File {
|
|||
}
|
||||
|
||||
String getThumbnailUrl() {
|
||||
if (kDebugMode) {
|
||||
if (kDebugMode || FeatureFlagService.instance.disableCFWorker()) {
|
||||
return Configuration.instance.getHttpEndpoint() +
|
||||
"/files/preview/" +
|
||||
uploadedFileID.toString();
|
||||
|
|
79
lib/services/feature_flag_service.dart
Normal file
79
lib/services/feature_flag_service.dart
Normal file
|
@ -0,0 +1,79 @@
|
|||
import 'dart:convert';
|
||||
|
||||
import 'package:logging/logging.dart';
|
||||
import 'package:photos/core/network.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
|
||||
class FeatureFlagService {
|
||||
FeatureFlagService._privateConstructor();
|
||||
|
||||
static final FeatureFlagService instance =
|
||||
FeatureFlagService._privateConstructor();
|
||||
static const kBooleanFeatureFlagsKey = "feature_flags_key";
|
||||
|
||||
final _logger = Logger("FeatureFlagService");
|
||||
FeatureFlags _featureFlags;
|
||||
SharedPreferences _prefs;
|
||||
|
||||
Future<void> init() async {
|
||||
_prefs = await SharedPreferences.getInstance();
|
||||
await sync();
|
||||
}
|
||||
|
||||
bool disableCFWorker() {
|
||||
try {
|
||||
_featureFlags ??=
|
||||
FeatureFlags.fromJson(_prefs.getString(kBooleanFeatureFlagsKey));
|
||||
return _featureFlags != null ? _featureFlags.disableCFWorker : false;
|
||||
} catch (e) {
|
||||
_logger.severe(e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> sync() async {
|
||||
try {
|
||||
final response = await Network.instance
|
||||
.getDio()
|
||||
.get("https://static.ente.io/feature_flags.json");
|
||||
final featureFlags = FeatureFlags.fromMap(response.data);
|
||||
if (featureFlags != null) {
|
||||
_prefs.setString(kBooleanFeatureFlagsKey, featureFlags.toJson());
|
||||
_featureFlags = featureFlags;
|
||||
}
|
||||
} catch (e) {
|
||||
_logger.severe("Failed to sync feature flags ", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class FeatureFlags {
|
||||
bool disableCFWorker = false; // default to false
|
||||
|
||||
FeatureFlags(
|
||||
this.disableCFWorker,
|
||||
);
|
||||
|
||||
@override
|
||||
Map<String, dynamic> toMap() {
|
||||
return {
|
||||
"disableCFWorker": disableCFWorker,
|
||||
};
|
||||
}
|
||||
|
||||
String toJson() => json.encode(toMap());
|
||||
|
||||
factory FeatureFlags.fromJson(String source) =>
|
||||
FeatureFlags.fromMap(json.decode(source));
|
||||
|
||||
factory FeatureFlags.fromMap(Map<String, dynamic> json) {
|
||||
return FeatureFlags(
|
||||
json["disableCFWorker"] ?? false,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return toMap().toString();
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue