Translations: Resolve frontend/src/locales/ar.po merge conflicts
This commit is contained in:
commit
b0211d94e0
43 changed files with 1092 additions and 914 deletions
|
@ -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 don’ts" 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) Don’t panic.
|
||||
|
||||
(3) Don’t 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.
|
@ -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.
|
@ -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.
|
@ -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.
|
@ -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"
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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:
|
||||
|
|
1318
frontend/package-lock.json
generated
1318
frontend/package-lock.json
generated
File diff suppressed because it is too large
Load diff
File diff suppressed because one or more lines are too long
|
@ -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);
|
||||
|
|
|
@ -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");
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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");
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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"));
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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));
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -1,2 +1 @@
|
|||
UPDATE photos SET photo_description = SUBSTR(photo_description, 0, 4096) WHERE 1;
|
||||
ALTER TABLE photos MODIFY photo_description VARCHAR(4096);
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue