Merge pull request #26 from ente-io/cf_worker_flag

Add feature flag to enable/disable CF Worker endpoint
This commit is contained in:
Neeraj Gupta 2021-08-24 13:04:24 +05:30 committed by GitHub
commit 69a9a0f67c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 84 additions and 2 deletions

View file

@ -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();
}

View file

@ -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();

View 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();
}
}