diff --git a/.gitattributes b/.gitattributes
index 97edf4bb9..ed83b8a5c 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -1,2 +1,3 @@
lib/generated/intl/messages_*.dart linguist-generated=true
lib/generated/l10n.dart linguist-generated=true
+lib/models/protos/*.dart linguist-generated=true
diff --git a/README.md b/README.md
index ebcd1164a..ae80d621f 100644
--- a/README.md
+++ b/README.md
@@ -71,6 +71,12 @@ You can alternatively install the build from PlayStore or F-Droid.
8. For iOS, run `flutter build ios`
+### Proto
+ - Install `protoc` (on macOS, `brew install protobuf`)
+ - Install `https://pub.dev/packages/protoc_plugin` plugin.
+ - Add `protoc-gen-dart` to your `PATH` (on macOS, `export PATH="$PATH":"$HOME/.pub-cache/bin"`)
+ - Run `protoc --dart_out=lib/models/protos -Iprotos protos/*.proto`
+
## 🙋 Help
We provide human support to our customers. Please write to [support@ente.io](mailto:support@ente.io) sharing as many details as possible about whatever it is that you need help with, and we will get back to you as soon as possible.
diff --git a/lib/generated/intl/messages_en.dart b/lib/generated/intl/messages_en.dart
index 31e051123..b8527afc3 100644
--- a/lib/generated/intl/messages_en.dart
+++ b/lib/generated/intl/messages_en.dart
@@ -347,6 +347,7 @@ class MessageLookup extends MessageLookupByLibrary {
"claimed": MessageLookupByLibrary.simpleMessage("Claimed"),
"claimedStorageSoFar": m2,
"clearCaches": MessageLookupByLibrary.simpleMessage("Clear caches"),
+ "clearIndexes": MessageLookupByLibrary.simpleMessage("Clear indexes"),
"click": MessageLookupByLibrary.simpleMessage("• Click"),
"clickOnTheOverflowMenu": MessageLookupByLibrary.simpleMessage(
"• Click on the overflow menu"),
@@ -526,6 +527,10 @@ class MessageLookup extends MessageLookupByLibrary {
MessageLookupByLibrary.simpleMessage("Email your logs"),
"empty": MessageLookupByLibrary.simpleMessage("Empty"),
"emptyTrash": MessageLookupByLibrary.simpleMessage("Empty trash?"),
+ "enableMLWarning": MessageLookupByLibrary.simpleMessage(
+ "Please note that this will result in a higher bandwidth and battery usage until all items are indexed."),
+ "enableMachineLearning":
+ MessageLookupByLibrary.simpleMessage("Enable machine learning"),
"encryptingBackup":
MessageLookupByLibrary.simpleMessage("Encrypting backup..."),
"encryption": MessageLookupByLibrary.simpleMessage("Encryption"),
@@ -650,6 +655,7 @@ class MessageLookup extends MessageLookupByLibrary {
"The recovery key you entered is incorrect"),
"incorrectRecoveryKeyTitle":
MessageLookupByLibrary.simpleMessage("Incorrect recovery key"),
+ "indexedItems": MessageLookupByLibrary.simpleMessage("Indexed items"),
"insecureDevice":
MessageLookupByLibrary.simpleMessage("Insecure device"),
"installManually":
@@ -740,6 +746,8 @@ class MessageLookup extends MessageLookupByLibrary {
MessageLookupByLibrary.simpleMessage(
"Long-press on an item to view in full-screen"),
"lostDevice": MessageLookupByLibrary.simpleMessage("Lost device?"),
+ "machineLearning":
+ MessageLookupByLibrary.simpleMessage("Machine learning"),
"manage": MessageLookupByLibrary.simpleMessage("Manage"),
"manageDeviceStorage":
MessageLookupByLibrary.simpleMessage("Manage device storage"),
@@ -1075,6 +1083,7 @@ class MessageLookup extends MessageLookupByLibrary {
"Sorry, we could not generate secure keys on this device.\n\nplease sign up from a different device."),
"sparkleSuccess": MessageLookupByLibrary.simpleMessage("✨ Success"),
"startBackup": MessageLookupByLibrary.simpleMessage("Start backup"),
+ "status": MessageLookupByLibrary.simpleMessage("Status"),
"storage": MessageLookupByLibrary.simpleMessage("Storage"),
"storageBreakupFamily": MessageLookupByLibrary.simpleMessage("Family"),
"storageBreakupYou": MessageLookupByLibrary.simpleMessage("You"),
@@ -1182,6 +1191,8 @@ class MessageLookup extends MessageLookupByLibrary {
MessageLookupByLibrary.simpleMessage("Unhide to album"),
"unhidingFilesToAlbum":
MessageLookupByLibrary.simpleMessage("Unhiding files to album"),
+ "unindexedItems":
+ MessageLookupByLibrary.simpleMessage("Unindexed items"),
"unlock": MessageLookupByLibrary.simpleMessage("Unlock"),
"unselectAll": MessageLookupByLibrary.simpleMessage("Unselect all"),
"update": MessageLookupByLibrary.simpleMessage("Update"),
diff --git a/lib/generated/l10n.dart b/lib/generated/l10n.dart
index 6e22e786f..f0b048e97 100644
--- a/lib/generated/l10n.dart
+++ b/lib/generated/l10n.dart
@@ -6807,6 +6807,76 @@ class S {
);
}
+ /// `Machine learning`
+ String get machineLearning {
+ return Intl.message(
+ 'Machine learning',
+ name: 'machineLearning',
+ desc: '',
+ args: [],
+ );
+ }
+
+ /// `Status`
+ String get status {
+ return Intl.message(
+ 'Status',
+ name: 'status',
+ desc: '',
+ args: [],
+ );
+ }
+
+ /// `Clear indexes`
+ String get clearIndexes {
+ return Intl.message(
+ 'Clear indexes',
+ name: 'clearIndexes',
+ desc: '',
+ args: [],
+ );
+ }
+
+ /// `Indexed items`
+ String get indexedItems {
+ return Intl.message(
+ 'Indexed items',
+ name: 'indexedItems',
+ desc: '',
+ args: [],
+ );
+ }
+
+ /// `Unindexed items`
+ String get unindexedItems {
+ return Intl.message(
+ 'Unindexed items',
+ name: 'unindexedItems',
+ desc: '',
+ args: [],
+ );
+ }
+
+ /// `Enable machine learning`
+ String get enableMachineLearning {
+ return Intl.message(
+ 'Enable machine learning',
+ name: 'enableMachineLearning',
+ desc: '',
+ args: [],
+ );
+ }
+
+ /// `Please note that this will result in a higher bandwidth and battery usage until all items are indexed.`
+ String get enableMLWarning {
+ return Intl.message(
+ 'Please note that this will result in a higher bandwidth and battery usage until all items are indexed.',
+ name: 'enableMLWarning',
+ desc: '',
+ args: [],
+ );
+ }
+
/// `km`
String get distanceInKMUnit {
return Intl.message(
diff --git a/lib/l10n/intl_en.arb b/lib/l10n/intl_en.arb
index 06660d33f..a26c920e1 100644
--- a/lib/l10n/intl_en.arb
+++ b/lib/l10n/intl_en.arb
@@ -955,6 +955,13 @@
"saving": "Saving...",
"editsSaved": "Edits saved",
"oopsCouldNotSaveEdits": "Oops, could not save edits",
+ "machineLearning": "Machine learning",
+ "status": "Status",
+ "clearIndexes": "Clear indexes",
+ "indexedItems": "Indexed items",
+ "unindexedItems": "Unindexed items",
+ "enableMachineLearning": "Enable machine learning",
+ "enableMLWarning": "Please note that this will result in a higher bandwidth and battery usage until all items are indexed.",
"distanceInKMUnit": "km",
"@distanceInKMUnit": {
"description": "Unit for distance in km"
diff --git a/lib/models/protos/labels.pb.dart b/lib/models/protos/labels.pb.dart
new file mode 100644
index 000000000..15a50de97
--- /dev/null
+++ b/lib/models/protos/labels.pb.dart
@@ -0,0 +1,113 @@
+///
+// Generated code. Do not modify.
+// source: labels.proto
+//
+// @dart = 2.12
+// ignore_for_file: annotate_overrides,camel_case_types,constant_identifier_names,directives_ordering,library_prefixes,non_constant_identifier_names,prefer_final_fields,return_of_invalid_type,unnecessary_const,unnecessary_import,unnecessary_this,unused_import,unused_shown_name
+
+import 'dart:core' as $core;
+
+import 'package:protobuf/protobuf.dart' as $pb;
+
+class Label extends $pb.GeneratedMessage {
+ static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'Label', createEmptyInstance: create)
+ ..aOS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'name')
+ ..a<$core.double>(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'score', $pb.PbFieldType.OF)
+ ..hasRequiredFields = false
+ ;
+
+ Label._() : super();
+ factory Label({
+ $core.String? name,
+ $core.double? score,
+ }) {
+ final _result = create();
+ if (name != null) {
+ _result.name = name;
+ }
+ if (score != null) {
+ _result.score = score;
+ }
+ return _result;
+ }
+ factory Label.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+ factory Label.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+ @$core.Deprecated(
+ 'Using this can add significant overhead to your binary. '
+ 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+ 'Will be removed in next major version')
+ Label clone() => Label()..mergeFromMessage(this);
+ @$core.Deprecated(
+ 'Using this can add significant overhead to your binary. '
+ 'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+ 'Will be removed in next major version')
+ Label copyWith(void Function(Label) updates) => super.copyWith((message) => updates(message as Label)) as Label; // ignore: deprecated_member_use
+ $pb.BuilderInfo get info_ => _i;
+ @$core.pragma('dart2js:noInline')
+ static Label create() => Label._();
+ Label createEmptyInstance() => create();
+ static $pb.PbList