Translations: Resolve frontend/src/locales/ar.po merge conflicts

This commit is contained in:
Weblate 2022-06-13 23:40:37 +02:00
commit b0211d94e0
43 changed files with 1092 additions and 914 deletions

View file

@ -2,36 +2,40 @@
**By using the software and services we provide, you agree to our [Terms of Service](https://photoprism.app/terms), including our [Privacy Policy](https://photoprism.app/privacy) and the following Code of Conduct. It explains the "dos and donts" when interacting with other community members.**
*Last Updated: May 10, 2022*
*Last Updated: June 12, 2022*
## Rules
Because we want our Code of Conduct to be easy to understand and implement, we have only three basic rules:
Because we want our Code of Conduct to be easy to understand and implement, we have only three basic rules, numbered in order of importance:
(1) Don't panic.
(1) Be respectful, be responsible, be kind.
(2) Don't be evil.
(2) Dont panic.
(3) Dont feed the trolls.
## Examples
## Guidelines
The following non-exhaustive list provides specific guidelines and examples:
Not everyone has experience with Open Source communities and knows what is acceptable. The following guidelines and examples are intended to provide a quick overview in such cases and help avoid the most common pitfalls:
(a) Be respectful, be responsible, be kind, avoid asking for [deadlines](https://docs.photoprism.app/developer-guide/code-quality/#go-slow-before-you-go-fast).
(a) Do not feel entitled to free software, support, or advice, especially if you are not a contributor, [sponsor](https://photoprism.app/membership), or paying customer. Don't ask contributors to report to you and [meet deadlines](https://docs.photoprism.app/developer-guide/code-quality/#go-slow-before-you-go-fast) as if they work for you or owe you something.
(b) Do not feel entitled to free software, support, or advice if you are **not** a [contributor](https://docs.photoprism.app/developer-guide/), [sponsor](https://photoprism.app/membership), or paying customer.
(b) Honor **Rule #2**, [read the docs](https://docs.photoprism.app) and [determine the cause of your problem](https://docs.photoprism.app/getting-started/troubleshooting/) before opening invalid bug reports, starting a public "shitstorm", or insulting other community members in our chat rooms. Aside from being annoying for everyone, it also keeps our team from working on features and improvements that users like you are waiting for.
(c) [Read the docs](https://docs.photoprism.app) and [determine the cause of your problem](https://docs.photoprism.app/getting-started/troubleshooting/) before opening invalid bug reports, starting a public "shitstorm" or insulting other community members in our chat rooms. Aside from being annoying for everyone, it also keeps our team from working on features and improvements that users like you are waiting for.
(d) If you are having a bad day and want to offend someone, please go somewhere else.
(c) Comments and messages that violate **Rule #1** are generally unacceptable, whether public or private. If you are having a bad day and want to offend someone, please go somewhere else. To avoid embarrassing situations, we also recommend that you wait until the worst is over when you've had too much coffee.
## Reporting
We encourage all community members to resolve problems on their own whenever possible. Instances of abusive, harassing, or otherwise unacceptable behavior [may be reported](https://photoprism.app/contact) to us.
We encourage all community members to resolve problems on their own whenever possible. Serious and persistent violations [may be reported](https://photoprism.app/contact) to us.
## Enforcement
Violations may be punished with a [snarky comment](https://www.urbandictionary.com/define.php?term=snarky) and finally a **\*plonk\***[^1], meaning you will be ignored according to **Rule #3**.
In the event of violations such as disrespectful, abusive, harassing, or otherwise unacceptable behavior, these rules will be enforced as necessary to protect everyone's well-being and to ensure that our discussion forums, chat rooms, and other infrastructure can be used as intended.
[^1]: Plonk stands for the metaphorical sound of a user hitting the bottom of the kill file. It was first used in [Usenet forums](https://en.everybodywiki.com/Plonk_(Usenet)), a worldwide distributed discussion system and precursor to the Web.
Initial warnings may be issued in the form of a [snarky comment](https://www.urbandictionary.com/define.php?term=snarky). In serious cases, we will provide a link to this Code of Conduct and make sure offenders don't have to read between the lines.
Getting a simple **\*plonk\***[^1] in response finally signals that we have lost hope and you're being ignored according to **Rule #3**. This old tradition from Usenet days is as time-saving as it is clear. It is not meant in a disrespectful way.
In addition, we may use technical measures to temporarily or permanently restrict your access to our infrastructure, including forums and chats.
[^1]: \*plonk\* including variants such as "Plonk." stands for the metaphorical sound of a user hitting the bottom of the kill file. It was first used in [Usenet forums](https://en.everybodywiki.com/Plonk_(Usenet)), a worldwide distributed discussion system and precursor to the Web.

Binary file not shown.

View file

@ -6,323 +6,329 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"POT-Creation-Date: 2021-12-09 00:51+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Automatically generated\n"
"PO-Revision-Date: 2022-06-01 10:17+0000\n"
"Last-Translator: moutasem1989 <moutasem19891@hotmail.com>\n"
"Language-Team: none\n"
"Language: ar\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
"&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n"
"X-Generator: Weblate 4.12.2\n"
#: messages.go:83
msgid "Unexpected error, please try again"
msgstr ""
msgstr "خطأ غير متوقع ، يرجى المحاولة مرة أخرى"
#: messages.go:84
msgid "Invalid request"
msgstr ""
msgstr "طلب غير صالح"
#: messages.go:85
msgid "Changes could not be saved"
msgstr ""
msgstr "لا يمكن حفظ التغييرات"
#: messages.go:86
#, fuzzy
msgid "Could not be deleted"
msgstr ""
msgstr "لا يمكن الحذف"
#: messages.go:87
#, c-format
msgid "%s already exists"
msgstr ""
msgstr "%s موجود بالفعل"
#: messages.go:88
msgid "Not found"
msgstr ""
msgstr "غير موجود"
#: messages.go:89
msgid "File not found"
msgstr ""
msgstr "لا يمكن العثور على الملف"
#: messages.go:90
msgid "Selection not found"
msgstr ""
msgstr "لا يمكن العثور على التحديد"
#: messages.go:91
msgid "Entity not found"
msgstr ""
msgstr "لا يمكن العثور على الكيان"
#: messages.go:92
msgid "Account not found"
msgstr ""
msgstr "لا يمكن العثور على الحساب"
#: messages.go:93
msgid "User not found"
msgstr ""
msgstr "لا يمكن العثور على المستخدم"
#: messages.go:94
msgid "Label not found"
msgstr ""
msgstr "لا يمكن العثور على التصنيف"
#: messages.go:95
msgid "Album not found"
msgstr ""
msgstr "لا يمكن العثور على الألبوم"
#: messages.go:96
msgid "Subject not found"
msgstr ""
msgstr "لا يمكن العثور على الموضوع"
#: messages.go:97
msgid "Person not found"
msgstr ""
msgstr "لا يمكن العثور على الشخص"
#: messages.go:98
msgid "Face not found"
msgstr ""
msgstr "لا يمكن العثور على الوجه"
#: messages.go:99
msgid "Not available in public mode"
msgstr ""
msgstr "غير متاح في الوضع العام"
#: messages.go:100
msgid "not available in read-only mode"
msgstr ""
msgstr "غير متوفر في وضع القراءة فقط"
#: messages.go:101
msgid "Please log in and try again"
msgstr ""
msgstr "يرجى تسجيل الدخول وإعادة المحاولة"
#: messages.go:102
msgid "Upload might be offensive"
msgstr ""
msgstr "التحميل قد يكون مسيئا"
#: messages.go:103
msgid "No items selected"
msgstr ""
msgstr "لم يتم تحديد أي عناصر"
#: messages.go:104
msgid "Failed creating file, please check permissions"
msgstr ""
msgstr "فشل إنشاء الملف ، يرجى التحقق من الأذونات"
#: messages.go:105
msgid "Failed creating folder, please check permissions"
msgstr ""
msgstr "فشل إنشاء المجلد ، يرجى التحقق من الأذونات"
#: messages.go:106
msgid "Could not connect, please try again"
msgstr ""
msgstr "تعذر الاتصال ، يرجى المحاولة مرة أخرى"
#: messages.go:107
msgid "Invalid password, please try again"
msgstr ""
msgstr "كلمة السر غير صحيحة، برجاء حاول مرة أخرى"
#: messages.go:108
msgid "Feature disabled"
msgstr ""
msgstr "تم تعطيل الميزة"
#: messages.go:109
msgid "No labels selected"
msgstr ""
msgstr "لم يتم تحديد أي تسميات"
#: messages.go:110
msgid "No albums selected"
msgstr ""
msgstr "لم يتم تحديد أي ألبومات"
#: messages.go:111
msgid "No files available for download"
msgstr ""
msgstr "لا توجد ملفات متاحة للتنزيل"
#: messages.go:112
msgid "Failed to create zip file"
msgstr ""
msgstr "فشل إنشاء ملف مضغوط"
#: messages.go:113
msgid "Invalid credentials"
msgstr ""
msgstr "بيانات الاعتماد غير صالحة"
#: messages.go:114
msgid "Invalid link"
msgstr ""
msgstr "ارتباط غير صالح"
#: messages.go:115
msgid "Invalid name"
msgstr ""
msgstr "الاسم غير صالح"
#: messages.go:116
msgid "Busy, please try again later"
msgstr ""
msgstr "مشغول ، يرجى المحاولة مرة أخرى في وقت لاحق"
#: messages.go:119
msgid "Changes successfully saved"
msgstr ""
msgstr "تم حفظ التغييرات بنجاح"
#: messages.go:120
msgid "Album created"
msgstr ""
msgstr "تم إنشاء الألبوم"
#: messages.go:121
msgid "Album saved"
msgstr ""
msgstr "تم حفظ الألبوم"
#: messages.go:122
#, c-format
msgid "Album %s deleted"
msgstr ""
msgstr "تم حذف الألبوم %s"
#: messages.go:123
msgid "Album contents cloned"
msgstr ""
msgstr "تم نسخ محتويات الألبوم"
#: messages.go:124
msgid "File removed from stack"
msgstr ""
msgstr "تمت إزالة الملف من المجموعة"
#: messages.go:125
msgid "File deleted"
msgstr ""
msgstr "تم حذف الملف"
#: messages.go:126
#, c-format
msgid "Selection added to %s"
msgstr ""
msgstr "تمت إضافة التحديد إلى %s"
#: messages.go:127
#, c-format
msgid "One entry added to %s"
msgstr ""
msgstr "تمت إضافة إدخال واحد إلى %s"
#: messages.go:128
#, c-format
msgid "%d entries added to %s"
msgstr ""
msgstr "تمت إضافة %d إدخال إلى %s"
#: messages.go:129
#, c-format
msgid "One entry removed from %s"
msgstr ""
msgstr "تمت إزالة إدخال واحد من %s"
#: messages.go:130
#, c-format
msgid "%d entries removed from %s"
msgstr ""
msgstr "تمت إزالة %d إدخال من %s"
#: messages.go:131
msgid "Account created"
msgstr ""
msgstr "تم إنشاء الحساب"
#: messages.go:132
msgid "Account saved"
msgstr ""
msgstr "تم حفظ الحساب"
#: messages.go:133
msgid "Account deleted"
msgstr ""
msgstr "تم حذف الحساب"
#: messages.go:134
msgid "Settings saved"
msgstr ""
msgstr "تم حفظ الإعدادات"
#: messages.go:135
msgid "Password changed"
msgstr ""
msgstr "تم تغيير كلمة السر"
#: messages.go:136
#, c-format
#, c-format, fuzzy
msgid "Import completed in %d s"
msgstr ""
msgstr "سيكتمل الاستيراد خلال %d ثوانٍ"
#: messages.go:137
msgid "Import canceled"
msgstr ""
msgstr "تم إلغاء الاستيراد"
#: messages.go:138
#, c-format
#, c-format, fuzzy
msgid "Indexing completed in %d s"
msgstr ""
msgstr "ستكتمل الفهرسة خلال %d ثوانٍ"
#: messages.go:139
#, fuzzy
msgid "Indexing originals..."
msgstr ""
msgstr "فهرسة الصور الأصلية ..."
#: messages.go:140
#, c-format
msgid "Indexing files in %s"
msgstr ""
msgstr "فهرسة الملفات في %s"
#: messages.go:141
msgid "Indexing canceled"
msgstr ""
msgstr "تم إلغاء الفهرسة"
#: messages.go:142
#, c-format
msgid "Removed %d files and %d photos"
msgstr ""
msgstr "تمت إزالة %d ملفات و %d صورة"
#: messages.go:143
#, c-format
#, c-format, fuzzy
msgid "Moving files from %s"
msgstr ""
msgstr "نقل الملفات من %s"
#: messages.go:144
#, c-format
#, c-format, fuzzy
msgid "Copying files from %s"
msgstr ""
msgstr "نسخ الملفات من %s"
#: messages.go:145
msgid "Labels deleted"
msgstr ""
msgstr "تم حذف التصنيفات"
#: messages.go:146
msgid "Label saved"
msgstr ""
msgstr "تم حفظ التصنيفات"
#: messages.go:147
msgid "Subject saved"
msgstr ""
msgstr "تم حفظ الموضوع"
#: messages.go:148
msgid "Subject deleted"
msgstr ""
msgstr "تم حذف الموضوع"
#: messages.go:149
msgid "Person saved"
msgstr ""
msgstr "تم حفظ الشخص"
#: messages.go:150
msgid "Person deleted"
msgstr ""
msgstr "تم حذف الشخص"
#: messages.go:151
#, c-format
msgid "%d files uploaded in %d s"
msgstr ""
msgstr "تحميل %d ملفات خلال %d ثوانٍ"
#: messages.go:152
msgid "Selection approved"
msgstr ""
msgstr "تمت الموافقة على الاختيار"
#: messages.go:153
msgid "Selection archived"
msgstr ""
msgstr "تمت أرشفة الاختيار"
#: messages.go:154
msgid "Selection restored"
msgstr ""
msgstr "تمت استعادة التحديد"
#: messages.go:155
#, fuzzy
msgid "Selection marked as private"
msgstr ""
msgstr "تم تعليم التحديد على أنه خاص"
#: messages.go:156
msgid "Albums deleted"
msgstr ""
msgstr "تم حذف الألبومات"
#: messages.go:157
#, c-format
msgid "Zip created in %d s"
msgstr ""
msgstr "إنشاء الملف المضغوط خلال %d ثوانٍ"
#: messages.go:158
msgid "Permanently deleted"
msgstr ""
msgstr "تم الحذف بشكل نهائي"

Binary file not shown.

View file

@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"POT-Creation-Date: 2021-12-09 00:51+0000\n"
"PO-Revision-Date: 2022-04-27 10:16+0000\n"
"Last-Translator: Admin <hello@photoprism.app>\n"
"PO-Revision-Date: 2022-06-11 22:36+0000\n"
"Last-Translator: Mathis Bach Østergaard <mathis.bach96@gmail.com>\n"
"Language-Team: Danish <https://translate.photoprism.app/projects/photoprism/"
"backend/da/>\n"
"Language: da\n"
@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.12\n"
"X-Generator: Weblate 4.12.2\n"
msgid "Unexpected error, please try again"
msgstr "Uventet fejl, prøv venligst igen"
@ -51,213 +51,207 @@ msgid "Account not found"
msgstr "Konto ikke fundet"
msgid "User not found"
msgstr ""
msgstr "Bruger ikke fundet"
msgid "Label not found"
msgstr ""
msgstr "Etiket ikke fundet"
msgid "Album not found"
msgstr ""
msgstr "Album ikke fundet"
msgid "Subject not found"
msgstr ""
msgstr "Emne ikke fundet"
msgid "Person not found"
msgstr ""
msgstr "Person ikke fundet"
msgid "Face not found"
msgstr ""
msgstr "Ansigt ikke fundet"
msgid "Not available in public mode"
msgstr ""
msgstr "Ikke tilgængeligt i offentlig tilstand"
msgid "not available in read-only mode"
msgstr ""
msgstr "ikke tilgængelig i skrivebeskyttet tilstand"
msgid "Please log in and try again"
msgstr ""
msgstr "Log ind og prøv igen"
msgid "Upload might be offensive"
msgstr ""
msgstr "Upload kan være stødende"
msgid "No items selected"
msgstr ""
msgstr "Ingen elementer valgt"
msgid "Failed creating file, please check permissions"
msgstr ""
msgstr "Filoprettelse mislykkedes, tjek rettigheder"
msgid "Failed creating folder, please check permissions"
msgstr ""
msgstr "Mappeoprettelse mislykkedes, tjek rettigheder"
msgid "Could not connect, please try again"
msgstr ""
msgstr "Kunne ikke oprette forbindelse, prøv venligst igen"
msgid "Invalid password, please try again"
msgstr ""
msgstr "Ugyldig adgangskode, prøv venligst igen"
msgid "Feature disabled"
msgstr ""
msgstr "Funktion deaktiveret"
msgid "No labels selected"
msgstr ""
msgstr "Ingen etiketter valgt"
msgid "No albums selected"
msgstr ""
msgstr "Ingen albummer valgt"
msgid "No files available for download"
msgstr ""
msgstr "Ingen filer til download"
msgid "Failed to create zip file"
msgstr ""
msgstr "Oprettelse af zip-fil mislykkedes"
msgid "Invalid credentials"
msgstr ""
msgstr "Ugyldigt bruger- eller kodenavn"
msgid "Invalid link"
msgstr ""
msgstr "Ugyldigt link"
msgid "Invalid name"
msgstr ""
msgstr "Ugyldigt navn"
msgid "Busy, please try again later"
msgstr ""
msgstr "Optaget, venligst prøv igen senere"
msgid "Changes successfully saved"
msgstr ""
msgstr "Ændringerne er gemt succesfuld"
msgid "Album created"
msgstr ""
msgstr "Album oprettet"
msgid "Album saved"
msgstr ""
msgstr "Album gemt"
#, c-format
msgid "Album %s deleted"
msgstr ""
msgstr "Album %s slettet"
msgid "Album contents cloned"
msgstr ""
msgstr "Albumindhold klonet"
msgid "File removed from stack"
msgstr ""
msgstr "Fil fjernet fra stakken"
msgid "File deleted"
msgstr ""
msgstr "Fil slettet"
#, c-format
msgid "Selection added to %s"
msgstr ""
msgstr "Valg tilføjet til %s"
#, c-format
msgid "One entry added to %s"
msgstr ""
msgstr "En post tilføjet til %s"
#, c-format
msgid "%d entries added to %s"
msgstr ""
msgstr "%d poster tilføjet til %s"
#, c-format
msgid "One entry removed from %s"
msgstr ""
msgstr "En post fjernet fra %s"
#, c-format
msgid "%d entries removed from %s"
msgstr ""
msgstr "%d poster fjernet fra %s"
msgid "Account created"
msgstr ""
msgstr "Konto oprettet"
msgid "Account saved"
msgstr ""
msgstr "Gemte konto"
msgid "Account deleted"
msgstr ""
msgstr "Konto slettet"
#, fuzzy
msgid "Settings saved"
msgstr "Indstillinger gemt"
msgstr "Gemte indstillinger"
#, fuzzy
msgid "Password changed"
msgstr "Adgangskode ændret"
#, c-format
msgid "Import completed in %d s"
msgstr ""
msgstr "Import afsluttet efter %d s"
msgid "Import canceled"
msgstr ""
msgstr "Import annulleret"
#, c-format
msgid "Indexing completed in %d s"
msgstr ""
msgstr "Indeksering afsluttet efter %d s"
msgid "Indexing originals..."
msgstr ""
msgstr "Indeksering af originaler..."
#, c-format
msgid "Indexing files in %s"
msgstr ""
msgstr "Indekserer filer på %s"
msgid "Indexing canceled"
msgstr ""
msgstr "Indeksering afbrudt"
#, c-format
msgid "Removed %d files and %d photos"
msgstr ""
msgstr "Fjernede %d filer og %d billeder"
#, c-format
msgid "Moving files from %s"
msgstr ""
msgstr "Flytter filer fra %s"
#, c-format
msgid "Copying files from %s"
msgstr ""
msgstr "Kopierer filer fra %s"
msgid "Labels deleted"
msgstr "Etiketter slettet"
msgid "Label saved"
msgstr ""
msgstr "Etikette gemt"
msgid "Subject saved"
msgstr ""
msgstr "Emne gemt"
msgid "Subject deleted"
msgstr ""
msgstr "Emne slettet"
msgid "Person saved"
msgstr ""
msgstr "Person gemt"
msgid "Person deleted"
msgstr ""
msgstr "Person slettet"
#, c-format
msgid "%d files uploaded in %d s"
msgstr ""
msgstr "%d filer uploader på %d s"
#, fuzzy
msgid "Selection approved"
msgstr "Valgte godkendt"
#, fuzzy
msgid "Selection archived"
msgstr "Valgte arkiveret"
#, fuzzy
msgid "Selection restored"
msgstr "Valgte gendannet"
msgid "Selection marked as private"
msgstr ""
msgstr "Valgte er markeret som privat"
msgid "Albums deleted"
msgstr "Slettede album"
#, c-format
msgid "Zip created in %d s"
msgstr ""
msgstr "Zip filen blev lavet på %d s"
#, fuzzy
msgid "Permanently deleted"
msgstr "Slettet permanent"

Binary file not shown.

View file

@ -6,10 +6,10 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"POT-Creation-Date: 2021-12-09 00:51+0000\n"
"PO-Revision-Date: 2022-02-23 11:11+0000\n"
"Last-Translator: Admin <hello@photoprism.app>\n"
"PO-Revision-Date: 2022-06-01 10:17+0000\n"
"Last-Translator: Youngwan Kim <y103.kim@gmail.com>\n"
"Language-Team: Korean <https://translate.photoprism.app/projects/photoprism/"
"backend/ko/>\n"
"Language: ko\n"
@ -17,89 +17,89 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 4.10.1\n"
"X-Generator: Weblate 4.12.2\n"
msgid "Unexpected error, please try again"
msgstr ""
msgstr "예기치 못한 에러가 발생했습니다. 다시 시도해주세요"
msgid "Invalid request"
msgstr ""
msgstr "잘못된 요청"
msgid "Changes could not be saved"
msgstr ""
msgstr "저장에 실패함"
msgid "Could not be deleted"
msgstr ""
msgstr "삭제에 실패함"
#, c-format
msgid "%s already exists"
msgstr ""
msgstr "%s가 이미 존재함"
msgid "Not found"
msgstr ""
msgstr "찾을 수 없음"
msgid "File not found"
msgstr ""
msgstr "파일을 찾을 수 없음"
msgid "Selection not found"
msgstr ""
msgstr "섹션을 찾을 수 없음"
msgid "Entity not found"
msgstr ""
msgstr "항목을 찾을 수 없음"
msgid "Account not found"
msgstr ""
msgstr "계정을 찾지 못했습니다"
msgid "User not found"
msgstr ""
msgstr "사용자를 찾을 수 없음"
msgid "Label not found"
msgstr ""
msgstr "라벨을 찾을 수 없음"
msgid "Album not found"
msgstr ""
msgstr "앨범을 찾을 수 없음"
msgid "Subject not found"
msgstr ""
msgstr "제목을 찾을 수 없음"
msgid "Person not found"
msgstr ""
msgstr "사람을 찾을 수 없음"
msgid "Face not found"
msgstr ""
msgstr "얼굴을 찾을 수 없음"
msgid "Not available in public mode"
msgstr ""
msgstr "공개 모드에서는 사용할 수 없음"
msgid "not available in read-only mode"
msgstr ""
msgstr "읽기 전용 모드에서는 사용할 수 없음"
msgid "Please log in and try again"
msgstr ""
msgstr "로그인하고 다시 시도하십시오"
msgid "Upload might be offensive"
msgstr ""
msgid "No items selected"
msgstr ""
msgstr "선택된 항목이 없습니다"
msgid "Failed creating file, please check permissions"
msgstr ""
msgstr "파일 생성에 실패했습니다. 권한을 확인하세요"
msgid "Failed creating folder, please check permissions"
msgstr ""
msgstr "폴더를 만들지 못했습니다. 권한을 확인하세요"
msgid "Could not connect, please try again"
msgstr ""
msgstr "연결할 수 없습니다. 다시 시도해 주세요"
msgid "Invalid password, please try again"
msgstr ""
msgstr "비밀번호가 잘못되었습니다. 다시 시도해 주세요"
msgid "Feature disabled"
msgstr ""
msgstr "기능 비활성화됨"
msgid "No labels selected"
msgstr ""
msgstr "선택한 라벨이 없습니다"
msgid "No albums selected"
msgstr ""

Binary file not shown.

View file

@ -6,10 +6,10 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"POT-Creation-Date: 2021-12-09 00:51+0000\n"
"PO-Revision-Date: 2022-02-19 14:34+0000\n"
"Last-Translator: Admin <hello@photoprism.app>\n"
"PO-Revision-Date: 2022-06-10 21:36+0000\n"
"Last-Translator: Przemysław Romanik <github@rom4nik.pl>\n"
"Language-Team: Polish <https://translate.photoprism.app/projects/photoprism/"
"backend/pl/>\n"
"Language: pl\n"
@ -18,7 +18,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
"|| n%100>=20) ? 1 : 2;\n"
"X-Generator: Weblate 4.10.1\n"
"X-Generator: Weblate 4.12.2\n"
msgid "Unexpected error, please try again"
msgstr "Nieoczekiwany błąd, spróbuj ponownie"
@ -120,10 +120,8 @@ msgstr "Nieprawidłowy link"
msgid "Invalid name"
msgstr "Nieprawidłowa nazwa"
#, fuzzy
#| msgid "Invalid password, please try again"
msgid "Busy, please try again later"
msgstr "Hasło nieprawidłowe, spróbuj ponownie"
msgstr "Zajęty, spróbuj ponownie później"
msgid "Changes successfully saved"
msgstr "Zmiany zostały pomyślnie zapisane"
@ -233,9 +231,9 @@ msgstr "Osoba zapisana"
msgid "Person deleted"
msgstr "Osoba usunięta"
#, fuzzy, c-format
#, c-format
msgid "%d files uploaded in %d s"
msgstr "%d files uploaded in %d s"
msgstr "%d plików przesłano w %d s"
msgid "Selection approved"
msgstr "Wybór zatwierdzony"

View file

@ -140,10 +140,10 @@ services:
DRONE_TARGET_BRANCH:
## MariaDB Database Server
## Docs: https://mariadb.com/docs/reference/cs10.6/
## Docs: https://mariadb.com/docs/reference/
mariadb:
image: mariadb:10.7
command: mysqld --port=4001 --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=512 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=120
image: mariadb:10.8
command: mysqld --port=4001 --innodb-buffer-pool-size=256M --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=512 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=120
expose:
- "4001" # database port (internal)
volumes:

View file

@ -6,8 +6,8 @@ services:
## MariaDB 10.8 Database Server
## Docs: https://mariadb.com/kb/en/release-notes-mariadb-108-series/
mariadb-10-8:
image: mariadb:10.8-rc
command: mysqld --port=4001 --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=512 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=120
image: mariadb:10.8
command: mysqld --port=4001 --innodb-buffer-pool-size=256M --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=512 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=120
expose:
- "4001"
ports:
@ -25,7 +25,7 @@ services:
## MariaDB 10.7 Database Server
mariadb-10-7:
image: mariadb:10.7
command: mysqld --port=4001 --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=512 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=120
command: mysqld --port=4001 --innodb-buffer-pool-size=256M --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=512 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=120
expose:
- "4001" # database port (internal)
volumes:
@ -43,7 +43,7 @@ services:
## see https://jira.mariadb.org/browse/MDEV-25362
mariadb-10-5-5:
image: mariadb:10.5.5
command: mysqld --port=4001 --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=512 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=120
command: mysqld --port=4001 --innodb-buffer-pool-size=256M --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=512 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=120
expose:
- "4001" # database port (internal)
volumes:
@ -58,7 +58,7 @@ services:
## Docs: https://mariadb.com/docs/reference/cs10.3/
mariadb-10-3:
image: mariadb:10.3
command: mysqld --port=4001 --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=512 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=120
command: mysqld --port=4001 --innodb-buffer-pool-size=256M --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=512 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=120
expose:
- "4001" # database port (internal)
volumes:
@ -73,7 +73,7 @@ services:
## Docs: https://mariadb.com/docs/reference/cs10.2/
mariadb-10-2:
image: mariadb:10.2
command: mysqld --port=4001 --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=512 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=120
command: mysqld --port=4001 --innodb-buffer-pool-size=256M --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=512 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=120
expose:
- "4001" # database port (internal)
volumes:
@ -87,7 +87,7 @@ services:
## MariaDB 10.1 Database Server
mariadb-10-1:
image: mariadb:10.1
command: mysqld --port=4001 --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=512 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=120
command: mysqld --port=4001 --innodb-buffer-pool-size=256M --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=512 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=120
expose:
- "4001" # database port (internal)
volumes:
@ -102,7 +102,7 @@ services:
## Docs: https://dev.mysql.com/doc/refman/8.0/en/
mysql:
image: mysql:8
command: mysqld --port=4001 --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=512 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=120
command: mysqld --port=4001 --innodb-buffer-pool-size=256M --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=512 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=120
expose:
- "4001" # database port (internal)
volumes:

View file

@ -106,8 +106,8 @@ services:
## MariaDB Database Server
## Docs: https://mariadb.com/docs/reference/
mariadb:
image: mariadb:10.7
command: mysqld --port=4001 --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=512 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=120
image: mariadb:10.8
command: mysqld --port=4001 --innodb-buffer-pool-size=256M --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=512 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=120
expose:
- "4001"
ports:

View file

@ -12,7 +12,7 @@ single-arch ARM64 images (updated and tested less frequently):
Stable Release : photoprism/photoprism:arm64
Development Preview: photoprism/photoprism:preview-arm64
MariaDB : arm64v8/mariadb:10.7
MariaDB : arm64v8/mariadb:10.8
If your device meets the system requirements, mostly the same installation instructions
as for regular Linux servers apply:

View file

@ -116,11 +116,11 @@ services:
## If MariaDB gets stuck in a restart loop, this points to a memory or filesystem issue:
## https://docs.photoprism.app/getting-started/troubleshooting/#fatal-server-errors
restart: unless-stopped
image: arm64v8/mariadb:10.7 # this mariadb image runs on ARM64-based devices only
image: arm64v8/mariadb:10.8 # ARM64 IMAGE ONLY, DOES NOT WORK ON ARMv7, AMD or Intel
security_opt:
- seccomp:unconfined
- apparmor:unconfined
command: mysqld --innodb-buffer-pool-size=128M --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=512 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=120
command: mysqld --innodb-buffer-pool-size=256M --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=512 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=120
## Never store database files on an unreliable device such as a USB flash drive, an SD card, or a shared network folder:
volumes:
- "./database:/var/lib/mysql" # DO NOT REMOVE

View file

@ -188,12 +188,12 @@ services:
## see https://docs.photoprism.app/getting-started/faq/#should-i-use-sqlite-mariadb-or-mysql
mariadb:
restart: always
image: mariadb:10.7
image: mariadb:10.8
container_name: mariadb
security_opt:
- seccomp:unconfined
- apparmor:unconfined
command: mysqld --innodb-buffer-pool-size=128M --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=512 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=120
command: mysqld --innodb-buffer-pool-size=512M --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=512 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=120
## Never store database files on an unreliable device such as a USB flash drive, an SD card, or a shared network folder:
volumes:
- "./database:/var/lib/mysql" # DO NOT REMOVE

View file

@ -116,11 +116,11 @@ services:
## If MariaDB gets stuck in a restart loop, this points to a memory or filesystem issue:
## https://docs.photoprism.app/getting-started/troubleshooting/#fatal-server-errors
restart: unless-stopped
image: mariadb:10.7
image: mariadb:10.8
security_opt:
- seccomp:unconfined
- apparmor:unconfined
command: mysqld --innodb-buffer-pool-size=128M --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=512 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=120
command: mysqld --innodb-buffer-pool-size=512M --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=512 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=120
## Never store database files on an unreliable device such as a USB flash drive, an SD card, or a shared network folder:
volumes:
- "./database:/var/lib/mysql" # DO NOT REMOVE

View file

@ -90,13 +90,13 @@ services:
## see https://docs.photoprism.app/getting-started/faq/#should-i-use-sqlite-mariadb-or-mysql
mariadb:
restart: unless-stopped
image: mariadb:10.7
image: mariadb:10.8
security_opt:
- seccomp:unconfined
- apparmor:unconfined
## --lower-case-table-names=1 stores tables in lowercase and compares names in a case-insensitive manner
## see https://mariadb.com/kb/en/server-system-variables/#lower_case_table_names
command: mysqld --lower-case-table-names=1 --innodb-buffer-pool-size=128M --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=512 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=120
command: mysqld --lower-case-table-names=1 --innodb-buffer-pool-size=512M --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=512 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=120
volumes:
- "database:/var/lib/mysql" # Named volume "database" is defined at the bottom (DO NOT REMOVE)
environment:

View file

@ -101,12 +101,12 @@ services:
## see https://docs.photoprism.app/getting-started/faq/#should-i-use-sqlite-mariadb-or-mysql
mariadb:
restart: unless-stopped
image: mariadb:10.7
image: mariadb:10.8
container_name: mariadb
security_opt:
- seccomp:unconfined
- apparmor:unconfined
command: mysqld --innodb-buffer-pool-size=128M --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=512 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=120
command: mysqld --innodb-buffer-pool-size=512M --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=512 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=120
## Never store database files on an unreliable device such as a USB flash drive, an SD card, or a shared network folder:
volumes:
- "./database:/var/lib/mysql" # DO NOT REMOVE

View file

@ -96,13 +96,13 @@ services:
## If MariaDB gets stuck in a restart loop, this points to a memory or filesystem issue:
## https://docs.photoprism.app/getting-started/troubleshooting/#fatal-server-errors
restart: unless-stopped
image: mariadb:10.7
image: mariadb:10.8
security_opt:
- seccomp:unconfined
- apparmor:unconfined
## --lower-case-table-names=1 stores tables in lowercase and compares names in a case-insensitive manner
## see https://mariadb.com/kb/en/server-system-variables/#lower_case_table_names
command: mysqld --innodb-buffer-pool-size=128M --lower-case-table-names=1 --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=512 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=120
command: mysqld --innodb-buffer-pool-size=512M --lower-case-table-names=1 --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=512 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=120
volumes:
- "database:/var/lib/mysql" # Named volume "database" is defined at the bottom (DO NOT REMOVE)
environment:

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

View file

@ -66,11 +66,11 @@ test.meta("testID", "sharing-001")("Create, view, delete shared albums", async (
await contextmenu.clearSelection();
await t.navigateTo(url);
await t.expect(toolbar.toolbarTitle.withText("Christmas").visible).ok();
await t.expect(toolbar.toolbarSecondTitle.withText("Christmas").visible).ok();
await t.click(Selector("button").withText("@photoprism_app"));
await t.expect(toolbar.toolbarTitle.withText("Albums").visible).ok();
await t.expect(toolbar.toolbarSecondTitle.withText("Albums").visible).ok();
const AlbumCount = await album.getAlbumCount("all");
@ -79,14 +79,14 @@ test.meta("testID", "sharing-001")("Create, view, delete shared albums", async (
await t.useRole(Role.anonymous());
await t.navigateTo(url);
await t.expect(toolbar.toolbarTitle.withText("Christmas").visible).ok();
await t.expect(toolbar.toolbarSecondTitle.withText("Christmas").visible).ok();
const photoCountShared = await photo.getPhotoCount("all");
//don't show private photo
await t.expect(photoCountShared).eql(1);
await t.click(Selector("button").withText("@photoprism_app"));
await t.expect(toolbar.toolbarTitle.withText("Albums").visible).ok();
await t.expect(toolbar.toolbarSecondTitle.withText("Albums").visible).ok();
const AlbumCountAnonymous = await Selector("a.is-album").count;
@ -106,7 +106,7 @@ test.meta("testID", "sharing-001")("Create, view, delete shared albums", async (
await t.navigateTo("http://localhost:2343/s/secretfortesting");
await t.expect(toolbar.toolbarTitle.withText("Albums").visible).ok();
await t.expect(toolbar.toolbarSecondTitle.withText("Albums").visible).ok();
const AlbumCountAnonymousAfterDelete = await album.getAlbumCount("all");
@ -127,9 +127,9 @@ test.meta("testID", "sharing-001")("Create, view, delete shared albums", async (
await t.navigateTo("http://localhost:2343/s/secretfortesting");
await t
.expect(toolbar.toolbarTitle.withText("Christmas").visible)
.expect(toolbar.toolbarSecondTitle.withText("Christmas").visible)
.notOk()
.expect(toolbar.toolbarTitle.withText("Albums").visible)
.expect(toolbar.toolbarSecondTitle.withText("Albums").visible)
.notOk()
.expect(Selector(".input-name input").visible)
.ok();
@ -139,7 +139,7 @@ test.meta("testID", "sharing-002").meta({ type: "smoke" })(
"Verify anonymous user has limited options",
async (t) => {
await t.navigateTo("http://localhost:2343/s/jxoux5ub1e/british-columbia-canada");
await t.expect(toolbar.toolbarTitle.withText("British Columbia").visible).ok();
await t.expect(toolbar.toolbarSecondTitle.withText("British Columbia").visible).ok();
await toolbar.checkToolbarActionAvailability("edit", false);
await toolbar.checkToolbarActionAvailability("share", false);
@ -182,7 +182,7 @@ test.meta("testID", "sharing-002").meta({ type: "smoke" })(
.expect(Selector(`td button.input-favorite`).visible)
.notOk()
.click(Selector("button").withText("@photoprism_app"))
.expect(toolbar.toolbarTitle.withText("Albums").visible)
.expect(toolbar.toolbarSecondTitle.withText("Albums").visible)
.ok();
const AlbumUid = await album.getNthAlbumUid("all", 0);

View file

@ -57,7 +57,7 @@ test.meta("testID", "calendar-002")("Update calendar details", async (t) => {
await album.openNthAlbum(0);
await t.expect(toolbar.toolbarTitle.innerText).contains("March 2014");
await t.expect(toolbar.toolbarSecondTitle.innerText).contains("March 2014");
await t.expect(toolbar.toolbarDescription.innerText).contains("We went to ski");
await menu.openPage("calendar");
if (t.browser.platform === "mobile") {
@ -135,7 +135,11 @@ test.meta("testID", "calendar-004").meta({ type: "smoke" })(
await menu.openPage("albums");
await album.selectAlbumFromUID(AlbumUid);
await contextmenu.triggerContextMenuAction("delete", "");
await menu.openPage("albums");
if (t.browser.platform === "mobile") {
await t.eval(() => location.reload());
} else {
await toolbar.triggerToolbarAction("reload");
}
const AlbumCountAfterDelete = await album.getAlbumCount("all");
await t.expect(AlbumCountAfterDelete).eql(AlbumCount);
await menu.openPage("calendar");

View file

@ -71,7 +71,7 @@ test.meta("testID", "folders-002")("Update folder details", async (t) => {
await t
.expect(toolbar.toolbarDescription.nth(0).innerText)
.contains("Last holiday")
.expect(toolbar.toolbarTitle.nth(0).innerText)
.expect(toolbar.toolbarSecondTitle.innerText)
.contains("MyFolder");
await menu.openPage("folders");
@ -149,7 +149,6 @@ test.meta("testID", "folders-004")("Create/delete album-clone from folder", asyn
await menu.openPage("albums");
await album.selectAlbumFromUID(AlbumUid);
await contextmenu.triggerContextMenuAction("delete", "");
await menu.openPage("albums");
const AlbumCountAfterDelete = await album.getAlbumCount("all");
await t.expect(AlbumCountAfterDelete).eql(AlbumCount);

View file

@ -57,6 +57,7 @@ test.meta("testID", "labels-001").meta({ type: "smoke" })(
await toolbar.search("test");
const LabelTest = await label.getNthLabeltUid(0);
await label.openLabelWithUid(LabelTest);
await toolbar.setFilter("view", "Cards");
await t
.click(page.cardTitle.withAttribute("data-uid", PhotoBeaconUid))
.click(photoedit.labelsTab)
@ -131,6 +132,7 @@ test.meta("testID", "labels-003")("Rename Label", async (t) => {
await toolbar.search("horse");
await album.checkAlbumVisibility(LabelZebraUid, true);
await label.openLabelWithUid(LabelZebraUid);
await toolbar.setFilter("view", "Cards");
await photo.checkPhotoVisibility(FirstPhotoZebraUid, true);
await t
.click(page.cardTitle.withAttribute("data-uid", FirstPhotoZebraUid))

View file

@ -29,7 +29,11 @@ test.meta("testID", "library-import-001").meta({ type: "smoke" })(
//TODO replace wait
.wait(60000);
await menu.openPage("labels");
await toolbar.triggerToolbarAction("reload");
if (t.browser.platform === "mobile") {
await t.eval(() => location.reload());
} else {
await toolbar.triggerToolbarAction("reload");
}
await toolbar.search("bakery");
await t.expect(Selector(".is-label").visible).ok();

View file

@ -46,7 +46,6 @@ test.meta("testID", "library-index-001").meta({ type: "smoke" })(
await menu.openPage("states");
if (t.browser.platform === "mobile") {
console.log(t.browser.platform);
await t.navigateTo("/states?q=KwaZulu");
} else {
await toolbar.search("KwaZulu");
@ -73,7 +72,11 @@ test.meta("testID", "library-index-001").meta({ type: "smoke" })(
await t.expect(Selector("span").withText("Done.").visible, { timeout: 60000 }).ok();
await menu.openPage("labels");
await toolbar.triggerToolbarAction("reload");
if (t.browser.platform === "mobile") {
await t.eval(() => location.reload());
} else {
await toolbar.triggerToolbarAction("reload");
}
await toolbar.search("cheetah");
await t.expect(Selector(".is-label").visible).ok();
@ -89,9 +92,12 @@ test.meta("testID", "library-index-001").meta({ type: "smoke" })(
.ok();
await menu.openPage("calendar");
await toolbar.triggerToolbarAction("reload");
if (t.browser.platform === "mobile") {
console.log(t.browser.platform);
await t.eval(() => location.reload());
} else {
await toolbar.triggerToolbarAction("reload");
}
if (t.browser.platform === "mobile") {
await t.navigateTo("/calendar?q=December%202013");
} else {
await toolbar.search("December 2013");
@ -100,9 +106,12 @@ test.meta("testID", "library-index-001").meta({ type: "smoke" })(
await t.expect(Selector(".is-album").visible).ok();
await menu.openPage("folders");
await toolbar.triggerToolbarAction("reload");
if (t.browser.platform === "mobile") {
console.log(t.browser.platform);
await t.eval(() => location.reload());
} else {
await toolbar.triggerToolbarAction("reload");
}
if (t.browser.platform === "mobile") {
await t.navigateTo("/folders?q=moment");
} else {
await toolbar.search("Moment");
@ -112,7 +121,6 @@ test.meta("testID", "library-index-001").meta({ type: "smoke" })(
await menu.openPage("states");
if (t.browser.platform === "mobile") {
console.log(t.browser.platform);
await t.navigateTo("/states?q=KwaZulu");
} else {
await toolbar.search("KwaZulu");

View file

@ -57,7 +57,7 @@ test.meta("testID", "moments-001")("Update moment details", async (t) => {
await album.openNthAlbum(0);
await t.expect(toolbar.toolbarTitle.innerText).contains("Winter");
await t.expect(toolbar.toolbarSecondTitle.innerText).contains("Winter");
await t.expect(toolbar.toolbarDescription.innerText).contains("We went to ski");
await menu.openPage("moments");
@ -137,7 +137,6 @@ test.meta("testID", "moments-003")("Create/delete album-clone from moment", asyn
await menu.openPage("albums");
await album.selectAlbumFromUID(AlbumUid);
await contextmenu.triggerContextMenuAction("delete", "");
await menu.openPage("albums");
const AlbumCountAfterDelete = await album.getAlbumCount("all");
await t.expect(AlbumCountAfterDelete).eql(AlbumCount);

View file

@ -276,7 +276,11 @@ test.meta("testID", "photos-archive-private-003")(
await contextmenu.checkContextMenuCount("14");
await contextmenu.triggerContextMenuAction("archive", "");
await menu.openPage("archive");
await toolbar.triggerToolbarAction("reload");
if (t.browser.platform === "mobile") {
await t.eval(() => location.reload());
} else {
await toolbar.triggerToolbarAction("reload");
}
const PhotoCountInArchiveAfterArchive = await photo.getPhotoCount("all");
await t.expect(PhotoCountInArchiveAfterArchive).eql(InitialPhotoCountInArchive + 14);
@ -399,7 +403,11 @@ test.meta("testID", "photos-archive-private-004").meta({ type: "smoke" })(
await contextmenu.checkContextMenuCount("14");
await contextmenu.triggerContextMenuAction("private", "");
await menu.openPage("private");
await toolbar.triggerToolbarAction("reload");
if (t.browser.platform === "mobile") {
await t.eval(() => location.reload());
} else {
await toolbar.triggerToolbarAction("reload");
}
const PhotoCountInPrivateAfterArchive = await photo.getPhotoCount("all");
await t.expect(PhotoCountInPrivateAfterArchive).eql(InitialPhotoCountInPrivate + 14);
@ -453,7 +461,11 @@ test.meta("testID", "photos-archive-private-004").meta({ type: "smoke" })(
await photo.triggerHoverAction("uid", FolderPhoto, "select");
await contextmenu.checkContextMenuCount("14");
await contextmenu.triggerContextMenuAction("private", "");
await toolbar.triggerToolbarAction("reload");
if (t.browser.platform === "mobile") {
await t.eval(() => location.reload());
} else {
await toolbar.triggerToolbarAction("reload");
}
const PhotoCountInPrivateAfterRestore = await photo.getPhotoCount("all");
await t.expect(PhotoCountInPrivateAfterRestore).eql(InitialPhotoCountInPrivate);

View file

@ -26,6 +26,9 @@ const library = new Library();
test.meta("testID", "photos-upload-delete-001").meta({ type: "smoke" })(
"Upload + Delete jpg/json",
async (t) => {
await menu.openNav();
const InitialOriginalsCount = await Selector(".nav-originals .nav-count", { timeout: 5000 })
.innerText;
await t.expect(fs.existsSync("../storage/acceptance/originals/2020/10")).notOk();
await toolbar.search("digikam");
const PhotoCount = await photo.getPhotoCount("all");
@ -49,6 +52,11 @@ test.meta("testID", "photos-upload-delete-001").meta({ type: "smoke" })(
await t.expect(FileCount).eql(2);
await menu.openNav();
const OriginalsCountAfterUpload = await Selector(".nav-originals .nav-count", { timeout: 5000 })
.innerText;
await t.expect(parseInt(InitialOriginalsCount) + 2).eql(parseInt(OriginalsCountAfterUpload));
await menu.openPage("browse");
await toolbar.search("digikam");
await photo.triggerHoverAction("uid", UploadedPhoto, "select");
@ -256,11 +264,19 @@ test.meta("testID", "photos-upload-delete-005").meta({ type: "smoke" })(
test.meta("testID", "photos-upload-delete-006").meta({ type: "smoke" })(
"Try uploading txt file",
async (t) => {
await menu.openNav();
const InitialOriginalsCount = await Selector(".nav-originals .nav-count", {
timeout: 10000,
}).innerText;
await menu.openPage("browse");
await toolbar.triggerToolbarAction("upload");
await t.setFilesToUpload(Selector(".input-upload"), ["./upload-files/foo.txt"]).wait(15000);
await menu.openPage("library");
await t.click(library.logsTab);
await menu.openNav();
const OriginalsCountAfterUpload = await Selector(".nav-originals .nav-count", {
timeout: 10000,
}).innerText;
await t.expect(Selector("p").withText(" foo.txt is not a jpeg file").visible).ok();
await t.expect(parseInt(InitialOriginalsCount)).eql(parseInt(OriginalsCountAfterUpload));
}
);

View file

@ -369,8 +369,12 @@ test.meta("testID", "photos-007")("Mark photos/videos as panorama/scan", async (
await photoedit.turnSwitchOff("scan");
await photoedit.turnSwitchOff("panorama");
await t.click(photoedit.dialogClose);
await toolbar.triggerToolbarAction("reload");
await contextmenu.clearSelection();
if (t.browser.platform === "mobile") {
await t.eval(() => location.reload());
} else {
await toolbar.triggerToolbarAction("reload");
}
await photo.checkPhotoVisibility(FirstPhotoUid, false);
await photo.checkPhotoVisibility(FirstVideoUid, false);

View file

@ -79,6 +79,8 @@ test.meta("testID", "settings-general-002").meta({ type: "smoke" })(
test.meta("testID", "settings-general-003").meta({ type: "smoke" })(
"Disable pages: import, originals, logs, moments, places, library",
async (t) => {
await toolbar.setFilter("view", "Cards");
await t.expect(page.cardLocation.exists).ok();
await menu.openPage("library");
@ -106,6 +108,7 @@ test.meta("testID", "settings-general-003").meta({ type: "smoke" })(
await t.eval(() => location.reload());
await menu.openPage("browse");
await toolbar.setFilter("view", "Cards");
await t.expect(page.cardLocation.exists).notOk();
@ -139,6 +142,7 @@ test.meta("testID", "settings-general-003").meta({ type: "smoke" })(
await menu.checkMenuItemAvailability("places", true);
await menu.checkMenuItemAvailability("library", false);
await menu.openPage("settings");
await t.click(settings.libraryCheckbox);
await menu.checkMenuItemAvailability("originals", true);
@ -149,6 +153,7 @@ test.meta("testID", "settings-general-003").meta({ type: "smoke" })(
test.meta("testID", "settings-general-004").meta({ type: "smoke" })(
"Disable people and labels",
async (t) => {
await toolbar.setFilter("view", "Cards");
await t.click(page.cardTitle.nth(0));
await t.click(photoedit.labelsTab);
@ -165,6 +170,7 @@ test.meta("testID", "settings-general-004").meta({ type: "smoke" })(
await t.click(settings.peopleCheckbox).click(settings.labelsCheckbox);
await t.eval(() => location.reload());
await menu.openPage("browse");
await toolbar.setFilter("view", "Cards");
await t.click(page.cardTitle.nth(0));
await t.click(photoedit.labelsTab);
@ -190,11 +196,14 @@ test.meta("testID", "settings-general-004").meta({ type: "smoke" })(
test.meta("testID", "settings-general-005").meta({ type: "smoke" })(
"Disable private, archive and quality filter",
async (t) => {
await menu.checkMenuItemAvailability("private", true);
await menu.checkMenuItemAvailability("archive", true);
await menu.checkMenuItemAvailability("review", true);
await menu.checkMenuItemAvailability("private", true);
await menu.openPage("browse");
await t.eval(() => location.reload());
await toolbar.search("photo:true stack:true");
await photo.triggerHoverAction("nth", 0, "select");
await contextmenu.checkContextMenuActionAvailability("archive", true);
@ -225,13 +234,12 @@ test.meta("testID", "settings-general-005").meta({ type: "smoke" })(
.click(settings.privateCheckbox)
.click(Selector(settings.libraryTab))
.click(settings.reviewCheckbox);
await t.eval(() => location.reload());
await menu.checkMenuItemAvailability("private", false);
await menu.checkMenuItemAvailability("archive", false);
await menu.checkMenuItemAvailability("review", false);
await menu.checkMenuItemAvailability("private", false);
await menu.openPage("browse");
await t.eval(() => location.reload());
await toolbar.search("photo:true");
await photo.triggerHoverAction("nth", 0, "select");
@ -266,8 +274,8 @@ test.meta("testID", "settings-general-005").meta({ type: "smoke" })(
.click(settings.reviewCheckbox);
await menu.checkMenuItemAvailability("archive", true);
await menu.checkMenuItemAvailability("private", true);
await menu.checkMenuItemAvailability("review", true);
await menu.checkMenuItemAvailability("private", true);
}
);
@ -383,6 +391,8 @@ test.meta("testID", "settings-general-006").meta({ type: "smoke" })(
await contextmenu.checkContextMenuActionAvailability("edit", false);
await contextmenu.clearSelection();
await toolbar.setFilter("view", "Cards");
await t.click(page.cardTitle.nth(0));
await photoedit.checkAllDetailsFieldsDisabled(true);

View file

@ -70,6 +70,7 @@ test.meta("testID", "stacks-003").meta({ type: "smoke" })("Ungroup files", async
await menu.openPage("stacks");
await photo.checkHoverActionAvailability("uid", SequentialPhotoUid, "open", true);
await toolbar.setFilter("view", "Cards");
await t
.click(page.cardTitle.withAttribute("data-uid", SequentialPhotoUid))
.click(photoedit.filesTab)

View file

@ -57,7 +57,7 @@ test.meta("testID", "states-001")("Update state details", async (t) => {
await album.openNthAlbum(0);
await t.expect(toolbar.toolbarTitle.innerText).contains("Wonderland");
await t.expect(toolbar.toolbarSecondTitle.innerText).contains("Wonderland");
await t.expect(toolbar.toolbarDescription.innerText).contains("We love earth");
await menu.openPage("states");
@ -136,7 +136,6 @@ test.meta("testID", "states-003")("Create/delete album-clone from state", async
await menu.openPage("albums");
await album.selectAlbumFromUID(AlbumUid);
await contextmenu.triggerContextMenuAction("delete", "");
await menu.openPage("albums");
const AlbumCountAfterDelete = await album.getAlbumCount("all");
await t.expect(AlbumCountAfterDelete).eql(AlbumCount);

View file

@ -17,11 +17,21 @@ export default class Page {
async getAlbumCount(type) {
if (type === "all") {
const AlbumCount = await Selector("a.is-album", { timeout: 5000 }).count;
return AlbumCount;
if (t.browser.platform === "mobile") {
const AlbumCount = await Selector("a.is-album", { timeout: 8000 }).count;
return AlbumCount;
} else {
const AlbumCount = await Selector("a.is-album", { timeout: 5000 }).count;
return AlbumCount;
}
} else {
const AlbumCount = await Selector("a.type-" + type, { timeout: 5000 }).count;
return AlbumCount;
if (t.browser.platform === "mobile") {
const AlbumCount = await Selector("a.type-" + type, { timeout: 8000 }).count;
return AlbumCount;
} else {
const AlbumCount = await Selector("a.type-" + type, { timeout: 5000 }).count;
return AlbumCount;
}
}
}

View file

@ -25,6 +25,9 @@ export default class Page {
async triggerContextMenuAction(action, albumName) {
await this.openContextMenu();
if (t.browser.platform === "mobile") {
await t.wait(5000);
}
await t.click(Selector("#t-clipboard button.action-" + action));
if (action === "delete") {
await t.click(Selector("button.action-confirm"));

View file

@ -4,8 +4,8 @@ export default class Page {
constructor() {}
async openNav() {
if (await Selector("button.nav-show").exists) {
await t.click(Selector("button.nav-show"));
if (await Selector("div.v-avatar--tile.clickable").exists) {
await t.click(Selector("div.v-avatar--tile.clickable"));
} else if (await Selector("div.nav-expand").exists) {
await t.click(Selector("div.nav-expand i"));
}
@ -13,6 +13,9 @@ export default class Page {
async openPage(page) {
await this.openNav();
if (t.browser.platform === "mobile") {
await t.wait(5000);
}
if (
(page === "monochrome") |
(page === "panoramas") |
@ -45,7 +48,13 @@ export default class Page {
}
async checkMenuItemAvailability(page, visible) {
if (t.browser.platform === "mobile") {
await t.wait(5000);
}
await this.openNav();
if (t.browser.platform === "mobile") {
await t.wait(5000);
}
if (
(page === "monochrome") |
(page === "panoramas") |
@ -54,8 +63,10 @@ export default class Page {
(page === "review") |
(page === "archive")
) {
if (!(await Selector("div.v-list__group--active div.nav-browse").visible)) {
await t.click(Selector("div.nav-browse + div"));
if (
!(await Selector("div.v-list__group--active div.nav-browse", { timeout: 15000 }).visible)
) {
await t.click(Selector("div.nav-browse + div", { timeout: 15000 }));
}
} else if (page === "live") {
if (await Selector(".nav-video").visible) {

View file

@ -91,7 +91,11 @@ export default class Page {
.eql(LinkCountAfterAdd - 1)
.click(sharedialog.dialogClose);
await menu.openPage(type);
await toolbar.triggerToolbarAction("reload", "");
if (t.browser.platform === "mobile") {
await t.eval(() => location.reload());
} else {
await toolbar.triggerToolbarAction("reload");
}
await album.triggerHoverAction("uid", FirstAlbum, "share");
await t.click(sharedialog.expandLink).click(sharedialog.deleteLink);
}

View file

@ -38,6 +38,9 @@ export default class Page {
async triggerPhotoViewerAction(action) {
await t.click(Selector("button.pswp__button.action-" + action));
if (t.browser.platform === "mobile") {
await t.wait(5000);
}
if (action === "close") {
if (await Selector("button.pswp__button.action-" + action).visible) {
await t.click(Selector("button.pswp__button.action-" + action));

View file

@ -8,11 +8,32 @@ export default class Page {
this.time = Selector("div.p-time-select");
this.search1 = Selector("div.input-search input");
this.toolbarDescription = Selector(".v-card__text").nth(0);
this.toolbarTitle = Selector("div.v-toolbar__title");
this.toolbarTitle = Selector("#p-navigation div.v-toolbar__title");
this.toolbarSecondTitle = Selector("main.v-content div.v-toolbar__title");
this.openMobileToolbar = Selector("button.nav-menu-trigger");
}
async checkToolbarActionAvailability(action, visible) {
if (visible) {
if (
(t.browser.platform === "mobile") &
(action !== "edit") &
(action !== "share") &
(action !== "add") &
(action !== "show-all") &
(action !== "show-important")
) {
if (await this.openMobileToolbar.exists) {
await t.click(this.openMobileToolbar);
}
if (await this.openMobileToolbar.exists) {
await t.click(this.openMobileToolbar);
}
if (visible) {
await t.expect(Selector("button.nav-menu-" + action).visible).ok();
} else {
await t.expect(Selector("button.nav-menu-" + action).visible).notOk();
}
} else if (visible) {
await t.expect(Selector("nav.v-toolbar button.action-" + action).visible).ok();
} else {
await t.expect(Selector("nav.v-toolbar button.action-" + action).visible).notOk();
@ -20,7 +41,24 @@ export default class Page {
}
async triggerToolbarAction(action) {
await t.click(Selector("nav.v-toolbar button.action-" + action));
if (
(t.browser.platform === "mobile") &
(action !== "edit") &
(action !== "share") &
(action !== "add") &
(action !== "show-all") &
(action !== "show-important")
) {
if (await this.openMobileToolbar.exists) {
await t.click(this.openMobileToolbar);
}
if (await this.openMobileToolbar.exists) {
await t.click(this.openMobileToolbar);
}
await t.click(Selector("button.nav-menu-" + action));
} else {
await t.click(Selector("nav.v-toolbar button.action-" + action));
}
}
async toggleFilterBar() {

View file

@ -26,12 +26,12 @@ var DialectMySQL = Migrations{
{
ID: "20220329-050000",
Dialect: "mysql",
Statements: []string{"UPDATE photos SET photo_description = SUBSTR(photo_description, 0, 4096) WHERE 1;", "ALTER TABLE photos MODIFY photo_description VARCHAR(4096);"},
Statements: []string{"ALTER TABLE photos MODIFY photo_description VARCHAR(4096);"},
},
{
ID: "20220329-060000",
Dialect: "mysql",
Statements: []string{"ALTER TABLE accounts MODIFY acc_url VARCHAR(255);", "ALTER TABLE addresses MODIFY address_notes VARCHAR(1024);", "ALTER TABLE albums MODIFY album_caption VARCHAR(1024);", "ALTER TABLE albums MODIFY album_description VARCHAR(2048);", "ALTER TABLE albums MODIFY album_notes VARCHAR(1024);", "ALTER TABLE cameras MODIFY camera_description VARCHAR(2048);", "ALTER TABLE cameras MODIFY camera_notes VARCHAR(1024);", "ALTER TABLE countries MODIFY country_description VARCHAR(2048);", "ALTER TABLE countries MODIFY country_notes VARCHAR(1024);", "UPDATE details SET keywords = SUBSTR(keywords, 0, 2048), notes = SUBSTR(notes, 0, 2048) WHERE 1;", "ALTER TABLE details MODIFY keywords VARCHAR(2048);", "ALTER TABLE details MODIFY notes VARCHAR(2048);", "ALTER TABLE details MODIFY subject VARCHAR(1024);", "ALTER TABLE details MODIFY artist VARCHAR(1024);", "ALTER TABLE details MODIFY copyright VARCHAR(1024);", "ALTER TABLE details MODIFY license VARCHAR(1024);", "UPDATE folders SET folder_description = SUBSTR(folder_description, 0, 2048) WHERE 1;", "ALTER TABLE folders MODIFY folder_description VARCHAR(2048);", "ALTER TABLE labels MODIFY label_description VARCHAR(2048);", "ALTER TABLE labels MODIFY label_notes VARCHAR(1024);", "ALTER TABLE lenses MODIFY lens_description VARCHAR(2048);", "ALTER TABLE lenses MODIFY lens_notes VARCHAR(1024);", "ALTER TABLE subjects MODIFY subj_bio VARCHAR(2048);", "ALTER TABLE subjects MODIFY subj_notes VARCHAR(1024);"},
Statements: []string{"ALTER TABLE accounts MODIFY acc_url VARCHAR(255);", "ALTER TABLE addresses MODIFY address_notes VARCHAR(1024);", "ALTER TABLE albums MODIFY album_caption VARCHAR(1024);", "ALTER TABLE albums MODIFY album_description VARCHAR(2048);", "ALTER TABLE albums MODIFY album_notes VARCHAR(1024);", "ALTER TABLE cameras MODIFY camera_description VARCHAR(2048);", "ALTER TABLE cameras MODIFY camera_notes VARCHAR(1024);", "ALTER TABLE countries MODIFY country_description VARCHAR(2048);", "ALTER TABLE countries MODIFY country_notes VARCHAR(1024);", "ALTER TABLE details MODIFY keywords VARCHAR(2048);", "ALTER TABLE details MODIFY notes VARCHAR(2048);", "ALTER TABLE details MODIFY subject VARCHAR(1024);", "ALTER TABLE details MODIFY artist VARCHAR(1024);", "ALTER TABLE details MODIFY copyright VARCHAR(1024);", "ALTER TABLE details MODIFY license VARCHAR(1024);", "ALTER TABLE folders MODIFY folder_description VARCHAR(2048);", "ALTER TABLE labels MODIFY label_description VARCHAR(2048);", "ALTER TABLE labels MODIFY label_notes VARCHAR(1024);", "ALTER TABLE lenses MODIFY lens_description VARCHAR(2048);", "ALTER TABLE lenses MODIFY lens_notes VARCHAR(1024);", "ALTER TABLE subjects MODIFY subj_bio VARCHAR(2048);", "ALTER TABLE subjects MODIFY subj_notes VARCHAR(1024);"},
},
{
ID: "20220329-061000",

View file

@ -1,2 +1 @@
UPDATE photos SET photo_description = SUBSTR(photo_description, 0, 4096) WHERE 1;
ALTER TABLE photos MODIFY photo_description VARCHAR(4096);

View file

@ -7,14 +7,12 @@ ALTER TABLE cameras MODIFY camera_description VARCHAR(2048);
ALTER TABLE cameras MODIFY camera_notes VARCHAR(1024);
ALTER TABLE countries MODIFY country_description VARCHAR(2048);
ALTER TABLE countries MODIFY country_notes VARCHAR(1024);
UPDATE details SET keywords = SUBSTR(keywords, 0, 2048), notes = SUBSTR(notes, 0, 2048) WHERE 1;
ALTER TABLE details MODIFY keywords VARCHAR(2048);
ALTER TABLE details MODIFY notes VARCHAR(2048);
ALTER TABLE details MODIFY subject VARCHAR(1024);
ALTER TABLE details MODIFY artist VARCHAR(1024);
ALTER TABLE details MODIFY copyright VARCHAR(1024);
ALTER TABLE details MODIFY license VARCHAR(1024);
UPDATE folders SET folder_description = SUBSTR(folder_description, 0, 2048) WHERE 1;
ALTER TABLE folders MODIFY folder_description VARCHAR(2048);
ALTER TABLE labels MODIFY label_description VARCHAR(2048);
ALTER TABLE labels MODIFY label_notes VARCHAR(1024);