From 641dfdd11ea308a9d16e5204dd38ae4c820b587a Mon Sep 17 00:00:00 2001 From: Crowdin Bot Date: Mon, 21 Jul 2025 00:45:09 +0000 Subject: [PATCH 01/15] New Crowdin translations by GitHub Action --- .../base/locales/es-ES/translation.json | 22 +++++++++---------- .../base/locales/pl-PL/translation.json | 4 ++-- .../base/locales/tr-TR/translation.json | 4 ++-- .../base/locales/zh-HK/translation.json | 2 +- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/web/packages/base/locales/es-ES/translation.json b/web/packages/base/locales/es-ES/translation.json index d1a4378a02..1d3d91cf93 100644 --- a/web/packages/base/locales/es-ES/translation.json +++ b/web/packages/base/locales/es-ES/translation.json @@ -32,7 +32,7 @@ "set_password": "Definir contraseña", "sign_in": "Ingresar", "incorrect_password": "Contraseña incorrecta", - "incorrect_password_or_no_account": "", + "incorrect_password_or_no_account": "Contraseña incorrecta o correo electrónico no registrado", "pick_password_hint": "Introducir una contraseña que podamos usar para cifrar sus datos", "pick_password_caution": "No guardamos su contraseña, así que si la olvida, no podremos ayudarte a recuperar tus datos sin una clave de recuperación.", "key_generation_in_progress": "Generando claves de encriptación...", @@ -40,7 +40,7 @@ "referral_source_hint": "¿Cómo conociste Ente? (opcional)", "referral_source_info": "No rastreamos la instalación de las aplicaciones. ¡Nos ayudaría si nos dijera dónde nos encontró!", "password_mismatch_error": "Las contraseñas no coinciden", - "show_or_hide_password": "", + "show_or_hide_password": "Mostrar u ocultar la contraseña", "welcome_to_ente_title": "Bienvenido a ", "welcome_to_ente_subtitle": "Almacenamiento y compartición de fotos cifradas de extremo a extremo", "new_album": "Nuevo álbum", @@ -162,7 +162,7 @@ "ok": "OK", "success": "Completado", "error": "Error", - "note": "", + "note": "Nota", "offline_message": "Estás desconectado, se están mostrando recuerdos en caché", "install": "Instalar", "install_mobile_app": "Instala nuestra aplicación Android o iOS para hacer una copia de seguridad automática de todas usted fotos", @@ -627,7 +627,7 @@ "faster_upload_description": "Enrutar subidas a través de servidores cercanos", "open_ente_on_startup": "Abrir ente al iniciar", "cast_album_to_tv": "Reproducir álbum en TV", - "cast_to_tv": "", + "cast_to_tv": "Reproducir en el televisor", "enter_cast_pin_code": "Introduce el código que ves en el televisor para emparejar este dispositivo.", "code": "Código", "pair_device_to_tv": "Emparejar dispositivos", @@ -679,11 +679,11 @@ "system": "Sistema", "light": "Claro", "dark": "Oscuro", - "streamable_videos": "", - "processing_videos_status": "", - "share_favorites": "", - "person_favorites": "", - "shared_favorites": "", - "added_by_name": "", - "unowned_files_not_processed": "" + "streamable_videos": "Vídeos en streaming", + "processing_videos_status": "Procesando vídeos...", + "share_favorites": "Compartir favoritos", + "person_favorites": "Los favoritos de {{name}}", + "shared_favorites": "Favoritos compartidos", + "added_by_name": "Añadido por {{name}}", + "unowned_files_not_processed": "Los archivos añadidos por otros usuarios no han sido procesados" } diff --git a/web/packages/base/locales/pl-PL/translation.json b/web/packages/base/locales/pl-PL/translation.json index 0eb8b4c74d..ecbbff918f 100644 --- a/web/packages/base/locales/pl-PL/translation.json +++ b/web/packages/base/locales/pl-PL/translation.json @@ -59,7 +59,7 @@ "select_photos": "Wybierz zdjęcia", "file_upload": "Przesył plików", "preparing": "Przygotowywanie", - "processed_counts": "", + "processed_counts": "{{count, number}} / {{total, number}}", "upload_reading_metadata_files": "Czytanie plików metadanych", "upload_cancelling": "Anulowanie pozostałych przesłań", "upload_done": "", @@ -496,7 +496,7 @@ "yes_stop": "Tak, zatrzymaj", "change_folder": "Zmień Folder", "view_logs": "Wyświetl logi", - "view_logs_message": "", + "view_logs_message": "

Spowoduje to wyświetlenie logów debugowania, które możesz wysłać do nas na e-maila, aby pomóc w debugowaniu Twojego problemu.

Należy pamiętać, że nazwy plików będą dołączone, aby pomóc w śledzeniu problemów z konkretnymi plikami.

", "weak_device_hint": "Przeglądarka, której używasz nie jest wystarczająco silna, aby zaszyfrować Twoje zdjęcia. Prosimy zalogować się do Ente na Twoim komputerze lub pobierz aplikacje mobilną/komputerową Ente.", "drag_and_drop_hint": "Lub przeciągnij i upuść do okna Ente", "authenticate": "Uwierzytelnij się", diff --git a/web/packages/base/locales/tr-TR/translation.json b/web/packages/base/locales/tr-TR/translation.json index b1cf846414..627ac8aa91 100644 --- a/web/packages/base/locales/tr-TR/translation.json +++ b/web/packages/base/locales/tr-TR/translation.json @@ -162,7 +162,7 @@ "ok": "Tamam", "success": "Başarılı", "error": "Hata", - "note": "", + "note": "Not", "offline_message": "Çevrimdışısın, önbelleğe alınmış anılar gösteriliyor", "install": "Kur", "install_mobile_app": "Tüm fotoğraflarını otomatik olarak yedeklemek için Android veya iOS uygulamamızı yükle", @@ -685,5 +685,5 @@ "person_favorites": "{{name}}'in favorileri", "shared_favorites": "Paylaşılan favoriler", "added_by_name": "{{name}} tarafından eklendi", - "unowned_files_not_processed": "" + "unowned_files_not_processed": "Diğer kullanıcılar tarafından eklenen dosyalar işlenmedi" } diff --git a/web/packages/base/locales/zh-HK/translation.json b/web/packages/base/locales/zh-HK/translation.json index 05fbcc6e4d..bdfed3f70f 100644 --- a/web/packages/base/locales/zh-HK/translation.json +++ b/web/packages/base/locales/zh-HK/translation.json @@ -77,7 +77,7 @@ "audio": "音訊", "more": "更多", "mouse_scroll": "", - "pan": "", + "pan": "橫移", "pinch": "", "drag": "拖曳", "tap_inside_image": "", From 2ff5058a3e9c3408898af5a066b853716f658bac Mon Sep 17 00:00:00 2001 From: Crowdin Bot Date: Mon, 21 Jul 2025 01:05:20 +0000 Subject: [PATCH 02/15] New Crowdin translations by GitHub Action --- mobile/apps/photos/lib/l10n/intl_pl.arb | 6 +++++- mobile/apps/photos/lib/l10n/intl_ru.arb | 4 +++- mobile/apps/photos/lib/l10n/intl_vi.arb | 6 +++--- mobile/apps/photos/lib/l10n/intl_zh.arb | 4 +++- 4 files changed, 14 insertions(+), 6 deletions(-) diff --git a/mobile/apps/photos/lib/l10n/intl_pl.arb b/mobile/apps/photos/lib/l10n/intl_pl.arb index 7ad308c900..cffa0d1a43 100644 --- a/mobile/apps/photos/lib/l10n/intl_pl.arb +++ b/mobile/apps/photos/lib/l10n/intl_pl.arb @@ -1602,6 +1602,7 @@ "processing": "Przetwarzanie", "queued": "W kolejce", "ineligible": "Nie kwalifikuje się", + "failed": "Nie powiodło się", "playOriginal": "Odtwórz oryginał", "joinAlbumConfirmationDialogBody": "Dołączenie do albumu sprawi, że Twój e-mail będzie widoczny dla jego uczestników.", "pleaseWaitThisWillTakeAWhile": "Prosimy czekać, to może zająć chwilę.", @@ -1621,6 +1622,7 @@ "appIcon": "Ikona aplikacji", "notThisPerson": "Nie ta osoba?", "selectedItemsWillBeRemovedFromThisPerson": "Wybrane elementy zostaną usunięte z tej osoby, ale nie zostaną usunięte z Twojej biblioteki.", + "throughTheYears": "{dateFormat} przez lata", "thisWeekThroughTheYears": "Ten tydzień przez lata", "youAndThem": "Ty i {name}", "admiringThem": "Podziwianie {name}", @@ -1705,5 +1707,7 @@ "cLDesc5": "Od teraz otrzymasz powiadomienie z możliwością rezygnacji dotyczące wszystkich zapisanych urodzin w Ente, wraz z kolekcją najlepszych zdjęć danej osoby.", "cLTitle6": "Wznawialne Przesyłanie i Pobieranie Danych", "cLDesc6": "Nie musisz już czekać na zakończenie przesyłania ani pobierania, żeby móc zamknąć aplikację. Wszystkie operacje przesyłania i pobierania można teraz wstrzymać w dowolnym momencie i wznowić od miejsca, w którym zostały przerwane.", - "indexingPausedStatusDescription": "Indeksowanie zostało wstrzymane. Zostanie automatycznie wznowione, gdy urządzenie będzie gotowe. Urządzenie uznaje się za gotowe, gdy poziom baterii, stan jej zdrowia oraz status termiczny znajdują się w bezpiecznym zakresie." + "indexingPausedStatusDescription": "Indeksowanie zostało wstrzymane. Zostanie automatycznie wznowione, gdy urządzenie będzie gotowe. Urządzenie uznaje się za gotowe, gdy poziom baterii, stan jej zdrowia oraz status termiczny znajdują się w bezpiecznym zakresie.", + "faceThumbnailGenerationFailed": "Nie można wygenerować miniaturek twarzy", + "fileAnalysisFailed": "Nie można przeanalizować pliku" } \ No newline at end of file diff --git a/mobile/apps/photos/lib/l10n/intl_ru.arb b/mobile/apps/photos/lib/l10n/intl_ru.arb index 99d7e093f3..6a0a4a65e7 100644 --- a/mobile/apps/photos/lib/l10n/intl_ru.arb +++ b/mobile/apps/photos/lib/l10n/intl_ru.arb @@ -1788,5 +1788,7 @@ "cLDesc5": "Теперь вы будете получать уведомления о всех днях рождениях, которые вы сохранили на Ente, а также коллекцию их лучших фотографий.", "cLTitle6": "Возобновляемые загрузки и скачивания", "cLDesc6": "Больше не нужно ждать завершения загрузки/скачивания, прежде чем закрыть приложение. Все загрузки и скачивания теперь можно приостановить и возобновить с того места, где вы остановились.", - "indexingPausedStatusDescription": "Индексирование приостановлено. Оно автоматически возобновится, когда устройство будет готово. Устройство считается готовым, когда уровень заряда батареи, её состояние и температура находятся в пределах нормы." + "indexingPausedStatusDescription": "Индексирование приостановлено. Оно автоматически возобновится, когда устройство будет готово. Устройство считается готовым, когда уровень заряда батареи, её состояние и температура находятся в пределах нормы.", + "faceThumbnailGenerationFailed": "Не удалось создать миниатюры лиц", + "fileAnalysisFailed": "Не удалось проанализировать файл" } \ No newline at end of file diff --git a/mobile/apps/photos/lib/l10n/intl_vi.arb b/mobile/apps/photos/lib/l10n/intl_vi.arb index 156d3e99b6..952bff39bb 100644 --- a/mobile/apps/photos/lib/l10n/intl_vi.arb +++ b/mobile/apps/photos/lib/l10n/intl_vi.arb @@ -825,8 +825,8 @@ "doubleYourStorage": "Gấp đôi dung lượng lưu trữ của bạn", "referFriendsAnd2xYourPlan": "Giới thiệu bạn bè và ×2 gói của bạn", "shareAlbumHint": "Mở album và nhấn nút chia sẻ ở góc trên bên phải để chia sẻ.", - "itemsShowTheNumberOfDaysRemainingBeforePermanentDeletion": "Các mục hiện số ngày còn lại trước khi xóa vĩnh viễn", - "trashDaysLeft": "{count, plural, =0 {Sắp tới} =1 {1 ngày} other {{count} ngày}}", + "itemsShowTheNumberOfDaysRemainingBeforePermanentDeletion": "Trên các mục là số ngày còn lại trước khi xóa vĩnh viễn", + "trashDaysLeft": "{count, plural, =0 {Sắp xóa} =1 {1 ngày} other {{count} ngày}}", "@trashDaysLeft": { "description": "Text to indicate number of days remaining before permanent deletion", "placeholders": { @@ -1178,7 +1178,7 @@ "addPhotos": "Thêm ảnh", "noPhotosFoundHere": "Không tìm thấy ảnh ở đây", "zoomOutToSeePhotos": "Phóng to để xem ảnh", - "noImagesWithLocation": "Không có ảnh ở vị trí này", + "noImagesWithLocation": "Không có ảnh với vị trí", "unpinAlbum": "Bỏ ghim album", "pinAlbum": "Ghim album", "create": "Tạo", diff --git a/mobile/apps/photos/lib/l10n/intl_zh.arb b/mobile/apps/photos/lib/l10n/intl_zh.arb index a8db49277e..e9ba03d3f0 100644 --- a/mobile/apps/photos/lib/l10n/intl_zh.arb +++ b/mobile/apps/photos/lib/l10n/intl_zh.arb @@ -1788,5 +1788,7 @@ "cLDesc5": "您现在将收到 Ente 上保存的所有生日的可选退出通知,同时附上他们最佳照片的合集。", "cLTitle6": "可恢复的上传和下载", "cLDesc6": "无需等待上传/下载完成即可关闭应用程序。所有上传和下载现在都可以中途暂停,并从中断处继续。", - "indexingPausedStatusDescription": "索引已暂停。待设备准备就绪后,索引将自动恢复。当设备的电池电量、电池健康度和温度状态处于健康范围内时,设备即被视为准备就绪。" + "indexingPausedStatusDescription": "索引已暂停。待设备准备就绪后,索引将自动恢复。当设备的电池电量、电池健康度和温度状态处于健康范围内时,设备即被视为准备就绪。", + "faceThumbnailGenerationFailed": "无法生成人脸缩略图", + "fileAnalysisFailed": "无法分析文件" } \ No newline at end of file From 1f0f240f97224ebb0fd88bc360055e3eaa2f5749 Mon Sep 17 00:00:00 2001 From: Crowdin Bot Date: Mon, 21 Jul 2025 01:18:10 +0000 Subject: [PATCH 03/15] New Crowdin translations by GitHub Action --- mobile/apps/auth/lib/l10n/arb/app_be.arb | 90 ++++++++++++++++++++++++ mobile/apps/auth/lib/l10n/arb/app_es.arb | 8 ++- mobile/apps/auth/lib/l10n/arb/app_et.arb | 25 ++++++- mobile/apps/auth/lib/l10n/arb/app_vi.arb | 2 +- 4 files changed, 122 insertions(+), 3 deletions(-) diff --git a/mobile/apps/auth/lib/l10n/arb/app_be.arb b/mobile/apps/auth/lib/l10n/arb/app_be.arb index 47168446a0..d1719f4549 100644 --- a/mobile/apps/auth/lib/l10n/arb/app_be.arb +++ b/mobile/apps/auth/lib/l10n/arb/app_be.arb @@ -78,6 +78,7 @@ "contactSupport": "Звярнуцца ў службу падтрымкі", "rateUsOnStore": "Ацаніць нас у {storeName}", "blog": "Блог", + "merchandise": "Тавары", "verifyPassword": "Праверыць пароль", "pleaseWait": "Пачакайце...", "generatingEncryptionKeysTitle": "Генерацыя ключоў шыфравання...", @@ -85,6 +86,9 @@ "useRecoveryKey": "Выкарыстоўваць ключ аднаўлення", "incorrectPasswordTitle": "Няправільны пароль", "welcomeBack": "З вяртаннем!", + "emailAlreadyRegistered": "Электронная пошта ўжо зарэгістравана.", + "emailNotRegistered": "Электронная пошта не зарэгістравана.", + "madeWithLoveAtPrefix": "зроблена з ❤️ у ", "changeEmail": "Змяніць адрас электроннай пошты", "changePassword": "Змяніць пароль", "data": "Даныя", @@ -94,9 +98,13 @@ "passwordForDecryptingExport": "Пароль для дэшыфроўкі экспартавання", "passwordEmptyError": "Пароль не можа быць пустым", "importFromApp": "Імпартаваць коды з {appName}", + "importSelectJsonFile": "Выбраць файл JSON", + "importSelectAppExport": "Выберыце файл экспартавання {appName}", "exportCodes": "Экспартаваць коды", "importLabel": "Імпарт", "selectFile": "Выбраць файл", + "emailVerificationToggle": "Праверка эл. пошты", + "authenticateGeneric": "Прайдзіце аўтэнтыфікацыю", "ok": "OK", "cancel": "Скасаваць", "yes": "Так", @@ -113,19 +121,29 @@ "enterYourPasswordHint": "Увядзіце ваш пароль", "forgotPassword": "Забылі пароль", "oops": "Вой", + "suggestFeatures": "Прапанаваць функцыю", "faq": "Частыя пытанні", "leaveFamily": "Пакінуць сямейны план", + "inFamilyPlanMessage": "Вы ўдзельнік сямейнага плана!", "scan": "Сканіраваць", "scanACode": "Сканіраваць код", "verify": "Праверыць", "verifyEmail": "Праверыць электронную пошту", "lostDeviceTitle": "Згубілі прыладу?", + "twoFactorAuthTitle": "Двухфактарная аўтэнтыфікацыя", + "passkeyAuthTitle": "Праверка ключа доступу", "verifyPasskey": "Праверыць ключ доступу", "loginWithTOTP": "Увайсці з TOTP", "recoverAccount": "Аднавіць уліковы запіс", + "enterRecoveryKeyHint": "Увядзіце свой ключ аднаўлення", "recover": "Аднавіць", "invalidQRCode": "Памылковы QR-код", + "noRecoveryKeyTitle": "Няма ключа аднаўлення?", + "enterEmailHint": "Увядзіце свой адрас электроннай пошты", + "enterNewEmailHint": "Увядзіце свой новы адрас электроннай пошты", + "invalidEmailTitle": "Памылковы адрас электроннай пошты", "deleteAccount": "Выдаліць уліковы запіс", + "yesSendFeedbackAction": "Так. Адправіць водгук", "noDeleteAccountAction": "Не, выдаліць уліковы запіс", "sendEmail": "Адправіць ліст", "createNewAccount": "Стварыць новы ўліковы запіс", @@ -140,16 +158,21 @@ "social": "Сацыяльныя сеткі", "security": "Бяспека", "lockscreen": "Экран блакіроўкі", + "viewActiveSessions": "Паглядзець актыўныя сеансы", "searchHint": "Пошук...", "search": "Пошук", "noResult": "Няма вынікаў", "addCode": "Дадаць код", "scanAQrCode": "Сканіраваць QR-код", + "enterDetailsManually": "Увесці падрабязнасці ўручную", "edit": "Рэдагаваць", "share": "Абагуліць", "shareCodes": "Абагуліць коды", "restore": "Аднавіць", + "copiedToClipboard": "Скапіявана ў буфер абмену", + "copiedNextToClipboard": "Скапіяваць наступны код у буфер абмену", "error": "Памылка", + "recoveryKeyCopiedToClipboard": "Ключ аднаўлення скапіяваны ў буфер абмену", "doThisLater": "Зрабіць гэта пазней", "saveKey": "Захаваць ключ", "save": "Захаваць", @@ -164,19 +187,27 @@ "changePasswordTitle": "Змяніць пароль", "resetPasswordTitle": "Скінуць пароль", "encryptionKeys": "Ключы шыфравання", + "passwordChangedSuccessfully": "Пароль паспяхова зменены", + "generatingEncryptionKeys": "Генерацыя ключоў шыфравання...", "continueLabel": "Працягнуць", "insecureDevice": "Небяспечная прылада", "howItWorks": "Як гэта працуе", "logInLabel": "Увайсці", "logout": "Выйсці", + "areYouSureYouWantToLogout": "Вы сапраўды хочаце выйсці?", "yesLogout": "Так, выйсці", "exit": "Выхад", "theme": "Тема", "lightTheme": "Светлая", "darkTheme": "Цёмная", "systemTheme": "Сістэманая", + "verifyingRecoveryKey": "Праверка ключа аднаўлення...", + "recoveryKeyVerified": "Ключ аднаўлення правераны", + "recreatePasswordTitle": "Стварыць пароль паўторна", "invalidKey": "Памылковы ключ", "tryAgain": "Паспрабуйце яшчэ раз", + "viewRecoveryKey": "Прагледзець ключ аднаўлення", + "confirmRecoveryKey": "Пацвердзіце ключ аднаўлення", "confirmYourRecoveryKey": "Пацвердзіце свой ключ аднаўлення", "confirm": "Пацвердзіць", "emailYourLogs": "Адправіць журналы", @@ -221,15 +252,22 @@ "pendingSyncs": "Папярэджанне", "pendingSyncsWarningBody": "Некаторыя вашы коды не былі зарэзерваваны.\n\nПераканайцеся, што ў вас ёсць іх рэзервовая копія перад выхадам з сістэмы.", "checkInboxAndSpamFolder": "Праверце свае ўваходныя лісты (і спам) для завяршэння праверкі", + "tapToEnterCode": "Націсніце, каб увесці код", "resendEmail": "Адправіць ліст яшчэ раз", "manualSort": "Карыстальніцкая", "editOrder": "Рэдагаваць заказ", "mostFrequentlyUsed": "Часта выкарыстоўваюцца", "mostRecentlyUsed": "Нядаўна выкарыстаныя", "activeSessions": "Актыўныя сеансы", + "terminateSession": "Перарваць сеанс?", "terminate": "Перарваць", "thisDevice": "Гэта прылада", + "thisEmailIsAlreadyInUse": "Гэта электронная пошта ўжо выкарыстоўваецца", + "yourVerificationCodeHasExpired": "Ваш праверачны код пратэрмінаваны", "incorrectCode": "Няправільны код", + "emailChangedTo": "Электронная пошта зменена на {newEmail}", + "authenticationSuccessful": "Аўтэнтыфікацыя паспяхова пройдзена!", + "incorrectRecoveryKey": "Няправільны ключ аднаўлення", "enterPassword": "Увядзіце пароль", "selectExportFormat": "Выберыце фармат экспартавання", "exportDialogDesc": "Зашыфраванае экспартаванне будзе абаронена паролем, які вы выберыце.", @@ -249,10 +287,18 @@ "focusOnSearchBar": "Сфакусіравацца на пошуку пры запуску праграмы", "confirmUpdatingkey": "Вы сапраўды хочаце абнавіць сакрэтны ключ?", "minimizeAppOnCopy": "Згортваць праграму пры капіяванні", + "editCodeAuthMessage": "Прайдзіце аўтэнтыфікацыю, каб рэдагаваць код", + "deleteCodeAuthMessage": "Прайдзіце аўтэнтыфікацыю, каб выдаліць код", + "showQRAuthMessage": "Прайдзіце аўтэнтыфікацыю, каб паказаць QR-код", + "confirmAccountDeleteTitle": "Пацвердзіце выдаленне ўліковага запісу", "androidBiometricHint": "Праверыць ідэнтыфікацыю", "@androidBiometricHint": { "description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters." }, + "androidBiometricNotRecognized": "Не распазнана. Паспрабуйце яшчэ раз.", + "@androidBiometricNotRecognized": { + "description": "Message to let the user know that authentication was failed. It is used on Android side. Maximum 60 characters." + }, "androidBiometricSuccess": "Паспяхова", "@androidBiometricSuccess": { "description": "Message to let the user know that authentication was successful. It is used on Android side. Maximum 60 characters." @@ -261,6 +307,22 @@ "@androidCancelButton": { "description": "Message showed on a button that the user can click to leave the current dialog. It is used on Android side. Maximum 30 characters." }, + "androidSignInTitle": "Патрабуецца аўтэнтыфікацыя", + "@androidSignInTitle": { + "description": "Message showed as a title in a dialog which indicates the user that they need to scan biometric to continue. It is used on Android side. Maximum 60 characters." + }, + "androidBiometricRequiredTitle": "Патрабуецца біяметрыя", + "@androidBiometricRequiredTitle": { + "description": "Message showed as a title in a dialog which indicates the user has not set up biometric authentication on their device. It is used on Android side. Maximum 60 characters." + }, + "androidDeviceCredentialsRequiredTitle": "Патрабуюцца ўліковыя даныя прылады", + "@androidDeviceCredentialsRequiredTitle": { + "description": "Message showed as a title in a dialog which indicates the user has not set up credentials authentication on their device. It is used on Android side. Maximum 60 characters." + }, + "androidDeviceCredentialsSetupDescription": "Патрабуюцца ўліковыя даныя прылады", + "@androidDeviceCredentialsSetupDescription": { + "description": "Message advising the user to go to the settings and configure device credentials on their device. It shows in a dialog on Android side." + }, "goToSettings": "Перайсці ў налады", "@goToSettings": { "description": "Message showed on a button that the user can click to go to settings pages from the current dialog. It is used on both Android and iOS side. Maximum 30 characters." @@ -269,11 +331,24 @@ "@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." }, + "noInternetConnection": "Адсутнічае падключэнне да інтэрнэту", + "signOutFromOtherDevices": "Выйсці з іншых прылад", + "signOutOtherDevices": "Выйсці на іншых прыладах", "doNotSignOut": "Не выходзіць", + "waitingForBrowserRequest": "Чаканне запыту браўзера...", + "waitingForVerification": "Чаканне праверкі...", "passkey": "Ключ доступу", + "passKeyPendingVerification": "Праверка пакуль яшчэ не завершана", "loginSessionExpired": "Сеанс завяршыўся", + "developerSettings": "Налады распрацоўшчыка", + "serverEndpoint": "Канцавы пункт сервера", + "invalidEndpoint": "Памылковы канцавы пункт", + "endpointUpdatedMessage": "Канцавы пункт паспяхова абноўлены", + "customEndpoint": "Падключана да {endpoint}", "pinText": "Замацаваць", "unpinText": "Адмацаваць", + "pinnedCodeMessage": "{code} быў замацаваны", + "unpinnedCodeMessage": "{code} быў адмацаваны", "pinned": "Замацавана", "tags": "Тэгі", "createNewTag": "Стварыць новы тэг", @@ -281,23 +356,38 @@ "create": "Стварыць", "editTag": "Рэдагаванне тэг", "deleteTagTitle": "Выдаліць тэг?", + "updateNotAvailable": "Абнаўленне недаступна", "viewRawCodes": "Паглядзець неапрацаваныя коды", "rawCodes": "Неапрацаваныя коды", "rawCodeData": "Неапрацаваныя даныя кода", "appLock": "Блакіроўка праграмы", + "noSystemLockFound": "Сістэма блакіроўкі не знойдзена", "autoLock": "Аўтаблакіроўка", "immediately": "Адразу", + "reEnterPassword": "Увядзіце пароль паўторна", "reEnterPin": "Увядзіце PIN-код яшчэ раз", "next": "Далей", + "tooManyIncorrectAttempts": "Занадта шмат няўдалых спроб", "tapToUnlock": "Націсніце для разблакіроўкі", + "setNewPassword": "Задаць новы пароль", "deviceLock": "Блакіроўка прылады", "hideContent": "Схаваць змест", "pinLock": "Блакіроўка PIN'ам", "enterPin": "Увядзіце PIN-код", "setNewPin": "Задаць новы PIN", + "appLockNotEnabled": "Блакіроўка праграмы не ўключана", + "duplicateCodes": "Дублікаты кадоў", + "noDuplicates": "✨ Няма дублікатаў", + "deduplicateCodes": "Дубліраваныя кады", "deselectAll": "Зняць выбар з усіх", "selectAll": "Выбраць усе", + "deleteDuplicates": "Выдаліць дублікаты", "plainHTML": "Звычайны HTML", + "tellUsWhatYouThink": "Раскажыце, што вы думаеце", + "dropReviewiOS": "Пакіньце водгук у App Store", + "dropReviewAndroid": "Пакіньце водгук у Play Store", + "giveUsAStarOnGithub": "Адзначце нас зоркай на Github", + "loginWithAuthAccount": "Увайдзіце з дапамогай уліковага запісу Auth", "advanced": "Пашыраныя", "algorithm": "Алгарытм", "type": "Тып", diff --git a/mobile/apps/auth/lib/l10n/arb/app_es.arb b/mobile/apps/auth/lib/l10n/arb/app_es.arb index d313140c40..db50d4f50e 100644 --- a/mobile/apps/auth/lib/l10n/arb/app_es.arb +++ b/mobile/apps/auth/lib/l10n/arb/app_es.arb @@ -173,6 +173,7 @@ "invalidQRCode": "Código QR no válido", "noRecoveryKeyTitle": "¿No tienes la clave de recuperación?", "enterEmailHint": "Introduce tu dirección de correo electrónico", + "enterNewEmailHint": "Introduce tu nueva dirección de correo electrónico", "invalidEmailTitle": "Dirección de correo electrónico no válida", "invalidEmailMessage": "Por favor, introduce una dirección de correo electrónico válida.", "deleteAccount": "Eliminar cuenta", @@ -513,5 +514,10 @@ "free5GB": "5 GB gratis en ente Fotos", "loginWithAuthAccount": "Inicia sesión con tu cuenta de Auth", "freeStorageOffer": "10% de descuento en ente fotos", - "freeStorageOfferDescription": "Usa el cupón \"AUTH\" para obtener un 10% de descuento en el primer año" + "freeStorageOfferDescription": "Usa el cupón \"AUTH\" para obtener un 10% de descuento en el primer año", + "advanced": "Avanzado", + "algorithm": "Algoritmo", + "type": "Tipo", + "period": "Periodo", + "digits": "Dígitos" } \ No newline at end of file diff --git a/mobile/apps/auth/lib/l10n/arb/app_et.arb b/mobile/apps/auth/lib/l10n/arb/app_et.arb index 57294fe402..020bf089c4 100644 --- a/mobile/apps/auth/lib/l10n/arb/app_et.arb +++ b/mobile/apps/auth/lib/l10n/arb/app_et.arb @@ -11,6 +11,7 @@ "setupFirstAccount": "Lisa oma esimene kasutajakonto", "importScanQrCode": "Skanneeri QR-koodi", "qrCode": "QR-kood", + "importEnterSetupKey": "Sisesta seadistusvõti", "importAccountPageTitle": "Sisesta kasutajakonto üksikasjad", "secretCanNotBeEmpty": "Saladus ei tohi jääda tühjaks", "bothIssuerAndAccountCanNotBeEmpty": "Nii kasutajakonto kui väljaandja ei tohi tühjaks jääda", @@ -32,6 +33,7 @@ } } }, + "codeAccountHint": "Kasutajakonto (sina@domeen.com)", "codeTagHint": "Silt", "accountKeyType": "Võtme tüüp", "sessionExpired": "Sessioon on aegunud", @@ -40,7 +42,12 @@ }, "pleaseLoginAgain": "Palun logi uuesti sisse", "loggingOut": "Väljalogimine...", + "timeBasedKeyType": "Ajapõhine (TOTP)", + "counterBasedKeyType": "Loenduripõhine (HOTP)", "saveAction": "Salvesta", + "nextTotpTitle": "järgmine", + "deleteCodeTitle": "Kas kustutame koodi?", + "deleteCodeMessage": "Kas sa oled kindel, et soovid selle koodi kustutada? Seda tegevust ei saa tagasi pöörata.", "trash": "Prügikast", "viewLogsAction": "Vaata logisid", "preparingLogsTitle": "Valmistan logisid ette...", @@ -56,7 +63,18 @@ "copyEmailAction": "Kopeeri e-posti aadress", "exportLogsAction": "Ekspordi logid", "reportABug": "Teata veast", - "contactSupport": "Võtke ühendust klienditoega", + "crashAndErrorReporting": "Teatamine vigadest ja kokkujooksmistest", + "reportBug": "Teata veast", + "emailUsMessage": "Saada meile e-kiri aadressile {email}", + "@emailUsMessage": { + "placeholders": { + "email": { + "type": "String" + } + } + }, + "contactSupport": "Võta ühendust klienditoega", + "rateUsOnStore": "Arvusta meid rakendustepoes: {storeName}", "blog": "Blogi", "verifyPassword": "Korda salasõna", "pleaseWait": "Palun oota...", @@ -70,8 +88,13 @@ "changeEmail": "Muuda e-posti aadressi", "changePassword": "Muuda salasõna", "data": "Andmed", + "importCodes": "Impordi koode", + "importTypePlainText": "Votmindamata tekstina", + "importTypeEnteEncrypted": "Ente krüptitud ekspordina", "passwordForDecryptingExport": "Salasõna eksporditud andmete dekrüptimiseks", "passwordEmptyError": "Salasõna väli ei saa olla tühi", + "importFromApp": "Impordi koodid rakendusest {appName}", + "selectFile": "Vali fail", "ok": "Sobib", "cancel": "Katkesta", "yes": "Jah", diff --git a/mobile/apps/auth/lib/l10n/arb/app_vi.arb b/mobile/apps/auth/lib/l10n/arb/app_vi.arb index 82f8bace1d..361f40f3d4 100644 --- a/mobile/apps/auth/lib/l10n/arb/app_vi.arb +++ b/mobile/apps/auth/lib/l10n/arb/app_vi.arb @@ -506,7 +506,7 @@ "selectAll": "Chọn tất cả", "deleteDuplicates": "Xóa trùng lặp", "plainHTML": "HTML thuần", - "tellUsWhatYouThink": "Hãy cho chúng tôi biết bạn nghĩ gì", + "tellUsWhatYouThink": "Cho biết bạn nghĩ gì", "dropReviewiOS": "Đánh giá ngay trên App Store", "dropReviewAndroid": "Đánh giá ngay trên Play Store", "supportEnte": "Hỗ trợ ente", From 5750d72c5af5a51eb9a92c7b8a35b7537860c645 Mon Sep 17 00:00:00 2001 From: Neeraj Gupta <254676+ua741@users.noreply.github.com> Date: Mon, 21 Jul 2025 11:48:10 +0530 Subject: [PATCH 04/15] [auth] Bump version --- mobile/apps/auth/linux/packaging/enteauth.appdata.xml | 1 + mobile/apps/auth/pubspec.yaml | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/mobile/apps/auth/linux/packaging/enteauth.appdata.xml b/mobile/apps/auth/linux/packaging/enteauth.appdata.xml index 6785961a91..899e7f8f7e 100644 --- a/mobile/apps/auth/linux/packaging/enteauth.appdata.xml +++ b/mobile/apps/auth/linux/packaging/enteauth.appdata.xml @@ -18,6 +18,7 @@ + diff --git a/mobile/apps/auth/pubspec.yaml b/mobile/apps/auth/pubspec.yaml index 74c48b251a..33ecf465ce 100644 --- a/mobile/apps/auth/pubspec.yaml +++ b/mobile/apps/auth/pubspec.yaml @@ -1,7 +1,7 @@ name: ente_auth description: ente two-factor authenticator -version: 4.4.1+441 +version: 4.4.2+442 publish_to: none environment: From ba56908d2da93b6cf0bb7f850a969c3a3716515c Mon Sep 17 00:00:00 2001 From: laurenspriem Date: Mon, 21 Jul 2025 10:05:11 +0200 Subject: [PATCH 05/15] Fix duplicate people files --- mobile/apps/photos/lib/ui/viewer/people/people_page.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mobile/apps/photos/lib/ui/viewer/people/people_page.dart b/mobile/apps/photos/lib/ui/viewer/people/people_page.dart index fbb529bd5c..419e95e8e9 100644 --- a/mobile/apps/photos/lib/ui/viewer/people/people_page.dart +++ b/mobile/apps/photos/lib/ui/viewer/people/people_page.dart @@ -108,7 +108,7 @@ class _PeoplePageState extends State { ); return []; } - final List resultFiles = []; + final Set resultFiles = {}; for (final e in result.entries) { resultFiles.addAll(e.value); } From ee0c7472a1299aae7e8ce33035559495aaae2009 Mon Sep 17 00:00:00 2001 From: Neeraj Gupta <254676+ua741@users.noreply.github.com> Date: Mon, 21 Jul 2025 13:41:24 +0530 Subject: [PATCH 06/15] [auth][build] Fix appimage tool path --- .github/workflows/auth-release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/auth-release.yml b/.github/workflows/auth-release.yml index d8c9f4e1cc..4f730eb9fb 100644 --- a/.github/workflows/auth-release.yml +++ b/.github/workflows/auth-release.yml @@ -98,7 +98,7 @@ jobs: - name: Install appimagetool run: | - wget -O appimagetool "https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage" + wget -O appimagetool "https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage" chmod +x appimagetool mv appimagetool /usr/local/bin/ From 73b87950dec26f6416ac2cc938dd7de58be2e2a5 Mon Sep 17 00:00:00 2001 From: Neeraj Gupta <254676+ua741@users.noreply.github.com> Date: Mon, 21 Jul 2025 13:42:23 +0530 Subject: [PATCH 07/15] Update version --- mobile/apps/auth/ios/Podfile.lock | 56 +++++++++---------- .../auth/linux/packaging/enteauth.appdata.xml | 1 + mobile/apps/auth/pubspec.yaml | 2 +- 3 files changed, 30 insertions(+), 29 deletions(-) diff --git a/mobile/apps/auth/ios/Podfile.lock b/mobile/apps/auth/ios/Podfile.lock index def487fa15..6a2db70ea9 100644 --- a/mobile/apps/auth/ios/Podfile.lock +++ b/mobile/apps/auth/ios/Podfile.lock @@ -232,44 +232,44 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/url_launcher_ios/ios" SPEC CHECKSUMS: - app_links: 3da4c36b46cac3bf24eb897f1a6ce80bda109874 - connectivity_plus: 3f6c9057f4cd64198dc826edfb0542892f825343 - cupertino_http: 94ac07f5ff090b8effa6c5e2c47871d48ab7c86c - device_info_plus: 335f3ce08d2e174b9fdc3db3db0f4e3b1f66bd89 + app_links: e7a6750a915a9e161c58d91bc610e8cd1d4d0ad0 + connectivity_plus: ddd7f30999e1faaef5967c23d5b6d503d10434db + cupertino_http: 947a233f40cfea55167a49f2facc18434ea117ba + device_info_plus: c6fb39579d0f423935b0c9ce7ee2f44b71b9fce6 DKImagePickerController: 946cec48c7873164274ecc4624d19e3da4c1ef3c DKPhotoGallery: b3834fecb755ee09a593d7c9e389d8b5d6deed60 - file_picker: 9b3292d7c8bc68c8a7bf8eb78f730e49c8efc517 - file_saver: 6cdbcddd690cb02b0c1a0c225b37cd805c2bf8b6 - fk_user_agent: 137145b086229251761678fe034da53753f4ce59 + file_picker: 09aa5ec1ab24135ccd7a1621c46c84134bfd6655 + file_saver: 503e386464dbe118f630e17b4c2e1190fa0cf808 + fk_user_agent: 1f47ec39291e8372b1d692b50084b0d54103c545 Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7 - flutter_email_sender: 2397f5e84aaacfb61af569637a963e7c687858d8 - flutter_inappwebview_ios: b89ba3482b96fb25e00c967aae065701b66e9b99 - flutter_local_authentication: 989278c681612f1ee0e36019e149137f114b9d7f - flutter_local_notifications: ad39620c743ea4c15127860f4b5641649a988100 - flutter_native_splash: 35ddbc7228eafcb3969dcc5f1fbbe27c1145a4f0 - flutter_secure_storage: 1ed9476fba7e7a782b22888f956cce43e2c62f13 - fluttertoast: 76fea30fcf04176325f6864c87306927bd7d2038 - local_auth_darwin: 553ce4f9b16d3fdfeafce9cf042e7c9f77c1c391 - move_to_background: 155f7bfbd34d43ad847cb630d2d2d87c17199710 + flutter_email_sender: 10a22605f92809a11ef52b2f412db806c6082d40 + flutter_inappwebview_ios: 6f63631e2c62a7c350263b13fa5427aedefe81d4 + flutter_local_authentication: 1172a4dd88f6306dadce067454e2c4caf07977bb + flutter_local_notifications: 4cde75091f6327eb8517fa068a0a5950212d2086 + flutter_native_splash: edf599c81f74d093a4daf8e17bd7a018854bc778 + flutter_secure_storage: d33dac7ae2ea08509be337e775f6b59f1ff45f12 + fluttertoast: e9a18c7be5413da53898f660530c56f35edfba9c + local_auth_darwin: 66e40372f1c29f383a314c738c7446e2f7fdadc3 + move_to_background: 39a5b79b26d577b0372cbe8a8c55e7aa9fcd3a2d MTBBarcodeScanner: f453b33c4b7dfe545d8c6484ed744d55671788cb - objective_c: 89e720c30d716b036faf9c9684022048eee1eee2 + objective_c: 77e887b5ba1827970907e10e832eec1683f3431d OrderedSet: e539b66b644ff081c73a262d24ad552a69be3a94 - package_info_plus: 580e9a5f1b6ca5594e7c9ed5f92d1dfb2a66b5e1 - path_provider_foundation: 080d55be775b7414fd5a5ef3ac137b97b097e564 - privacy_screen: 3159a541f5d3a31bea916cfd4e58f9dc722b3fd4 - qr_code_scanner: d77f94ecc9abf96d9b9b8fc04ef13f611e5a147a + package_info_plus: 58f0028419748fad15bf008b270aaa8e54380b1c + path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46 + privacy_screen: 1a131c052ceb3c3659934b003b0d397c2381a24e + qr_code_scanner: bb67d64904c3b9658ada8c402e8b4d406d5d796e SDWebImage: f84b0feeb08d2d11e6a9b843cb06d75ebf5b8868 Sentry: da60d980b197a46db0b35ea12cb8f39af48d8854 - sentry_flutter: 27892878729f42701297c628eb90e7c6529f3684 - share_plus: 011d6fb4f9d2576b83179a3a5c5e323202cdabcf - shared_preferences_foundation: 9e1978ff2562383bd5676f64ec4e9aa8fa06a6f7 - sodium_libs: 6c6d0e83f4ee427c6464caa1f1bdc2abf3ca0b7f - sqflite: c35dad70033b8862124f8337cc994a809fcd9fa3 + sentry_flutter: 2df8b0aab7e4aba81261c230cbea31c82a62dd1b + share_plus: 8875f4f2500512ea181eef553c3e27dba5135aad + shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78 + sodium_libs: 1faae17af662384acbd13e41867a0008cd2e2318 + sqflite: 673a0e54cc04b7d6dba8d24fb8095b31c3a99eec sqlite3: 0bb0e6389d824e40296f531b858a2a0b71c0d2fb - sqlite3_flutter_libs: 9379996d65aa23dcda7585a5b58766cebe0aa042 + sqlite3_flutter_libs: c00457ebd31e59fa6bb830380ddba24d44fbcd3b SwiftyGif: 706c60cf65fa2bc5ee0313beece843c8eb8194d4 Toast: 1f5ea13423a1e6674c4abdac5be53587ae481c4e - url_launcher_ios: 694010445543906933d732453a59da0a173ae33d + url_launcher_ios: 5334b05cef931de560670eeae103fd3e431ac3fe PODFILE CHECKSUM: 78f002751f1a8f65042b8da97902ba4124271c5a diff --git a/mobile/apps/auth/linux/packaging/enteauth.appdata.xml b/mobile/apps/auth/linux/packaging/enteauth.appdata.xml index 899e7f8f7e..bdec6377f4 100644 --- a/mobile/apps/auth/linux/packaging/enteauth.appdata.xml +++ b/mobile/apps/auth/linux/packaging/enteauth.appdata.xml @@ -18,6 +18,7 @@ + diff --git a/mobile/apps/auth/pubspec.yaml b/mobile/apps/auth/pubspec.yaml index 33ecf465ce..ea666a5317 100644 --- a/mobile/apps/auth/pubspec.yaml +++ b/mobile/apps/auth/pubspec.yaml @@ -1,7 +1,7 @@ name: ente_auth description: ente two-factor authenticator -version: 4.4.2+442 +version: 4.4.3+443 publish_to: none environment: From 6b5db8d85b365ee5f7203d8ec02da6151dd72eb3 Mon Sep 17 00:00:00 2001 From: ashilkn Date: Mon, 21 Jul 2025 13:53:21 +0530 Subject: [PATCH 08/15] Dedupe gallery on pick person avatar screen --- .../photos/lib/ui/viewer/gallery/hooks/pick_person_avatar.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mobile/apps/photos/lib/ui/viewer/gallery/hooks/pick_person_avatar.dart b/mobile/apps/photos/lib/ui/viewer/gallery/hooks/pick_person_avatar.dart index 1adecdee72..7172825fcc 100644 --- a/mobile/apps/photos/lib/ui/viewer/gallery/hooks/pick_person_avatar.dart +++ b/mobile/apps/photos/lib/ui/viewer/gallery/hooks/pick_person_avatar.dart @@ -54,7 +54,7 @@ class PickPersonCoverPhotoWidget extends StatelessWidget { final result = await SearchService.instance .getClusterFilesForPersonID(personEntity.remoteID); - final List resultFiles = []; + final resultFiles = {}; for (final e in result.entries) { resultFiles.addAll(e.value); } From 868c45baa413613e70366443185cd17e24467c69 Mon Sep 17 00:00:00 2001 From: Neeraj Gupta <254676+ua741@users.noreply.github.com> Date: Mon, 21 Jul 2025 15:02:27 +0530 Subject: [PATCH 09/15] fileData: Use primary bucket as preferred bucket to read --- server/pkg/controller/filedata/controller.go | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/server/pkg/controller/filedata/controller.go b/server/pkg/controller/filedata/controller.go index 65cbef0033..9c192d7495 100644 --- a/server/pkg/controller/filedata/controller.go +++ b/server/pkg/controller/filedata/controller.go @@ -22,6 +22,7 @@ import ( "github.com/gin-gonic/gin" log "github.com/sirupsen/logrus" "net/http" + "strings" "sync" gTime "time" ) @@ -264,12 +265,12 @@ func (c *Controller) getS3FileMetadataParallel(ctx *gin.Context, dbRows []fileDa func (c *Controller) fetchS3FileMetadata(ctx context.Context, row fileData.Row, ctxLogger *log.Entry) (*fileData.S3FileMetadata, error) { dc := row.LatestBucket - // :todo:neeraj make it configurable to - // specify preferred dc to read from - // and fallback logic to read from different bucket when we fail to read from preferred dc - if dc == "b5" { - if array.StringInList("b6", row.ReplicatedBuckets) { - dc = "b6" + preferredBucket := c.S3Config.GetBucketID(row.Type) + // If the current primary bucket is different from the latest bucket where data was written, + // check and use the preferred bucket if the data is replicated there. + if !strings.EqualFold(preferredBucket, dc) { + if array.StringInList(preferredBucket, row.ReplicatedBuckets) { + dc = preferredBucket } } opt := _defaultFetchConfig From f76fa34e5baa250211e80a3706ac556f8b1a7edd Mon Sep 17 00:00:00 2001 From: Neeraj Gupta <254676+ua741@users.noreply.github.com> Date: Mon, 21 Jul 2025 15:07:16 +0530 Subject: [PATCH 10/15] Add SmartAlbum entity type --- server/ente/userentity/entity.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/server/ente/userentity/entity.go b/server/ente/userentity/entity.go index 09f0ddfd46..ede9b8a0dd 100644 --- a/server/ente/userentity/entity.go +++ b/server/ente/userentity/entity.go @@ -11,14 +11,18 @@ type EntityType string const ( Location EntityType = "location" - Person EntityType = "person" + // Person entity is deprecated and will be removed in the future. + //Deprecated .. + Person EntityType = "person" // CGroup is a new version of Person entity, where the data is gzipped before encryption CGroup EntityType = "cgroup" + // SmartAlbum is a new entity type for storing smart album config data + SmartAlbum EntityType = "smart_album" ) func (et EntityType) IsValid() error { switch et { - case Location, Person, CGroup: + case Location, Person, CGroup, SmartAlbum: return nil } return ente.NewBadRequestWithMessage(fmt.Sprintf("Invalid EntityType: %s", et)) From 32efdf464e24c2c5475690d94317b0f1efe81165 Mon Sep 17 00:00:00 2001 From: Neeraj Gupta <254676+ua741@users.noreply.github.com> Date: Mon, 21 Jul 2025 15:14:24 +0530 Subject: [PATCH 11/15] Use client provided entity id for smart album config --- server/ente/userentity/entity.go | 20 +++++++++++++++++++ server/pkg/api/userentity.go | 4 ---- .../pkg/controller/userentity/controller.go | 3 +++ server/pkg/repo/userentity/data.go | 15 +++++++++----- 4 files changed, 33 insertions(+), 9 deletions(-) diff --git a/server/ente/userentity/entity.go b/server/ente/userentity/entity.go index ede9b8a0dd..904b846d1a 100644 --- a/server/ente/userentity/entity.go +++ b/server/ente/userentity/entity.go @@ -69,6 +69,26 @@ type EntityDataRequest struct { Type EntityType `json:"type" binding:"required"` EncryptedData string `json:"encryptedData" binding:"required"` Header string `json:"header" binding:"required"` + ID *string `json:"id"` // Optional ID, if not provided a new ID will be generated +} + +func (edr *EntityDataRequest) IsValid(userID int64) error { + if err := edr.Type.IsValid(); err != nil { + return err + } + switch edr.Type { + case SmartAlbum: + if edr.ID == nil { + return ente.NewBadRequestWithMessage("ID is required for SmartAlbum entity type") + } + // check if ID starts with sa_userid_ or not + if !strings.HasPrefix(*edr.ID, fmt.Sprintf("sa_%d_", userID)) { + return ente.NewBadRequestWithMessage(fmt.Sprintf("ID %s is not valid for SmartAlbum entity type", *edr.ID)) + } + return nil + default: + return nil + } } // UpdateEntityDataRequest updates the current entity diff --git a/server/pkg/api/userentity.go b/server/pkg/api/userentity.go index acda89a09e..e8aa043b5b 100644 --- a/server/pkg/api/userentity.go +++ b/server/pkg/api/userentity.go @@ -61,10 +61,6 @@ func (h *UserEntityHandler) CreateEntity(c *gin.Context) { stacktrace.Propagate(ente.ErrBadRequest, fmt.Sprintf("Request binding failed %s", err))) return } - if err := request.Type.IsValid(); err != nil { - handler.Error(c, stacktrace.Propagate(err, "Invalid EntityType")) - return - } resp, err := h.Controller.CreateEntity(c, request) if err != nil { handler.Error(c, stacktrace.Propagate(err, "Failed to create CreateEntityKey")) diff --git a/server/pkg/controller/userentity/controller.go b/server/pkg/controller/userentity/controller.go index f4fb1c8b9b..38b99fba22 100644 --- a/server/pkg/controller/userentity/controller.go +++ b/server/pkg/controller/userentity/controller.go @@ -32,6 +32,9 @@ func (c *Controller) GetKey(ctx *gin.Context, req model.GetEntityKeyRequest) (*m // CreateEntity stores entity data for the given type func (c *Controller) CreateEntity(ctx *gin.Context, req model.EntityDataRequest) (*model.EntityData, error) { userID := auth.GetUserID(ctx.Request.Header) + if err := req.IsValid(userID); err != nil { + return nil, stacktrace.Propagate(err, "invalid EntityDataRequest") + } id, err := c.Repo.Create(ctx, userID, req) if err != nil { return nil, stacktrace.Propagate(err, "failed to createEntity") diff --git a/server/pkg/repo/userentity/data.go b/server/pkg/repo/userentity/data.go index fa6457ebfa..45f59d3051 100644 --- a/server/pkg/repo/userentity/data.go +++ b/server/pkg/repo/userentity/data.go @@ -14,12 +14,17 @@ import ( // Create inserts a new entry func (r *Repository) Create(ctx context.Context, userID int64, entry model.EntityDataRequest) (string, error) { - idPrt, err := entry.Type.GetNewID() - if err != nil { - return "", stacktrace.Propagate(err, "failed to generate new id") + var id string + if entry.ID != nil { + id = *entry.ID + } else { + idPrt, err := entry.Type.GetNewID() + if err != nil { + return "", stacktrace.Propagate(err, "failed to generate new id") + } + id = *idPrt } - id := *idPrt - err = r.DB.QueryRow(`INSERT into entity_data( + err := r.DB.QueryRow(`INSERT into entity_data( id, user_id, type, From 24a30709cd20ed53276b46e1165718a3f612d441 Mon Sep 17 00:00:00 2001 From: slacker-treat-deferred-unbuckled-jiffy <66910769+slacker-treat-deferred-unbuckled-jiffy@users.noreply.github.com> Date: Mon, 21 Jul 2025 13:55:12 -0600 Subject: [PATCH 12/15] Update custom-icons.json --- .../custom-icons/_data/custom-icons.json | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/mobile/apps/auth/assets/custom-icons/_data/custom-icons.json b/mobile/apps/auth/assets/custom-icons/_data/custom-icons.json index 703bd7419a..7afc5da5a0 100644 --- a/mobile/apps/auth/assets/custom-icons/_data/custom-icons.json +++ b/mobile/apps/auth/assets/custom-icons/_data/custom-icons.json @@ -71,6 +71,9 @@ ], "hex": "fd4b2d" }, + { + "title": "availity" + }, { "title": "AzurHosts", "slug": "azurhosts", @@ -121,6 +124,13 @@ { "title": "Belo" }, + { + "title": "bestbuy", + "altNames": [ + "Best Buy", + "bestbuy.com" + ] + }, { "title": "Bethesda", "altNames": [ @@ -292,6 +302,23 @@ { "title": "CoinDCX" }, + { + "title": "colorado", + "altNames": [ + "Colorado.gov", + "Colorado Gov", + "Colorado Government", + "Colorado Official State Web Portal", + "Colorado State Web Portal", + "Colorado Web Portal", + "Colorado Portal", + "Colorado State", + "Colorado PEAK", + "myColorado", + "Colorado State Portal", + "Colorado Government Portal" + ] + }, { "title": "ConfigCat" }, @@ -403,6 +430,13 @@ "Murena" ] }, + { + "title": "emeritihealth", + "altNames": [ + "Emeriti Health", + "Emeriti Retirement Health", + ] + }, { "title": "eneba" }, @@ -706,6 +740,14 @@ { "title": "Letterboxd" }, + { + "title": "lincolnfinancial", + "altNames": [ + "Lincoln Financial", + "Lincoln Financial Group", + "LFG" + ] + }, { "title": "LinkedIn", "slug": "linkedin" From cacc7dc85ae0baa0e6780517637ae3dbe10ce512 Mon Sep 17 00:00:00 2001 From: slacker-treat-deferred-unbuckled-jiffy <66910769+slacker-treat-deferred-unbuckled-jiffy@users.noreply.github.com> Date: Mon, 21 Jul 2025 13:55:34 -0600 Subject: [PATCH 13/15] Add files via upload --- .../auth/assets/custom-icons/icons/availity.svg | 10 ++++++++++ .../auth/assets/custom-icons/icons/bestbuy.svg | 1 + .../auth/assets/custom-icons/icons/colorado.svg | 16 ++++++++++++++++ .../assets/custom-icons/icons/emeritihealth.svg | 11 +++++++++++ .../custom-icons/icons/lincolnfinancial.svg | 13 +++++++++++++ 5 files changed, 51 insertions(+) create mode 100644 mobile/apps/auth/assets/custom-icons/icons/availity.svg create mode 100644 mobile/apps/auth/assets/custom-icons/icons/bestbuy.svg create mode 100644 mobile/apps/auth/assets/custom-icons/icons/colorado.svg create mode 100644 mobile/apps/auth/assets/custom-icons/icons/emeritihealth.svg create mode 100644 mobile/apps/auth/assets/custom-icons/icons/lincolnfinancial.svg diff --git a/mobile/apps/auth/assets/custom-icons/icons/availity.svg b/mobile/apps/auth/assets/custom-icons/icons/availity.svg new file mode 100644 index 0000000000..31071124bc --- /dev/null +++ b/mobile/apps/auth/assets/custom-icons/icons/availity.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/mobile/apps/auth/assets/custom-icons/icons/bestbuy.svg b/mobile/apps/auth/assets/custom-icons/icons/bestbuy.svg new file mode 100644 index 0000000000..3e582ef525 --- /dev/null +++ b/mobile/apps/auth/assets/custom-icons/icons/bestbuy.svg @@ -0,0 +1 @@ +Best Buy Logo Vector \ No newline at end of file diff --git a/mobile/apps/auth/assets/custom-icons/icons/colorado.svg b/mobile/apps/auth/assets/custom-icons/icons/colorado.svg new file mode 100644 index 0000000000..b57991d11d --- /dev/null +++ b/mobile/apps/auth/assets/custom-icons/icons/colorado.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/mobile/apps/auth/assets/custom-icons/icons/emeritihealth.svg b/mobile/apps/auth/assets/custom-icons/icons/emeritihealth.svg new file mode 100644 index 0000000000..9d557945ae --- /dev/null +++ b/mobile/apps/auth/assets/custom-icons/icons/emeritihealth.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/mobile/apps/auth/assets/custom-icons/icons/lincolnfinancial.svg b/mobile/apps/auth/assets/custom-icons/icons/lincolnfinancial.svg new file mode 100644 index 0000000000..236eace52a --- /dev/null +++ b/mobile/apps/auth/assets/custom-icons/icons/lincolnfinancial.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + From 88c9f4943b4a16be29471833f4f78280c9388824 Mon Sep 17 00:00:00 2001 From: Rafael Ieda <60272+iedame@users.noreply.github.com> Date: Mon, 21 Jul 2025 22:50:50 -0300 Subject: [PATCH 14/15] feat(ente-auth): Add custom icon for Pangolin --- .../custom-icons/_data/custom-icons.json | 4 ++++ .../assets/custom-icons/icons/pangolin.svg | 22 +++++++++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 mobile/apps/auth/assets/custom-icons/icons/pangolin.svg diff --git a/mobile/apps/auth/assets/custom-icons/_data/custom-icons.json b/mobile/apps/auth/assets/custom-icons/_data/custom-icons.json index 703bd7419a..4a4c329298 100644 --- a/mobile/apps/auth/assets/custom-icons/_data/custom-icons.json +++ b/mobile/apps/auth/assets/custom-icons/_data/custom-icons.json @@ -956,6 +956,10 @@ "title": "Oracle Cloud", "slug": "oracle_cloud" }, + { + "title": "Pangolin", + "slug": "pangolin" + }, { "title": "Parqet", "slug": "parqet" diff --git a/mobile/apps/auth/assets/custom-icons/icons/pangolin.svg b/mobile/apps/auth/assets/custom-icons/icons/pangolin.svg new file mode 100644 index 0000000000..5e81a57f53 --- /dev/null +++ b/mobile/apps/auth/assets/custom-icons/icons/pangolin.svg @@ -0,0 +1,22 @@ + + + + + + + + + From 09d7b82c08570d6bee7e34c019cb6ce21ccf3a46 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 22 Jul 2025 09:42:20 +0530 Subject: [PATCH 15/15] Simplify --- .github/ISSUE_TEMPLATE/bug_report.yml | 27 ++-------- CONTRIBUTING.md | 72 ++++++++------------------- 2 files changed, 27 insertions(+), 72 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index e8fc6cbafc..c64165179a 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -1,39 +1,22 @@ name: Report a bug -description: For regressions only (things that were working earlier) +description: Things that were working earlier but don't anymore labels: [] body: - type: markdown attributes: value: | - Before opening a new issue, **please** ensure - 1. You are on the latest version, - 2. You've searched for existing issues, - 3. It was working earlier (otherwise use [this](https://github.com/ente-io/ente/discussions/categories/enhancements)) - 4. It is not about self hosting (otherwise use [this](https://github.com/ente-io/ente/discussions/categories/q-a)) + **Checklist** + 1. You've searched existing [issues](https://github.com/search?q=repo%3Aente-io%2Fente+&type=issues) and [discussions](https://github.com/search?q=repo%3Aente-io%2Fente+&type=discussions) + 2. It was working earlier (otherwise use [enhancements](https://github.com/ente-io/ente/discussions/categories/enhancements)) + 3. It is not about self hosting (for those use [this](https://github.com/ente-io/ente/discussions/categories/q-a)) - type: textarea attributes: label: Description - description: > - Describe the bug and steps to reproduce the behaviour, and how it - differs from the previously working behaviour. - validations: - required: true - type: input attributes: label: Version description: The version can be seen at the bottom of settings. placeholder: e.g. v1.2.3 - - type: input - attributes: - label: Last working version - description: > - The version where things were last known to be working. It is fine - if you don't remember the exact version (mention roughly then), - but **if there just isn't a last working version, then please file - it as an - [enhancement](https://github.com/ente-io/ente/discussions/categories/enhancements))** - (where the community upvotes can be used to help prioritize). - placeholder: e.g. v1.2.3 - type: dropdown attributes: label: What product are you using? diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 242cc2b65c..f4b90454e2 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,54 +1,42 @@ # Contributing -First and foremost, thank you for your interest in contributing to Ente 🙏 - -There are many ways to contribute, and most of them don't require writing code. - -* [Spread the word](#spread-the-word) -* [Engage with the community](#engage-with-the-community) -* [Translate](#translate) -* [Document](#document) - +- [Spread the word](#spread-the-word) +- [Engage with the community](#engage-with-the-community) +- [Translate](#translate) +- [Document](#document) ## Spread the word -This is perhaps the most impactful contribution you can make. [Spread the -word](https://help.ente.io/photos/features/referral-program/). Online on your -favorite social media channels. Offline to your friends and family who are -looking for a privacy-friendly alternative to big tech. +**This is the most impactful contribution you can make**. + +[Spread the word](https://help.ente.io/photos/features/referral-program/). Online on your favorite social media channels. Offline to your friends and family who are looking for a privacy-friendly alternative to big tech. ## Engage with the community -Just hang around, enjoy the vibe. Answer someone's query on our -[Discord](https://discord.gg/z2YVKkycX3), or pile on in the sporadic #off-topic -rants there. Chuckle (or wince!) at our [Twitter](https://twitter.com/enteio) -memes. Suggest a new feature in our [Github -Discussions](https://github.com/ente-io/ente/discussions/new?category=enhancements), -or upvote the existing ones that you feel we should focus on first. Provide your -opinion on existing threads. +Just hang around, enjoy the vibe. The Ente community — the people who are building Ente, and the people who are using Ente — hang out at various places depending on their proclivity: -These might seem like small things, but it provides us energy. Knowing that -there is a community of people who care for what we are building. +- [Discord](https://discord.ente.io) +- [Mastodon](https://fosstodon.org/@ente) +- [X / Twitter](https://twitter.com/enteio) +- [Github Discussions](https://github.com/ente-io/ente/discussions) + +Just being around might seem a small thing, but it provides us energy. Knowing that there is a community of people who care for what we are building, **who want us to do better**. ## Translate -If you're interested in helping out with translation, please visit our Crowdin -projects to get started: - -| Project | | -| ------------- | ------------- | -| [Auth](https://crowdin.com/project/ente-authenticator-app) | [![Crowdin](https://badges.crowdin.net/ente-authenticator-app/localized.svg)](https://crowdin.com/project/ente-authenticator-app) | -| [Photos](https://crowdin.com/project/ente-photos-app) | [![Crowdin](https://badges.crowdin.net/ente-photos-app/localized.svg)](https://crowdin.com/project/ente-photos-app) | -| [Photos Web / Desktop](https://crowdin.com/project/ente-photos-web) | [![Crowdin](https://badges.crowdin.net/ente-photos-web/localized.svg)](https://crowdin.com/project/ente-photos-web) | +Visit our Crowdin projects to help with translations: +| Project | | +| ------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | +| [Auth](https://crowdin.com/project/ente-authenticator-app) | [![Crowdin](https://badges.crowdin.net/ente-authenticator-app/localized.svg)](https://crowdin.com/project/ente-authenticator-app) | +| [Photos](https://crowdin.com/project/ente-photos-app) | [![Crowdin](https://badges.crowdin.net/ente-photos-app/localized.svg)](https://crowdin.com/project/ente-photos-app) | +| [Photos Web / Desktop](https://crowdin.com/project/ente-photos-web) | [![Crowdin](https://badges.crowdin.net/ente-photos-web/localized.svg)](https://crowdin.com/project/ente-photos-web) | If your language is not listed for translation, please [create a GitHub issue](https://github.com/ente-io/ente/issues/new?title=Request+for+New+Language+Translation&body=Language+name%3A+%0AProject%3A+auth%2Fphotos%2Fboth) to have it added. It is okay to have partial translations. Once ~90% of the strings in a language get translated, we will start surfacing it in the apps. -Thank you for your support. - ## Document The help guides and FAQs for users of Ente products are also open source, and @@ -60,25 +48,9 @@ See [docs/](docs/README.md) for how to edit these documents. ## Code contributions -Code is a small aspect of community, and the ways mentioned above are more -important in helping us. But if you'd _really_ like to contribute code, it is -best to start small. Consider some well-scoped changes, say like adding more -[custom icons to auth](auth/docs/adding-icons.md). +If you'd like to contribute code, it is best to start small. Consider some well-scoped changes, say like adding more [custom icons to auth](auth/docs/adding-icons.md), or fixing a specific bug. -Each of the individual product/platform specific directories in this repository -have instructions on setting up a dev environment. - -For anything beyond trivial bug fixes, please use -[discussions](https://github.com/ente-io/ente/discussions) instead of performing -code changes directly. - -> [!TIP] -> -> Please remember that code is a important, but small, part of the overall big -> picture that makes a product a joy to use. Something that's easy in code is -> not necessarily the right choice for the product as a whole. So we'll repeat - -> there are other ways to contribute than code that we'd request you to -> consider. +Code that changes the behaviour of the product might not get merged, at least not initially. The PR can serve as a discussion bed, but you might find it easier to just start a discussion instead, or post your perspective in the (likely) existing thread about the behaviour change or new feature you wish for. ## Leave a review or star