diff --git a/CHANGELOG b/CHANGELOG index b2bb084fa..4281f3295 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,7 @@ +KeePassDX(4.1.1) + * Fix date parser #1933 + * Fix domain search #1820 #1936 + KeePassDX(4.1.0) * Generate keyfile #1290 * Hide template group #1894 diff --git a/app/build.gradle b/app/build.gradle index c70ab51f2..123f45894 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,8 +11,8 @@ android { applicationId "com.kunzisoft.keepass" minSdkVersion 15 targetSdkVersion 34 - versionCode = 132 - versionName = "4.1.0" + versionCode = 133 + versionName = "4.1.1" multiDexEnabled true testApplicationId = "com.kunzisoft.keepass.tests" diff --git a/app/src/main/java/com/kunzisoft/keepass/autofill/AutofillHelper.kt b/app/src/main/java/com/kunzisoft/keepass/autofill/AutofillHelper.kt index 7af54b23f..b0af5bf53 100644 --- a/app/src/main/java/com/kunzisoft/keepass/autofill/AutofillHelper.kt +++ b/app/src/main/java/com/kunzisoft/keepass/autofill/AutofillHelper.kt @@ -192,7 +192,7 @@ object AutofillHelper { } else { datasetBuilder.addValueToDatasetBuilder( it, - AutofillValue.forDate(entryInfo.expiryTime.toJavaMilliseconds()) + AutofillValue.forDate(entryInfo.expiryTime.toMilliseconds()) ) } } diff --git a/app/src/main/res/values-b+yue+Hant/strings.xml b/app/src/main/res/values-b+yue+Hant/strings.xml index 622a022f9..77162e906 100644 --- a/app/src/main/res/values-b+yue+Hant/strings.xml +++ b/app/src/main/res/values-b+yue+Hant/strings.xml @@ -52,8 +52,7 @@ 複製%1$s去剪貼簿 用作預設資料庫 數字 - KeePassDX © %1$d Kunzisoft;呢個係<strong>冇廣告</strong>嘅<strong>開源</strong>軟件。 -\n你可以喺遵循<strong>GPL 3</strong>或者更高版本嘅情況下重新發佈,而Kunzisoft對此不帶有任何擔保。 + KeePassDX © %1$d Kunzisoft;呢個係<strong>冇廣告</strong>嘅<strong>開源</strong>軟件。 \n你可以喺遵循<strong>GPL 3</strong>或者更高版本嘅情況下重新發佈,而Kunzisoft對此不帶有任何擔保。 <strong>唔收集用戶資料。</strong>,呢個應用程式唔會連接任何伺服器,只會喺裝置上運作,完全尊重用戶私穩。 為程式能夠<strong>保持自主</strong>、<strong>修復漏洞</strong>、<strong>新增功能</strong>同<strong>保持持續開發</strong>,有賴你的<strong>貢獻</strong>。 確認密碼 diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml index beb9e7cea..07aed7e70 100644 --- a/app/src/main/res/values-bg/strings.xml +++ b/app/src/main/res/values-bg/strings.xml @@ -235,8 +235,7 @@ Теми, цветове, атрибути Подготвяне… Цвят на фона на запис - KeePassDX © %1$d Kunzisoft е приложение с <strong>отворен код</strong> и <strong>без реклами</strong>. -\nРазпространява се под лиценза <strong>GPLv3</strong> без каквато и да е гаранция. + KeePassDX © %1$d Kunzisoft е приложение с <strong>отворен код</strong> и <strong>без реклами</strong>. \nРазпространява се под лиценза <strong>GPLv3</strong> без каквато и да е гаранция. Биометрия, удостоверяване Шифроване, функция за извличане на ключ Настройки на главната парола @@ -679,4 +678,6 @@ Светла Тъмна Презаредете последните промени в хранилището. + Създаване на файл с ключ + Възли \ No newline at end of file diff --git a/app/src/main/res/values-en-rGB/strings.xml b/app/src/main/res/values-en-rGB/strings.xml index dce2931ea..8d6940078 100644 --- a/app/src/main/res/values-en-rGB/strings.xml +++ b/app/src/main/res/values-en-rGB/strings.xml @@ -89,8 +89,7 @@ Add attachment Remove field Update - KeePassDX © %1$d Kunzisoft is <strong>open source</strong> and <strong>without advertising</strong>. -\nIt is provided as is, under <strong>GPLv3</strong> license, without any warranty. + KeePassDX © %1$d Kunzisoft is <strong>open source</strong> and <strong>without advertising</strong>. \nIt is provided as is, under <strong>GPLv3</strong> license, without any warranty. <strong>No user data is retrieved</strong>, this application does not connect to any server, works only locally and fully respects the privacy of users. Cancel Notes diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 6926fb4a3..9e8dde057 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -41,8 +41,7 @@ Descifrando contenido de la base de datos… Utilizar como base de datos por defecto Dígitos - KeePassDX © %1$d Kunzisoft es de <strong>código abierto</strong> y <strong>sin publicidad</strong>. -\nSe proporciona tal cual, bajo licencia <strong>GPLv3</strong>, sin ninguna garantía. + KeePassDX © %1$d Kunzisoft es <strong>de código abierto</strong> y <strong>sin publicidad</strong>.\n\nSe proporciona tal cual, bajo la licencia <strong>GPLv3</strong>, sin ninguna garantía. Abrir la caja fuerte existente Accedido Cancelar @@ -119,9 +118,7 @@ Versión de base de datos incompatible. Mayúsculas Versión %1$s - Introduzca la contraseña y/o el cerrojo para desbloquear su base de datos. -\n -\nRealice un respaldo de su archivo de base de datos en un lugar seguro después de cada modificación. + Introduzca la contraseña y/o el archivo de claves para desbloquear tu base de datos.\n\nHaz una copia de seguridad de tu archivo de la base de datos en un lugar seguro después de cada cambio. Pequeño Mediano @@ -246,7 +243,7 @@ A diferencia de muchas aplicaciones de gestión de contraseñas, esta <strong>no tiene publicidad</strong>, es <strong>libre, con licencia «copyleft»</strong> y no recopila datos personales en sus servidores, sin importar la versión que use. Al comprar la versión pro, tendrá acceso al <strong>estilo visual </strong>y ayudará especialmente a <strong>la realización de proyectos comunitarios.</strong> Este <strong>estilo visual</strong> está disponible gracias a su generosidad. - Para mantener nuestra libertad y estar siempre vigente, contamos con tu <strong>contribución.</strong> + Al <strong>colaborar</strong> en el proyecto (monetariamente, código, traducción), ayudará a que siga existiendo y prosperando, y también será la elección para el procedimiento de desbloqueo del <strong>tema</strong>. Esta función está <strong>en desarrollo</strong> y requiere de tu <strong>contribución</strong> para estar disponible dentro de poco. Al comprar la versión <strong>pro</strong>, Al <strong>contribuir</strong>, @@ -361,7 +358,7 @@ No se puede guardar la base de datos. Este texto no coincide con el elemento requerido. No se puede crear el archivo de la base de datos. - Parar lograr <strong>mantener nuestra libertad</strong>, <strong>corregir errores</strong>, <strong>añadir funciones</strong> y <strong>estar siempre activos</strong>, contamos con tu <strong>contribución</strong>. + Para <strong>mantener nuestra libertad</strong>, <strong>corregir errores</strong>, <strong>añadir funciones</strong> y <strong>estar siempre activos</strong>, contamos con tu colaboración. Añadir elemento ¡Completado! Finalizando… @@ -434,9 +431,7 @@ Cargue un archivo adjunto a la entrada para guardar datos externos importantes. No se muestran las entradas caducadas La eliminación de datos no vinculados puede reducir el tamaño de tu base de datos, pero también puede eliminar los datos usados por los complementos de KeePass. - Una base de datos de KeePass solo debe contener pequeños archivos de utilidad (como archivos clave PGP). -\n -\nTu base de datos puede llegar a ser muy grande y reducir el rendimiento con esta carga. + Se supone que una base de datos de KeePass solo contiene pequeños archivos de utilidades (como archivos de claves PGP).\n\nTu base de datos puede llegar a ser muy grande y reducir el rendimiento con esta carga. Grupo de la papelera de reciclaje Filtrar Elimina los archivos adjuntos contenidos en la base de datos pero no vinculados a un apunte @@ -649,9 +644,9 @@ Tipo Titular Conteo de caracteres: %1$d Modo captura de pantalla - La llave física no está admitida. - <strong>No se recupera ningún dato del usuario</strong>, esta aplicación no se conecta a ningún servidor, funciona solo localmente y respeta completamente la privacidad del usuario. - No se puede fusionar desde una base de datos kdb + La llave por hardware no es compatible. + <strong>No se recupera ningún dato del usuario</strong>, esta aplicación no se conecta a ningún servidor, funciona solo localmente y respeta plenamente la privacidad de los usuarios. + No se puede fusionar con un archivo de base de datos kdb Cancelado por el usuario. No se puede obtener la respuesta del desafío. Auto-teclear @@ -661,7 +656,7 @@ Desafío ya solicitado Respuesta ya recibida. Se necesita un controlador para %1$s. - La ubicación de la base de datos es desconocida, no se puede realizar la acción de la base de datos. + Se desconoce la ubicación de la base de datos, no puede realizar la acción de base de datos. La clave no puede estar vacía. Archivo dañado. Recordar llaves físicas @@ -688,9 +683,7 @@ Temas, colores, atributos Desbloquear Validar la entrada - No olvides validar tu entrada y guardar tu base de datos. -\n -\nSi se activa un bloqueo automático y olvidas que estabas haciendo una modificación, corres el riesgo de perder tus datos. + No olvide validar tu inicio de sesión y guardar tu base de datos.\n\nSi se activa un bloqueo automático y olvidas que estabas haciendo una modificación, corres el riesgo de perder tus datos. Clásico Divino Bosque @@ -703,4 +696,11 @@ Claro Oscuro Recargue la base de datos con los últimos cambios. + Nodos + Calcula recursivamente el número de entradas en un grupo + No se recomienda agregar un archivo de clave grande , esto puede impedir que se abra la base de datos. + Ocultar plantillas + Generar archivo de claves + Número recursivo de entradas + Las plantillas no se muestran \ No newline at end of file diff --git a/app/src/main/res/values-fil/strings.xml b/app/src/main/res/values-fil/strings.xml index ff952d820..8e9e69bfa 100644 --- a/app/src/main/res/values-fil/strings.xml +++ b/app/src/main/res/values-fil/strings.xml @@ -75,8 +75,7 @@ I-update Isara ang mga field Piliin para kopyahin ang %1$s sa clipboard - KeePassDX © %1$d Ang Kunzisoft ay <strong>open source</strong> at <strong>walang advertising</strong>. -\nIbinigay ito nang as is, sa ilalim <strong>GPLv3</strong> na lisensya, nang walang anumang warranty. + KeePassDX © %1$d Ang Kunzisoft ay <strong>open source</strong> at <strong>walang advertising</strong>. \nIbinigay ito nang as is, sa ilalim <strong>GPLv3</strong> na lisensya, nang walang anumang warranty. <strong>Walang user data ay kinukuha</strong>, ang aplikasyon na ito ay hindi kumokonekta sa anumang server, gumanagana ng lokal at ganap na ginagalang ang pagkapribado ng mga gumagamit. Para <strong>panatilihin ang aming kalayaan</strong>, <strong>ayusin ang mga bug</strong>, <strong>magdagdag ng mga feature</strong> at <strong>maging palaging aktibo</strong>, umaasa kami sa iyong <strong>kontribusyon</strong>. Na-access diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 8c76bfd83..d83a25643 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -245,7 +245,7 @@ Contrairement à beaucoup d’applications de gestion de mots de passe, cette application est <strong>sans publicité</strong>, <strong>libre sous licence copyleft</strong> et ne collecte pas de données personnelles sur ses serveurs, peu importe la version que vous utilisez. En achetant la version pro, vous aurez accès à ce <strong>style visuelle</strong> et vous aiderez notamment <strong>la réalisation de projets communautaires.</strong> Ce <strong>style visuel</strong> est disponible grâce à votre générosité. - Afin de garder notre liberté et d’être toujours actifs, nous comptons sur votre <strong>contribution.</strong> + En <strong>contribuant</strong> au projet (financièrement, code, traduction), vous l\'aiderez à continuer à vivre et à prospérer, et vous serez également éligible à la procédure de déblocage du <strong>theme</strong>. Cette fonctionnalité est <strong>en cours de développement</strong> et nécessite votre <strong>contribution</strong> pour être bientôt disponible. En achetant la version <strong>pro</strong>, En <strong>contribuant</strong>, @@ -699,4 +699,11 @@ \n \nSi un verrouillage automatique est activé et que vous oubliez que vous étiez en train d\'effectuer une modification, vous risquez de perdre vos données. Recharger la base de données avec les dernières modifications. + Générer un fichier clé + Nœuds + Nombre d\'entrées récursif + Calcule récursivement le nombre d\'entrées dans un groupe + Il n\'est pas recommandé d\'ajouter un fichier clé volumineux, car cela pourrait empêcher l\'ouverture de la base de données. + Cacher les modèles + Les modèles ne sont pas affichés \ No newline at end of file diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index d47d7e4c5..c0df37ef4 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -31,11 +31,11 @@ Zárójelek Az adatbázisfájlok létrehozásához, megnyitásához és mentéséhez szükség van egy fájlkezelőre, amely képes fogadni az ACTION_CREATE_DOCUMENT és ACTION_OPEN_DOCUMENT Intenteket. Vágólap törölve - Vágólap hiba + Vágólaphiba Egyes eszközök nem engedik, hogy az alkalmazások használják a vágólapot. A vágólap törlése sikertelen Vágólap időkorlátja - A vágólapon tárolás időtartama (ha támogatja az eszköz) + A vágólapon való tárolás időtartama (ha támogatja az eszköz) %1$s másolása a vágólapra Adatbázis létrehozása… Adatbázis @@ -55,14 +55,14 @@ Módosítva Jelszó Mentés - Titulus + Cím URL Felhasználónév Az Arcfour adatfolyam-titkosítás nem támogatott. Ez az URI nem kezelhető a KeePassDX-ben. Nem sikerült létrehozni a fájlt Az adatbázist nem lehet olvasni. - Győződjön meg róla, hogy az útvonal helyes. + Győződjön meg arról, hogy az útvonal helyes. Adjon meg egy nevet. Válasszon egy kulcsfájlt. Nincs elég memória a teljes adatbázis betöltéséhez. @@ -599,7 +599,7 @@ Az adatbázis újratöltése törli a helyileg módosított adatokat. Sablonok Nem kérhető le a válasz a kihívásból. - Nem lehet egyesíteni az adatbázisfájllal. + Nem lehet egyesíteni egy kdb adatbázisfájllal. Entrópia: %1$s bit Keresési képernyő Nem helyezhet át ide csoportot. @@ -701,4 +701,11 @@ Világos Sötét Adatbázis újratöltése a legújabb módosításokkal. + Csomópontok + Rekurzív bejegyzések száma + Rekurzívan kiszámítja a csoportban lévő bejegyzések számát + Nagy méretű kulcsfájl hozzáadása nem ajánlott, mivel ez megakadályozhatja az adatbázis megnyitását. + A sablonok nem jelennek meg + Kulcsfájl előállítása + Sablonok elrejtése \ No newline at end of file diff --git a/app/src/main/res/values-nb/strings.xml b/app/src/main/res/values-nb/strings.xml index c7d6acb96..9b183bd69 100644 --- a/app/src/main/res/values-nb/strings.xml +++ b/app/src/main/res/values-nb/strings.xml @@ -263,8 +263,7 @@ I motsetning til mange passordadministrasjons-apper er denne <strong>annonsefri</strong>, <strong>copylefted libre-programvare</strong> og samler ikke inn personlige data på serverne, uansett hvilken versjon du bruker. Ved kjøp av pro-versjonen, vil du få tilgang til denne <strong>visuelle funksjonen</strong> og du vil bidra med støtte til <strong> realisering av fellesskaps prosjekter.</strong> Denne <strong>visuelle stilen</strong> er tilgjengelig takket være din generøsitet. - For å beholde vår frihet og alltid være aktive, stoler vi på dine <strong>bidrag.</strong> - + For å beholde vår frihet og alltid være aktive, stoler vi på dine <strong>bidrag.</strong> Denne funksjonen er <strong>under utvikling</strong> og krever <strong>bidrag</strong> for å bli tilgjengelig snart. Ved å kjøpe <strong>pro</strong>-versjonen, Ved å <strong>bidra</strong>, diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 59aee6bc9..50596ac90 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -130,8 +130,7 @@ Błąd schowka Niektóre urządzenia nie pozwalają aplikacjom korzystać ze schowka. Nie udało się wyczyścić schowka - KeePassDX © %1$d Kunzisoft jest <strong>open source</strong> i <strong>bez reklam</strong>. -\nJest on dostarczany w stanie, zgodnie z licencją <strong>GPLv3</strong> bez żadnych gwarancji. + KeePassDX © %1$d Kunzisoft jest <strong>open source</strong> i <strong>bez reklam</strong>. \nJest on dostarczany w stanie, zgodnie z licencją <strong>GPLv3</strong> bez żadnych gwarancji. Nie znaleziono danych wejściowych. Nie można załadować bazy danych. Nie można załadować klucza. Spróbuj zmniejszyć użycie pamięć KDF. @@ -200,7 +199,7 @@ Odblokowywanie biometryczne Umożliwia zeskanowanie danych biometrycznych w celu otwarcia bazy danych Usuń klucze szyfrowania - Usuń wszystkie klucze szyfrowania związane z rozpoznawaniem odblokowania urządzenia + Usuń wszystkie klucze szyfrowania związane z rozpoznawaniem odblokowania urządzenia Nie można uruchomić tej funkcji. Urządzenie pracuje na systemie Android %1$s, ale wymaga wersji %2$s lub nowszej. Nie można znaleźć odpowiedniego sprzętu. @@ -268,7 +267,7 @@ W przeciwieństwie do wielu aplikacji do zarządzania hasłami, ta jest wolna od <strong>reklam</strong>, <strong>jest wolnym oprogramowaniem objętym klauzulą copyleft</strong> i nie zbiera danych osobowych na swoich serwerach, bez względu na to, jakiej wersji używasz. Kupując wersję pro, będziesz mieć dostęp do <strong>stylu wizualnego</strong> a szczególnie pomożesz <strong> zrealizować projekty społecznościowe.</strong> Ten <strong>styl wizualny</strong> jest dostępny dzięki Twojej hojności. - Aby zachować naszą wolność i być zawsze aktywnym, liczymy na Twój <strong>wkład.</strong> + Poprzez <strong>wsparcie</strong> projektu (pieniężne, kodowanie, tłumaczenie) pomożesz mu istnieć i rozwijać się, a także uzyskasz dostęp do procedury odblokowywania <strong>motywów</strong>. Ta funkcja jest <strong>rozwojowa</strong> i wymaga Twojego <strong>wkładu</strong>, aby być wkrótce dostępną. Kupując wersję <strong>pro</strong>, Przez <strong>przyczynianie się</strong>, @@ -408,13 +407,13 @@ Ukryj wygasłe wpisy Wygasłe wpisy nie są wyświetlane Kontakt - Aby <strong>zachować naszą wolność</strong>, <strong>naprawiać błędy</strong>, <strong>dodawać funkcje</strong> i <strong> być zawsze aktywnym</strong>, liczymy na Twój <strong>wkład</strong>. + Aby <strong>zachować naszą wolność</strong>, <strong>naprawiać błędy</strong>, <strong>dodawać funkcje</strong> i <strong> być zawsze aktywnym</strong>, liczymy na Twój <strong>wkład</strong>. Szybkie wyszukiwanie Wyszukiwanie po otwarciu bazy danych Zapamiętaj lokalizacje baz danych Śledzi, gdzie przechowywane są bazy danych Zapamiętaj lokalizacje plików kluczy - Śledzi, gdzie przechowywane są pliki z kluczami + Śledzi, gdzie przechowywane są pliki z kluczami Pokaż ostatnie pliki Pokaż lokalizacje najnowszych baz danych Ukryj uszkodzone łącza do bazy danych @@ -428,7 +427,7 @@ Odrzuć Odrzucić zmiany\? Walidacja - Wyświetla przycisk blokady w interfejsie użytkownika + Wyświetla przycisk blokady w interfejsie użytkownika Pokaż przycisk blokady Ustawienia autouzupełniania Dostęp do pliku anulowany przez menedżera plików @@ -438,7 +437,7 @@ Lista zablokowanych, która uniemożliwia automatyczne wypełnianie aplikacji Filtr Wyszukiwanie subdomen - Wyszukiwanie domen internetowych z ograniczeniami związanymi z subdomenami + Wyszukiwanie domen internetowych z ograniczeniami związanymi z subdomenami Ten tekst nie pasuje do żądanej pozycji. Dodaj pozycję Lista zablokowanych, która uniemożliwia automatyczne wypełnianie domen internetowych @@ -666,7 +665,7 @@ Wybierz klucz sprzętowy. Zniekształcony XML. Tryb zrzutu ekranu - <strong>Żadne dane użytkownika nie są pobierane</strong>, ta aplikacja nie łączy się z żadnym serwerem, działa tylko lokalnie i w pełni szanuje prywatność użytkowników. + <strong>Żadne dane użytkownika nie są pobierane</strong>, ta aplikacja nie łączy się z żadnym serwerem, działa tylko lokalnie i w pełni szanuje prywatność użytkowników. Scalanie zostało pomyślnie zakończone Informacje Wyszukiwanie, blokada, historia, właściwości @@ -701,4 +700,11 @@ Ciemny Prosty Załaduj ponownie bazę danych z najnowszymi zmianami. + Węzły + Nie zaleca się dodawania dużego pliku klucza, ponieważ może to uniemożliwić otwarcie bazy danych. + Wygeneruj plik klucza + Rekurencyjnie oblicza liczbę wpisów w grupie + Rekurencyjna liczba wpisów + Ukryj szablony + Szablony nie są wyświetlane \ No newline at end of file diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index 1ca9ff7ea..5d4c42afa 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -178,8 +178,7 @@ Mai puțin Niciodată Nu există rezultate de căutare - KeePassDX © %1$d Kunzisoft este <strong>open source</strong> și <strong>fără reclame</strong>. -\nEste furnizat ca atare, sub licență <strong>GPLv3</strong>, fără nicio garanție. + KeePassDX © %1$d Kunzisoft este <strong>open source</strong> și <strong>fără reclame</strong>. \nEste furnizat ca atare, sub licență <strong>GPLv3</strong>, fără nicio garanție. Pentru a ne <strong>păstra libertatea</strong>, <strong>pentru a remedia erori</strong>, <strong>pentru a adăuga funcții</strong> și <strong>pentru a fi mereu activi</strong>, ne bazăm pe <strong>contribuția</strong> dvs. Ascundeți parolele Mascați parolele (***) în mod implicit diff --git a/app/src/main/res/values-th/strings.xml b/app/src/main/res/values-th/strings.xml index 67a4e4213..648482640 100644 --- a/app/src/main/res/values-th/strings.xml +++ b/app/src/main/res/values-th/strings.xml @@ -666,4 +666,13 @@ พึงระลึกไว้ว่าตรวจสอบข้อมูลรายการและบันทึกฐานข้อมูลไว้ให้ดี \n \nหากการล็อกอัตโนมัติเปิดใช้งานและลีมบันทึกการเปลี่ยนแปลงไว้ คุณมีความเสียงที่ข้อมูลจะสูญหาย + สว่าง + โหลดฐานข้อมูลใหม่ด้วยการเปลี่ยนแปลงล่าสุด + ป่าไม้ + คลาสสิก + เรียบง่าย + แสงจันทร์ + พระอาทิตย์ + ตามสีของระบบ + มืด \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 6756d155a..db640445e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -628,7 +628,7 @@ Unlike many password management apps, this one is <strong>ad-free</strong>, <strong>copylefted libre software</strong> and does not collect personal data on its servers, no matter what version you use. By buying the pro version, you will have access to this <strong>visual style</strong> and you will especially help <strong>the realization of community projects.</strong> This <strong>visual style</strong> is available thanks to your generosity. - By <strong>contributing</strong> to the project <i>(monetarily, code, translation),</i>, you will help it to continue to live and thrive, and you will also be eligible for the <strong>theme</strong> unlocking procedure. + By <strong>contributing</strong> to the project <i>(monetarily, code, translation)</i>, you will help it to continue to live and thrive, and you will also be eligible for the <strong>theme</strong> unlocking procedure. This feature is <strong>under development</strong> and requires your <strong>contribution</strong> to be available soon. By buying the <strong>pro</strong> version, By <strong>contributing</strong>, diff --git a/database/src/main/java/com/kunzisoft/keepass/database/element/DateInstant.kt b/database/src/main/java/com/kunzisoft/keepass/database/element/DateInstant.kt index 3326bd3f1..198f1a1cb 100644 --- a/database/src/main/java/com/kunzisoft/keepass/database/element/DateInstant.kt +++ b/database/src/main/java/com/kunzisoft/keepass/database/element/DateInstant.kt @@ -21,6 +21,7 @@ package com.kunzisoft.keepass.database.element import android.os.Parcel import android.os.Parcelable +import android.util.Log import com.kunzisoft.keepass.utils.readEnum import com.kunzisoft.keepass.utils.readSerializableCompat import com.kunzisoft.keepass.utils.writeEnum @@ -60,11 +61,11 @@ class DateInstant : Parcelable { } private fun parse(value: String, type: Type): Instant { - return when (type) { - Type.DATE -> Instant(dateFormat.parseDateTime(value) ?: DateTime()) - Type.TIME -> Instant(timeFormat.parseDateTime(value) ?: DateTime()) - else -> Instant(dateTimeFormat.parseDateTime(value) ?: DateTime()) - } + return Instant(when (type) { + Type.DATE_TIME -> dateTimeFormat.parseDateTime(value) ?: DateTime() + Type.DATE -> dateFormat.parseDateTime(value) ?: DateTime() + Type.TIME -> timeFormat.parseDateTime(value) ?: DateTime() + }) } constructor(string: String, type: Type = Type.DATE_TIME) { @@ -175,20 +176,14 @@ class DateInstant : Parcelable { } } - fun toDotNetSeconds(): Long { - val duration = Duration(JAVA_EPOCH_DATE_TIME, mInstant) - val seconds = duration.millis / 1000L - return seconds + EPOCH_OFFSET - } - - fun toJavaMilliseconds(): Long { + /** + * Returns: + * the number of milliseconds since 1970-01-01T00:00:00Z + */ + fun toMilliseconds(): Long { return mInstant.millis } - fun toDateTimeSecondsFormat(): String { - return dateTimeSecondsFormat.print(mInstant) - } - override fun toString(): String { return when (type) { Type.DATE -> dateFormat.print(mInstant) @@ -239,6 +234,8 @@ class DateInstant : Parcelable { companion object { + private val TAG = DateInstant::class.java.name + private val DOT_NET_EPOCH_DATE_TIME = DateTime(1, 1, 1, 0, 0, 0, DateTimeZone.UTC) private val JAVA_EPOCH_DATE_TIME = DateTime(1970, 1, 1, 0, 0, 0, DateTimeZone.UTC) private val EPOCH_OFFSET = (JAVA_EPOCH_DATE_TIME.millis - DOT_NET_EPOCH_DATE_TIME.millis) / 1000L @@ -252,27 +249,42 @@ class DateInstant : Parcelable { val IN_ONE_HOUR_TIME = DateInstant( Instant.now().plus(Duration.standardHours(1)), Type.TIME) - val dateTimeSecondsFormat: DateTimeFormatter = + private val ISO8601Format: DateTimeFormatter = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss'Z'") .withZoneUTC() - var dateTimeFormat: DateTimeFormatter = + private var dateTimeFormat: DateTimeFormatter = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm'Z'") .withZoneUTC() - var dateFormat: DateTimeFormatter = + private var dateFormat: DateTimeFormatter = DateTimeFormat.forPattern("yyyy-MM-dd'Z'") .withZoneUTC() - var timeFormat: DateTimeFormatter = + private var timeFormat: DateTimeFormatter = DateTimeFormat.forPattern("HH:mm'Z'") .withZoneUTC() - fun fromDotNetSeconds(seconds: Long): DateInstant { - val dt = DOT_NET_EPOCH_DATE_TIME.plus(seconds * 1000L) + fun Long.fromDotNetSeconds(): DateInstant { + val dt = DOT_NET_EPOCH_DATE_TIME.plus(this * 1000L) // Switch corrupted dates to a more recent date that won't cause issues on the client return DateInstant((if (dt.isBefore(JAVA_EPOCH_DATE_TIME)) { JAVA_EPOCH_DATE_TIME } else dt).toInstant()) } - fun fromDateTimeSecondsFormat(value: String): DateInstant { - return DateInstant(dateTimeSecondsFormat.parseDateTime(value).toInstant()) + fun DateInstant.toDotNetSeconds(): Long { + val duration = Duration(JAVA_EPOCH_DATE_TIME, mInstant) + val seconds = duration.millis / 1000L + return seconds + EPOCH_OFFSET + } + + fun String.fromISO8601Format(): DateInstant { + return DateInstant(try { + ISO8601Format.parseDateTime(this).toInstant() + } catch (e: Exception) { + Log.e(TAG, "Unable to parse date time $this", e) + Instant.now() + }) + } + + fun DateInstant.toISO8601Format(): String { + return ISO8601Format.print(this.instant) } @JvmField diff --git a/database/src/main/java/com/kunzisoft/keepass/database/file/input/DatabaseInputKDBX.kt b/database/src/main/java/com/kunzisoft/keepass/database/file/input/DatabaseInputKDBX.kt index 09d2be6d8..9f903098f 100644 --- a/database/src/main/java/com/kunzisoft/keepass/database/file/input/DatabaseInputKDBX.kt +++ b/database/src/main/java/com/kunzisoft/keepass/database/file/input/DatabaseInputKDBX.kt @@ -26,6 +26,8 @@ import com.kunzisoft.keepass.database.crypto.CipherEngine import com.kunzisoft.keepass.database.crypto.CrsAlgorithm import com.kunzisoft.keepass.database.crypto.HmacBlock import com.kunzisoft.keepass.database.element.* +import com.kunzisoft.keepass.database.element.DateInstant.Companion.fromDotNetSeconds +import com.kunzisoft.keepass.database.element.DateInstant.Companion.fromISO8601Format import com.kunzisoft.keepass.database.element.binary.BinaryData import com.kunzisoft.keepass.database.element.binary.BinaryData.Companion.BASE64_FLAG import com.kunzisoft.keepass.database.element.database.CompressionAlgorithm @@ -829,7 +831,7 @@ class DatabaseInputKDBX(database: DatabaseKDBX) var utcDate = DateInstant() if (mDatabase.kdbxVersion.isBefore(FILE_VERSION_40)) { try { - utcDate = DateInstant.fromDateTimeSecondsFormat(sDate) + utcDate = sDate.fromISO8601Format() } catch (e: ParseException) { // Catch with null test below } @@ -841,7 +843,7 @@ class DatabaseInputKDBX(database: DatabaseKDBX) buf = buf8 } val seconds = bytes64ToLong(buf) - utcDate = DateInstant.fromDotNetSeconds(seconds) + utcDate = seconds.fromDotNetSeconds() } return utcDate } diff --git a/database/src/main/java/com/kunzisoft/keepass/database/file/output/DatabaseOutputKDBX.kt b/database/src/main/java/com/kunzisoft/keepass/database/file/output/DatabaseOutputKDBX.kt index f6eb8a403..2c1168d03 100644 --- a/database/src/main/java/com/kunzisoft/keepass/database/file/output/DatabaseOutputKDBX.kt +++ b/database/src/main/java/com/kunzisoft/keepass/database/file/output/DatabaseOutputKDBX.kt @@ -26,6 +26,8 @@ import com.kunzisoft.encrypt.StreamCipher import com.kunzisoft.keepass.database.crypto.CrsAlgorithm import com.kunzisoft.keepass.database.crypto.kdf.KdfFactory import com.kunzisoft.keepass.database.element.* +import com.kunzisoft.keepass.database.element.DateInstant.Companion.toDotNetSeconds +import com.kunzisoft.keepass.database.element.DateInstant.Companion.toISO8601Format import com.kunzisoft.keepass.database.element.binary.BinaryData.Companion.BASE64_FLAG import com.kunzisoft.keepass.database.element.database.CompressionAlgorithm import com.kunzisoft.keepass.database.element.database.DatabaseKDBX @@ -412,7 +414,7 @@ class DatabaseOutputKDBX(private val mDatabaseKDBX: DatabaseKDBX) @Throws(IllegalArgumentException::class, IllegalStateException::class, IOException::class) private fun writeDateInstant(name: String, date: DateInstant) { if (header!!.version.isBefore(FILE_VERSION_40)) { - writeString(name, date.toDateTimeSecondsFormat()) + writeString(name, date.toISO8601Format()) } else { writeString(name, String( Base64.encode( diff --git a/database/src/main/java/com/kunzisoft/keepass/database/search/SearchHelper.kt b/database/src/main/java/com/kunzisoft/keepass/database/search/SearchHelper.kt index 9692010c5..22c56f05a 100644 --- a/database/src/main/java/com/kunzisoft/keepass/database/search/SearchHelper.kt +++ b/database/src/main/java/com/kunzisoft/keepass/database/search/SearchHelper.kt @@ -154,7 +154,7 @@ class SearchHelper { // subdomain.domain.org stringToCheck.endsWith(".$word", !searchParameters.caseSensitive) || // https://domain.org - stringToCheck.endsWith("\\/$word", !searchParameters.caseSensitive) + stringToCheck.endsWith("/$word", !searchParameters.caseSensitive) // Don't allow mydomain.org }) return true diff --git a/fastlane/metadata/android/en-US/changelogs/133.txt b/fastlane/metadata/android/en-US/changelogs/133.txt new file mode 100644 index 000000000..bb21e2569 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/133.txt @@ -0,0 +1,2 @@ + * Fix date parser #1933 + * Fix domain search #1820 #1936 \ No newline at end of file diff --git a/fastlane/metadata/android/fr-FR/changelogs/133.txt b/fastlane/metadata/android/fr-FR/changelogs/133.txt new file mode 100644 index 000000000..efb55e9f4 --- /dev/null +++ b/fastlane/metadata/android/fr-FR/changelogs/133.txt @@ -0,0 +1,2 @@ + * Correction du parseur de date #1933 + * Correction de la recherche de domaine #1820 #1936 \ No newline at end of file