diff --git a/auth/assets/custom-icons/_data/custom-icons.json b/auth/assets/custom-icons/_data/custom-icons.json index c66d286fcf..5f15bba746 100644 --- a/auth/assets/custom-icons/_data/custom-icons.json +++ b/auth/assets/custom-icons/_data/custom-icons.json @@ -86,6 +86,9 @@ { "title": "Discourse" }, + { + "title": "Doppler" + }, { "title": "dus.net", "slug": "dusnet" diff --git a/auth/assets/custom-icons/icons/doppler.svg b/auth/assets/custom-icons/icons/doppler.svg new file mode 100644 index 0000000000..a11a7866b2 --- /dev/null +++ b/auth/assets/custom-icons/icons/doppler.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/auth/lib/l10n/arb/app_pt.arb b/auth/lib/l10n/arb/app_pt.arb index 232c1becfe..52960987f6 100644 --- a/auth/lib/l10n/arb/app_pt.arb +++ b/auth/lib/l10n/arb/app_pt.arb @@ -7,7 +7,7 @@ "description": "Text shown in the AppBar of the Counter Page" }, "onBoardingBody": "Proteja seus códigos 2FA", - "onBoardingGetStarted": "Vamos Começar", + "onBoardingGetStarted": "Introdução", "setupFirstAccount": "Configure sua primeira conta", "importScanQrCode": "Escanear QR code", "qrCode": "QR Code", @@ -32,12 +32,12 @@ "counterBasedKeyType": "Baseado em um contador (HOTP)", "saveAction": "Salvar", "nextTotpTitle": "avançar", - "deleteCodeTitle": "Excluir código?", + "deleteCodeTitle": "Apagar código?", "deleteCodeMessage": "Tem certeza de que deseja excluir este código? Esta ação é irreversível.", "viewLogsAction": "Ver logs", "sendLogsDescription": "Isto irá compartilhar seus logs para nos ajudar a depurar seu problema. Embora tomemos precauções para garantir que informações sensíveis não sejam enviadas, encorajamos você a ver esses logs antes de compartilhá-los.", "preparingLogsTitle": "Preparando logs...", - "emailLogsTitle": "Logs por e-mail", + "emailLogsTitle": "Logs (e-mail)", "emailLogsMessage": "Por favor, envie os logs para {email}", "@emailLogsMessage": { "placeholders": { @@ -48,9 +48,9 @@ }, "copyEmailAction": "Copiar e-mail", "exportLogsAction": "Exportar logs", - "reportABug": "Reportar um problema", + "reportABug": "Informar um problema", "crashAndErrorReporting": "Reporte de erros e falhas", - "reportBug": "Reportar problema", + "reportBug": "Informar problema", "emailUsMessage": "Por favor, envie um e-mail para {email}", "@emailUsMessage": { "placeholders": { @@ -112,7 +112,7 @@ "email": "E-mail", "support": "Suporte", "general": "Geral", - "settings": "Configurações", + "settings": "Ajustes", "copied": "Copiado", "pleaseTryAgain": "Por favor, tente novamente", "existingUser": "Usuário Existente", @@ -139,7 +139,7 @@ "inFamilyPlanMessage": "Você está em um plano familiar!", "swipeHint": "Deslize para a esquerda para editar ou remover os códigos", "scan": "Escanear", - "scanACode": "Escanear um código", + "scanACode": "Escanear código", "verify": "Verificar", "verifyEmail": "Verificar e-mail", "enterCodeHint": "Digite o código de 6 dígitos de\nseu aplicativo autenticador", @@ -185,7 +185,7 @@ "lockScreenEnablePreSteps": "Para ativar o bloqueio de tela, por favor ative um método de autenticação nas configurações do sistema do seu dispositivo.", "viewActiveSessions": "Ver sessões ativas", "authToViewYourActiveSessions": "Por favor, autentique-se para ver as sessões ativas", - "searchHint": "Pesquisar...", + "searchHint": "Buscar...", "search": "Pesquisar", "sorryUnableToGenCode": "Desculpe, não foi possível gerar um código para {issuerName}", "noResult": "Nenhum resultado", @@ -242,7 +242,7 @@ "logInLabel": "Entrar", "logout": "Sair", "areYouSureYouWantToLogout": "Você tem certeza que deseja encerrar a sessão?", - "yesLogout": "Sim, encerrar sessão", + "yesLogout": "Sim, sair", "exit": "Sair", "verifyingRecoveryKey": "Verificando chave de recuperação...", "recoveryKeyVerified": "Chave de recuperação verificada", @@ -317,7 +317,7 @@ "thisWillLogYouOutOfTheFollowingDevice": "Isso fará com que você saia do seguinte dispositivo:", "terminateSession": "Encerrar sessão?", "terminate": "Encerrar", - "thisDevice": "Este dispositivo", + "thisDevice": "Esse dispositivo", "toResetVerifyEmail": "Para redefinir a sua senha, por favor verifique o seu email primeiro.", "thisEmailIsAlreadyInUse": "Este e-mail já está em uso", "verificationFailedPleaseTryAgain": "Falha na verificação. Por favor, tente novamente", @@ -339,7 +339,7 @@ "export": "Exportar", "useOffline": "Usar sem backups", "signInToBackup": "Entre para fazer backup de seus códigos", - "singIn": "Iniciar sessão", + "singIn": "Entrar", "sigInBackupReminder": "Por favor, exporte seus códigos para garantir que você tenha um backup do qual você possa restaurar.", "offlineModeWarning": "Você escolheu prosseguir sem backups. Por favor, faça backups manuais para ter certeza de que seus códigos estão seguros.", "showLargeIcons": "Mostrar ícones grandes", @@ -361,7 +361,7 @@ "@androidBiometricNotRecognized": { "description": "Message to let the user know that authentication was failed. It is used on Android side. Maximum 60 characters." }, - "androidBiometricSuccess": "Bem-sucedido", + "androidBiometricSuccess": "Êxito", "@androidBiometricSuccess": { "description": "Message to let the user know that authentication was successful. It is used on Android side. Maximum 60 characters." }, @@ -433,7 +433,7 @@ "tag": "Etiqueta", "create": "Criar", "editTag": "Editar etiqueta", - "deleteTagTitle": "Excluir etiqueta?", + "deleteTagTitle": "Apagar etiqueta?", "deleteTagMessage": "Tem certeza de que deseja excluir esta etiqueta? Essa ação é irreversível.", "somethingWentWrongParsingCode": "Não foi possível analisar os códigos {x}.", "updateNotAvailable": "Atualização não está disponível" diff --git a/mobile/lib/generated/intl/messages_en.dart b/mobile/lib/generated/intl/messages_en.dart index 424b3b3aba..056ba912f5 100644 --- a/mobile/lib/generated/intl/messages_en.dart +++ b/mobile/lib/generated/intl/messages_en.dart @@ -936,7 +936,7 @@ class MessageLookup extends MessageLookupByLibrary { "memoryCount": m33, "merchandise": MessageLookupByLibrary.simpleMessage("Merchandise"), "mlIndexingDescription": MessageLookupByLibrary.simpleMessage( - "Please note that ML indexing will result in a higher bandwidth and battery usage until all items are indexed."), + "Please note that machine learning will result in a higher bandwidth and battery usage until all items are indexed."), "mobileWebDesktop": MessageLookupByLibrary.simpleMessage("Mobile, Web, Desktop"), "moderateStrength": MessageLookupByLibrary.simpleMessage("Moderate"), diff --git a/mobile/lib/generated/l10n.dart b/mobile/lib/generated/l10n.dart index 3f1b9fdb4f..2cd07cb59c 100644 --- a/mobile/lib/generated/l10n.dart +++ b/mobile/lib/generated/l10n.dart @@ -2876,10 +2876,10 @@ class S { ); } - /// `Please note that ML indexing will result in a higher bandwidth and battery usage until all items are indexed.` + /// `Please note that machine learning will result in a higher bandwidth and battery usage until all items are indexed.` String get mlIndexingDescription { return Intl.message( - 'Please note that ML indexing will result in a higher bandwidth and battery usage until all items are indexed.', + 'Please note that machine learning will result in a higher bandwidth and battery usage until all items are indexed.', name: 'mlIndexingDescription', desc: '', args: [], diff --git a/mobile/lib/l10n/intl_pt.arb b/mobile/lib/l10n/intl_pt.arb index 428dbf5fc2..0d1d3b799d 100644 --- a/mobile/lib/l10n/intl_pt.arb +++ b/mobile/lib/l10n/intl_pt.arb @@ -24,13 +24,13 @@ "deleteRequestSLAText": "Sua solicitação será processada em até 72 horas.", "deleteEmailRequest": "Por favor, envie um e-mail para account-deletion@ente.io a partir do seu endereço de e-mail registrado.", "entePhotosPerm": "Ente precisa de permissão para preservar suas fotos", - "ok": "Ok", + "ok": "OK", "createAccount": "Criar uma conta", "createNewAccount": "Criar nova conta", "password": "Senha", "confirmPassword": "Confirme sua senha", "activeSessions": "Sessões ativas", - "oops": "Ops", + "oops": "Opa", "somethingWentWrongPleaseTryAgain": "Algo deu errado. Por favor, tente outra vez", "thisWillLogYouOutOfThisDevice": "Isso fará com que você saia deste dispositivo!", "thisWillLogYouOutOfTheFollowingDevice": "Isso fará com que você saia do seguinte dispositivo:", @@ -265,7 +265,7 @@ "somethingWentWrong": "Algo deu errado", "sendInvite": "Enviar convite", "shareTextRecommendUsingEnte": "Baixe o Ente para que possamos compartilhar facilmente fotos e vídeos de qualidade original\n\nhttps://ente.io", - "done": "Concluído", + "done": "Pronto", "applyCodeTitle": "Aplicar código", "enterCodeDescription": "Digite o código fornecido pelo seu amigo para reivindicar o armazenamento gratuito para vocês dois", "apply": "Aplicar", @@ -409,7 +409,7 @@ "manageDeviceStorage": "Gerenciar o armazenamento do dispositivo", "machineLearning": "Aprendizagem de máquina", "magicSearch": "Busca mágica", - "magicSearchDescription": "Por favor, note que isso resultará em uma largura de banda maior e uso de bateria até que todos os itens sejam indexados.", + "mlIndexingDescription": "Por favor, note que isso resultará em uma largura de banda maior e uso de bateria até que todos os itens sejam indexados.", "loadingModel": "Fazendo download de modelos...", "waitingForWifi": "Esperando por Wi-Fi...", "status": "Estado", @@ -948,7 +948,7 @@ "someOfTheFilesYouAreTryingToDeleteAre": "Alguns dos arquivos que você está tentando excluir só estão disponíveis no seu dispositivo e não podem ser recuperados se forem excluídos", "theyWillBeDeletedFromAllAlbums": "Ele será excluído de todos os álbuns.", "someItemsAreInBothEnteAndYourDevice": "Alguns itens estão tanto no Ente quanto no seu dispositivo.", - "selectedItemsWillBeDeletedFromAllAlbumsAndMoved": "Os itens selecionados serão excluídos de todos os álbuns e movidos para o lixo.", + "selectedItemsWillBeDeletedFromAllAlbumsAndMoved": "Os itens selecionados serão excluídos de todos os álbuns e movidos para a lixeira.", "theseItemsWillBeDeletedFromYourDevice": "Estes itens serão excluídos do seu dispositivo.", "itLooksLikeSomethingWentWrongPleaseRetryAfterSome": "Parece que algo deu errado. Por favor, tente novamente mais tarde. Se o erro persistir, entre em contato com nossa equipe de suporte.", "error": "Erro", @@ -1102,7 +1102,7 @@ "@iOSGoToSettingsDescription": { "description": "Message advising the user to go to the settings and configure Biometrics for their device. It shows in a dialog on iOS side." }, - "iOSOkButton": "Aceitar", + "iOSOkButton": "Tudo bem", "@iOSOkButton": { "description": "Message showed on a button that the user can click to leave the current dialog. It is used on iOS side. Maximum 30 characters." }, @@ -1233,8 +1233,7 @@ "autoPair": "Pareamento automático", "pairWithPin": "Parear com PIN", "faceRecognition": "Reconhecimento facial", - "faceRecognitionIndexingDescription": "Por favor, note que isso resultará em uma largura de banda maior e uso de bateria até que todos os itens sejam indexados.", "foundFaces": "Rostos encontrados", "clusteringProgress": "Progresso de agrupamento", - "indexingIsPaused": "Indexing is paused, will automatically resume when device is ready" + "indexingIsPaused": "A indexação está pausada, será retomada automaticamente quando o dispositivo estiver pronto." } \ No newline at end of file diff --git a/mobile/lib/l10n/intl_zh.arb b/mobile/lib/l10n/intl_zh.arb index 81fd22914a..2b0149685f 100644 --- a/mobile/lib/l10n/intl_zh.arb +++ b/mobile/lib/l10n/intl_zh.arb @@ -409,7 +409,7 @@ "manageDeviceStorage": "管理设备存储", "machineLearning": "机器学习", "magicSearch": "魔法搜索", - "magicSearchDescription": "请注意,在所有项目完成索引之前,这将使用更高的带宽和电量。", + "mlIndexingDescription": "请注意,机器学习将使用更高的带宽和更多的电量,直到所有项目都被索引为止。", "loadingModel": "正在下载模型...", "waitingForWifi": "正在等待 WiFi...", "status": "状态", @@ -569,7 +569,7 @@ "freeTrialValidTill": "免费试用有效期至 {endDate}", "validTill": "有效期至 {endDate}", "addOnValidTill": "您的 {storageAmount} 插件有效期至 {endDate}", - "playStoreFreeTrialValidTill": "免费试用有效期至 {endDate}。\n您可以随后购买付费计划。", + "playStoreFreeTrialValidTill": "免费试用有效期至 {endDate}。\n在此之后您可以选择付费计划。", "subWillBeCancelledOn": "您的订阅将于 {endDate} 取消", "subscription": "订阅", "paymentDetails": "付款明细", @@ -987,7 +987,7 @@ "fileTypesAndNames": "文件类型和名称", "location": "地理位置", "moments": "瞬间", - "searchFaceEmptySection": "查找一个人的所有照片", + "searchFaceEmptySection": "待索引完成后,人物将显示在此处", "searchDatesEmptySection": "按日期搜索,月份或年份", "searchLocationEmptySection": "在照片的一定半径内拍摄的几组照片", "searchPeopleEmptySection": "邀请他人,您将在此看到他们分享的所有照片", @@ -1171,6 +1171,7 @@ } }, "faces": "人脸", + "people": "人物", "contents": "内容", "addNew": "新建", "@addNew": { @@ -1196,14 +1197,14 @@ "verifyPasskey": "验证通行密钥", "playOnTv": "在电视上播放相册", "pair": "配对", - "autoPair": "自动配对", - "pairWithPin": "用 PIN 配对", "deviceNotFound": "未发现设备", "castInstruction": "在您要配对的设备上访问 cast.ente.io。\n输入下面的代码即可在电视上播放相册。", "deviceCodeHint": "输入代码", "joinDiscord": "加入 Discord", "locations": "位置", "descriptions": "描述", + "addAName": "添加一个名称", + "findPeopleByName": "按名称快速查找人物", "addViewers": "{count, plural, zero {添加查看者} one {添加查看者} other {添加查看者}}", "addCollaborators": "{count, plural, zero {添加协作者} one {添加协作者} other {添加协作者}}", "longPressAnEmailToVerifyEndToEndEncryption": "长按电子邮件以验证端到端加密。", @@ -1216,6 +1217,8 @@ "customEndpoint": "已连接至 {endpoint}", "createCollaborativeLink": "创建协作链接", "search": "搜索", + "enterPersonName": "输入人物名称", + "removePersonLabel": "移除人物标签", "autoPairDesc": "自动配对仅适用于支持 Chromecast 的设备。", "manualPairDesc": "用 PIN 码配对适用于您希望在其上查看相册的任何屏幕。", "connectToDevice": "连接到设备", @@ -1227,9 +1230,10 @@ "castIPMismatchTitle": "投放相册失败", "castIPMismatchBody": "请确保您的设备与电视处于同一网络。", "pairingComplete": "配对完成", - "faceRecognition": "Face recognition", - "faceRecognitionIndexingDescription": "Please note that this will result in a higher bandwidth and battery usage until all items are indexed.", - "foundFaces": "Found faces", - "clusteringProgress": "Clustering progress", - "indexingIsPaused": "Indexing is paused, will automatically resume when device is ready" + "autoPair": "自动配对", + "pairWithPin": "用 PIN 配对", + "faceRecognition": "人脸识别", + "foundFaces": "已找到的人脸", + "clusteringProgress": "聚类进展", + "indexingIsPaused": "索引已暂停。当设备准备就绪时,它将自动恢复。" } \ No newline at end of file diff --git a/mobile/lib/services/machine_learning/face_ml/face_ml_service.dart b/mobile/lib/services/machine_learning/face_ml/face_ml_service.dart index cffa17dcc8..87a707995c 100644 --- a/mobile/lib/services/machine_learning/face_ml/face_ml_service.dart +++ b/mobile/lib/services/machine_learning/face_ml/face_ml_service.dart @@ -91,7 +91,10 @@ class FaceMlService { bool isInitialized = false; late String client; + bool get showClusteringIsHappening => _showClusteringIsHappening; + bool debugIndexingDisabled = false; + bool _showClusteringIsHappening = false; bool _mlControllerStatus = false; bool _isIndexingOrClusteringRunning = false; bool _shouldPauseIndexingAndClustering = false; @@ -572,6 +575,8 @@ class FaceMlService { await PersonService.instance.fetchRemoteClusterFeedback(); try { + _showClusteringIsHappening = true; + // Get a sense of the total number of faces in the database final int totalFaces = await FaceMLDataDB.instance.getTotalFaceCount(minFaceScore: minFaceScore); @@ -605,7 +610,7 @@ class FaceMlService { await FaceMLDataDB.instance.getAllClusterSummary(); if (clusterInBuckets) { - const int bucketSize = 20000; + const int bucketSize = 10000; const int offsetIncrement = 7500; int offset = 0; int bucket = 1; @@ -711,6 +716,7 @@ class FaceMlService { } catch (e, s) { _logger.severe("`clusterAllImages` failed", e, s); } finally { + _showClusteringIsHappening = false; _isIndexingOrClusteringRunning = false; _shouldPauseIndexingAndClustering = false; } @@ -1027,7 +1033,6 @@ class FaceMlService { s, ); } - // TODO: This is returning null for Pragadees for all files, so something is wrong here! } if (file == null) { _logger diff --git a/mobile/lib/ui/settings/machine_learning_settings_page.dart b/mobile/lib/ui/settings/machine_learning_settings_page.dart index c39d3e6ee9..38685b4ff5 100644 --- a/mobile/lib/ui/settings/machine_learning_settings_page.dart +++ b/mobile/lib/ui/settings/machine_learning_settings_page.dart @@ -513,14 +513,18 @@ class FaceRecognitionStatusWidgetState extends State