From: jabarros Date: Mon, 7 Jul 2014 11:02:42 +0000 (+0200) Subject: Merge pull request #541 from owncloud/fix_issue_540 X-Git-Tag: oc-android-1.7.0_signed~259 X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/commitdiff_plain/df8e9fa2c3b42d75fe66d94efac19f214ffcf16c?hp=ed909e45f3af4de4dca73a189472ca470de659e4 Merge pull request #541 from owncloud/fix_issue_540 Fix issue 540 --- diff --git a/.travis.yml b/.travis.yml index 4429520a..d205021d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,9 +3,10 @@ jdk: oraclejdk7 before_install: # Install base Android SDK - sudo apt-get update -qq - - sudo apt-get install -qq libstdc++6:i386 lib32z1 - - export COMPONENTS=build-tools-18.1.0,android-14,android-17,android-19,sysimg-19,extra-android-support - - curl -3L https://raw.github.com/embarkmobile/android-sdk-installer/version-1/android-sdk-installer | bash /dev/stdin --install=$COMPONENTS + - sudo apt-get install -qq libstdc++6:i386 lib32z1 expect + - export COMPONENTS="build-tools-20.0.0,android-14,android-17,android-19,sysimg-19,extra-android-support" + - export LICENSES="android-sdk-license-5be876d5|android-sdk-license-598b93a6" + - curl -3L https://raw.github.com/embarkmobile/android-sdk-installer/version-2/android-sdk-installer | bash /dev/stdin --install=$COMPONENTS --accept=$LICENSES - source ~/.android-sdk-installer/env - rm pom.xml - ./setup_env.sh diff --git a/owncloud-android-library b/owncloud-android-library index 8f8c29c7..e72fec72 160000 --- a/owncloud-android-library +++ b/owncloud-android-library @@ -1 +1 @@ -Subproject commit 8f8c29c776c299a639bc21a5ffbb63aeda07b1f9 +Subproject commit e72fec72a3138d4e714a9db37eb87cb76a958bdf diff --git a/res/drawable-hdpi/shared_with_me.png b/res/drawable-hdpi/shared_with_me.png new file mode 100644 index 00000000..222172a7 Binary files /dev/null and b/res/drawable-hdpi/shared_with_me.png differ diff --git a/res/drawable-hdpi/shared_with_me_folder.png b/res/drawable-hdpi/shared_with_me_folder.png new file mode 100644 index 00000000..271e7b2d Binary files /dev/null and b/res/drawable-hdpi/shared_with_me_folder.png differ diff --git a/res/drawable-hdpi/sharedlink.png b/res/drawable-hdpi/sharedlink.png index 222172a7..071c622a 100644 Binary files a/res/drawable-hdpi/sharedlink.png and b/res/drawable-hdpi/sharedlink.png differ diff --git a/res/drawable-mdpi/shared_with_me.png b/res/drawable-mdpi/shared_with_me.png new file mode 100644 index 00000000..8300eacf Binary files /dev/null and b/res/drawable-mdpi/shared_with_me.png differ diff --git a/res/drawable-mdpi/shared_with_me_folder.png b/res/drawable-mdpi/shared_with_me_folder.png new file mode 100644 index 00000000..3b8aeeee Binary files /dev/null and b/res/drawable-mdpi/shared_with_me_folder.png differ diff --git a/res/drawable-mdpi/sharedlink.png b/res/drawable-mdpi/sharedlink.png index 8300eacf..95ab1803 100644 Binary files a/res/drawable-mdpi/sharedlink.png and b/res/drawable-mdpi/sharedlink.png differ diff --git a/res/drawable-xhdpi/shared_with_me.png b/res/drawable-xhdpi/shared_with_me.png new file mode 100644 index 00000000..3879663c Binary files /dev/null and b/res/drawable-xhdpi/shared_with_me.png differ diff --git a/res/drawable-xhdpi/sharedlink.png b/res/drawable-xhdpi/sharedlink.png index 3879663c..f474b48a 100644 Binary files a/res/drawable-xhdpi/sharedlink.png and b/res/drawable-xhdpi/sharedlink.png differ diff --git a/res/layout/list_item.xml b/res/layout/list_item.xml index abe0e7f7..9c47aa6c 100644 --- a/res/layout/list_item.xml +++ b/res/layout/list_item.xml @@ -103,16 +103,35 @@ + + + + + + تم رفع %1$s بنجاح فشل الرفع لم يكتمل رفع %1$s + فشل الرفع, تحتاج للدخول مرة أخرى يتم التحميل ... %1$d%% تحميل %2$s تم التحميل بنجاح @@ -89,6 +90,7 @@ فشل التحميل لم يكتمل تحميل %1$s لم يتم تحميلها بعد + فشل التحميل, تحتاج للدخول مرة أخرى اختر حسابا فشلت المزامنة. لم تكتمل مزامنة %1$s @@ -99,13 +101,14 @@ لا يمكن مزامنة جهات اتصال %1$d ( %2$d تعارض) تم نسيان بعض الملفات المحلية %1$d لا يمكن نسخها داخل المجلد %2$s الملفات الخارجه من المجلد + اعتبارا من اﻹصدار 1.3.16, الملفات المرفوعة من هذا الجهاز يتم نسخها إلى المجلد المحلي %1$s تفادياً لفقدان البيانات حينما تتم مزامنة ملف واحد مع عدة حسابات.\n\nنظراً لهذا التغيير، تم نسخ كل الملفات المرفوعة في اﻹصدارات السابقة إلى المجلد %2$s . لكن خطأً ما حال دون إتمام العملية أثناء مزامنة الحسابات. يمكنك إما ترك هذه الملفات و حذف الرابط إلى %3$s ، و إما نقل الملفات إلى المجلد %1$s و الإحتفاظ بالرابط إلى %4$s \n\nفيما يلي الملفات المحلية، و المفات الخارجية المرتبطة بها في %5$s لا يوجد مجلد %1$s بعد الان نقل الكل تم نقل جميع الملفات لم ينجح نقل بعض الملفات محلي :%1$s خارجي : %1$s - لا يوجد مساحة كافية لنسخ الملفات المحددة إلى مجلد %1$s . هل ترغب بنقلها بدلاَ من ذلك؟ + لا يوجد مساحة كافية لنسخ الملفات المحددة لمجلد %1$s . هل ترغب بنقلهم بدلاً من ذلك؟ يرجى إدخال كلمة السر أدخل كلمة السر سيتم طلب PIN في كل مرة يتم فيها تشغيل التطبيق @@ -164,9 +167,12 @@ الخادم لا يدعم طريقة التحقق هذه %1$s لا يدعم الحسابات المتعددة الخادم الخاص بك لم يعد الإتصال بهويتك الصحيحة, الرجاء الإتصال بالمسؤول\n\t + لا يمكن المصادقة من الخادم جعل الملف محدثا إعادة التسمية حذف + هل تريد حقاً حذف %1$s ؟ + هل ترغب في حذف %1$s و جهات الإتصال التابعة له؟ محليا فقط المحتويات المحلية فقط الحذف من الخادم @@ -180,6 +186,7 @@ تمت مزامنة محتويات الملفات من قبل لايمكن إنشاء المجلد رموز ممنوعة: / \\ < > : \" | ? * + إسم الملف لا يمكن أن يكون فارغاً انتظر للحظة خطا غير متوقع : الرجاء اختيار الملف من تطبيق آخر لم يتم اختيار أي ملف @@ -225,6 +232,7 @@ استبدال عدم الرفع معاينة الصورة + لا يمكن عرض هذه الصورة %1$s تعذر نسخه %2$s للمجلد المحلي فشل في محاولة الرفع الفوري فشل في الرفع الفوري @@ -233,6 +241,7 @@ اعادة كل المختارات حذف كل المختارات من قائمة انتظار الرفع اعادة المحاولة لرفع الصورة: + تحميل المزيد من الصور do nothing you are not online for instant upload رسالة خطا: الرجاء التاكد من اعدادات الخادم, من الممكن انك تعديت الحد في quota @@ -244,4 +253,9 @@ أرسل نسخ الرابط تم النسخ للحافظة + خطأ حرج: لا يمكن تنفيذ العمليات + حدث خطأ أثناء الإتصال مع الخادم. + حدث خطأ أثناء إنتظار الخادم، لم يكن من الممكن القيام بالعملية + حدث خطأ أثناء إنتظار الخادم، لم يكن من الممكن القيام بالعملية + تعذر إكمال العملية، الخادم غير متوفر diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml index c6d538e4..8ffe43fd 100644 --- a/res/values-ca/strings.xml +++ b/res/values-ca/strings.xml @@ -167,9 +167,12 @@ El serivdor no permet aquest mètode d\'autenticació %1$s no permet comptes múltiples El servidor no retorna una id d\'usuari correcta, contacteu amb l\'administrador. + No es pot autenticar en aquest servidor Mantén el fitxer actualitzat Reanomena Elimina + Esteu segur que voleu eliminar %1$s? + Estàs segur que vols esborrar %1$s i els seus continguts? Només local Només contiguts locals Elimina del servidor @@ -229,6 +232,7 @@ Sobrescriu No el pugis Visualització prèvia d\'imatge + Aquesta imatge no es pot mostrar %1$s no s\'ha pogut copiar a la carpeta local %2$s La pujada instantània ha fallat Fallada de pujades instantànies @@ -237,6 +241,7 @@ reintenta els seleccionats elimina tots els seleccionats de la cua de pujada intenta pujar de nou la imatge: + Carrega més fotos no facis res, no estàs en lína per la pujada instantània Missatge d\'Error: Comproveu la configuració del servidor, potser heu excedit la quota. @@ -248,7 +253,9 @@ Envia Copia l\'enllaç S\'ha copiat al porta-retalls + Error crític: no es poden realitzar operacions Hi ha hagut un error mentre es connectava al servidor. Hi ha hagut un error esperant al servidor, l\'operació no s\'ha pogut realitzar Hi ha hagut un error esperant el servidor, l\'operació no s\'ha pogut realitzar + La operació no s\'ha pogut completar, no es pot accedir al servidor diff --git a/res/values-cs-rCZ/strings.xml b/res/values-cs-rCZ/strings.xml index c8999012..e6eb499e 100644 --- a/res/values-cs-rCZ/strings.xml +++ b/res/values-cs-rCZ/strings.xml @@ -93,6 +93,7 @@ Stahování selhalo. Je třeba se přihlásit znovu. Vybrat účet Synchronizace selhala + Synchronizace selhala, je třeba se znovu přihlásit Synchronizaci %1$s nelze dokončit Chybné heslo pro %1$s Nalezeny konflikty @@ -108,7 +109,7 @@ Některé soubory nebylo možno přesunout Místní: %1$s Vzdálené: %1$s - Nedostatek místa pro zkopírování vybraných souborů do složky %1$s. Přejete si je místo kopírování přesunout? + Není dostatek místa pro kopírování vybraných souborů do adresáře %1$s. Přejete si je místo kopírování přesunout? Zadejte PIN aplikace Zadat PIN aplikace Při každém spuštění aplikace bude vyžadováno zadání PIN @@ -172,6 +173,7 @@ Přejmenovat Odstranit Opravdu chcete odstranit %1$s ? + Opravdu chcete odstranit %1$s a jeho obsah? Pouze místní Pouze místní obsah Odstranit ze serveru diff --git a/res/values-cy-rGB/strings.xml b/res/values-cy-rGB/strings.xml index 6983e1a7..18083d89 100644 --- a/res/values-cy-rGB/strings.xml +++ b/res/values-cy-rGB/strings.xml @@ -70,7 +70,6 @@ Methwyd symud rhai ffeiliau Lleol: %1$s Pell: %1$s - Does dim digon o le i gopïo\'r ffeiliau ddewiswyd i blygell %1$s . Would like to move them into instead? Cyflwynwch PIN eich Ap Cyflwynwch PIN eich Ap Bydd cais am y PIN bob tro mae\'r ap yn cychwyn diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml index b25fbc77..1ca7bda0 100644 --- a/res/values-da/strings.xml +++ b/res/values-da/strings.xml @@ -108,7 +108,6 @@ Visse filer kunne ikke flyttes Lokal: %1$s Fjernplacering: %1$s - Der er ikke tilstrækkelig plads til at kopiere de valgte filer ind i %1$s mappen. Vil du flytte dem i stedet? Indsæt venligst din App PIN Indtast App PIN PIN koden vil blive anmodet om hver gang applikationen bliver startet diff --git a/res/values-de-rCH/strings.xml b/res/values-de-rCH/strings.xml index 0c5e94ca..cebb1476 100644 --- a/res/values-de-rCH/strings.xml +++ b/res/values-de-rCH/strings.xml @@ -92,7 +92,6 @@ Einige Dateien konnten nicht verschoben werden Lokal: %1$s Remote: %1$s - Es steht nicht genügend Speicherplatz zur Verfügung, um die ausgewählten Dateien in den %1$s Ordner zu kopieren. Möchten Sie sie stattdessen verschieben? Bitte geben Sie Ihre App-PIN ein Bitte geben Sie Ihre App-PIN ein PIN-Abfrage erfolgt nach Starten der App. diff --git a/res/values-de-rDE/strings.xml b/res/values-de-rDE/strings.xml index 0106bc3f..aed67708 100644 --- a/res/values-de-rDE/strings.xml +++ b/res/values-de-rDE/strings.xml @@ -93,6 +93,7 @@ Herunterladen fehlgeschlagen, Sie müssen sich nochmals anmelden Konto auswählen Synchronisation fehlgeschlagen + Synchronisation fehlgeschlagen, Sie müssen sich neu anmelden Bei der Synchronisation konnte %1$s nicht übertragen werden Ungültiges Passwort für %1$s Konflikte gefunden @@ -108,7 +109,7 @@ Einige Dateien konnten nicht verschoben werden Lokal: %1$s Remote: %1$s - Es steht nicht genügend Speicherplatz zur Verfügung, um die ausgewählten Dateien in den %1$s Ordner zu kopieren. Möchten Sie sie stattdessen verschieben? + Es steht nicht genügend Speicherplatz zur Verfügung um die ausgewählten Dateien in den %1$s Ordner zu kopieren. Möchten Sie diese stattdessen verschieben? Bitte geben Sie Ihre App-PIN ein Bitte geben Sie Ihre App-PIN ein PIN-Abfrage erfolgt nach Starten der App. diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml index dea1a35d..5e67d4f5 100644 --- a/res/values-de/strings.xml +++ b/res/values-de/strings.xml @@ -93,6 +93,7 @@ Herunterladen fehlgeschlagen, Du musst dich nochmals anmelden Account auswählen Synchronisation fehlgeschlagen + Synchronisation fehlgeschlagen, Du musst Dich neu anmelden Bei der Synchronisation konnte %1$s nicht übertragen werden Falsches Passwort für %1$s Konflikte gefunden @@ -108,7 +109,7 @@ Einige Dateien konnten nicht verschoben werden Lokal: %1$s Remote: %1$s - Es steht nicht genügend Speicherplatz zur Verfügung, um die ausgewählten Dateien in den %1$s Ordner zu kopieren. Möchtest Du sie stattdessen verschieben? + Es steht nicht genügend Speicherplatz zur Verfügung um die ausgewählten Dateien in den %1$s Ordner zu kopieren. Möchtest du diese stattdessen verschieben? Bitte gib Deine App-PIN ein Bitte gib Deine App-PIN ein PIN-Abfrage erfolgt nach Starten der App. diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml index bf084e1a..5e52d8f8 100644 --- a/res/values-el/strings.xml +++ b/res/values-el/strings.xml @@ -1,6 +1,6 @@ - Εφαρμογή %1$s για Android + Εφαρμογή %1$s Android έκδοση %1$s Ανανέωση λογαριασμού Μεταφόρτωση @@ -14,12 +14,12 @@ Γενικά Περισσότερα Λογαριασμοί - Διαχείριση λογαριασμών - PIN για πρόσβαση στην εφαρμογή - Προστατέψτε την εφαρμογή - Στιγμιαίες φορτώσεις εικόνων - Ανεβάστε απευθείας φωτογραφίες από την κάμερα. - Στιγμιαίες φορτώσεις βίντεο + Διαχείριση Λογαριασμών + PIN εφαρμογής + Προστατέψτε το δέκτη σας + Στιγμιαίες μεταφορτώσεις εικόνων + Μεταφορτώστε απευθείας φωτογραφίες από την κάμερα + Στιγμιαίες μεταφορτώσεις βίντεο Άμεση μεταφόρτωση των βίντεο από την φωτογραφική μηχανή Ενεργοποίηση Καταγραφής Ιστορικού Χρησιμοποιείται για την καταγραφή προβλημάτων @@ -33,21 +33,21 @@ Δοκιμάστε %1$s στο κινητό σας! Θέλω να σας προσκαλέσω να χρησιμοποιήσετε το %1$s στο κινητό σας!\nΚατεβάστε το εδώ: %2$s Έλεγχος Διακομιστή - Διεύθυνση εξυπηρέτη https://… + Διεύθυνση διακομιστή https://… Όνομα χρήστη Συνθηματικό Νέοι στο %1$s; Αρχεία Σύνδεση Μεταφόρτωση - Επιλέξτε φάκελο μεταφορτώσεων. + Επιλέξτε φάκελο μεταφορτώσεων: Δεν βρέθηκε λογαριασμός Δεν υπάρχουν λογαριασμοί %1$s στη συσκευή σας. Παρακαλώ ρυθμίστε πρώτα ένα λογαριασμό. Ρύθμιση - Κλείσιμο + Έξοδος Δεν υπάρχει περιεχόμενο για να μεταφορτώσετε Δεν ελήφθη περιεχόμενο. Δεν υπάρχει τίποτα να μεταφορτώσετε. - Το %1$s δεν επιτρέπεται να έχει πρόσβαση στο κοινόχρηστο περιεχόμενο + Ο %1$s δεν επιτρέπεται να έχει πρόσβαση στο κοινόχρηστο περιεχόμενο Μεταφόρτωση Δεν υπάρχουν αρχεία σε αυτόν τον φάκελο.\nΝέα αρχεία μπορούν να προστεθούν με την επιλογή \"Μεταφόρτωση\" του μενού. Αγγίξτε κάποιο αρχείο για να προβάλετε περισσότερες πληροφορίες. @@ -57,62 +57,62 @@ Τροποποιήθηκε: Λήψη Ανανέωση αρχείου - Το αρχείο μετονομάστηκε σε %1$s κατά την μεταφόρτωση + Το αρχείο μετονομάστηκε σε %1$s κατά τη μεταφόρτωση Διαμοιρασμός συνδέσμου Ακύρωση διαμοιρασμού συνδέσμου Ναι Όχι ΟΚ Ακύρωση λήψης - Ακύρωση αποστολής + Ακύρωση μεταφόρτωσης Άκυρο Αποθήκευση & Έξοδος Σφάλμα Φόρτωση ... Άγνωστο σφάλμα Σχετικά - Αλλαγή συνθηματικού + Αλλαγή κωδικού πρόσβασης Διαγραφή λογαριασμού Δημιουργία λογαριασμού Μεταφόρτωση από ... Όνομα φακέλου - Μεταφορτώνεται ... + Μεταφόρτωση ... %1$d%% Μεταφορτώνονται %2$s Η μεταφόρτωση ολοκληρώθηκε επιτυχώς Το %1$s μεταφορτώθηκε με επιτυχία Η μεταφόρτωση απέτυχε Η μεταφόρτωση του %1$s δεν ήταν δυνατόν να ολοκληρωθεί - Η μεταφόρτωση απέτυχε, πρέπει να εισάγετε ξανά τον κωδικό σας + Η μεταφόρτωση απέτυχε, πρέπει να επανασυνδεθείτε Λήψη ... %1$d%% Λαμβάνονται %2$s Η λήψη ολοκληρώθηκε επιτυχώς %1$s αρχεία λήφθηκαν με επιτυχία Η λήψη απέτυχε - Η λήψη του %1$s δεν μπόρεσε να ολοκληρωθεί με επιτυχία - Δεν έχει κατέβει ακόμα - Η λήψη απέτυχε, πρέπει να εισάγετε ξανά τον κωδικό σας + Η λήψη του %1$s δεν μπόρεσε να ολοκληρωθεί + Δεν έχει ληφθεί ακόμα + Η λήψη απέτυχε, πρέπει να επανασυνδεθείτε Επιλογή λογαριασμού Ο συγχρονισμός απέτυχε - Ο συγχρονισμός του %1$s δεν μπόρεσε να ολοκληρωθεί + Ο συγχρονισμός του %1$s δεν μπόρεσε να ολοκληρωθεί Λάθος κωδικός για %1$s Βρέθηκαν συγκρούσεις - %1$d αρχεία σε αναμονή συγχρονισμού, δεν μπόρεσαν να συγχρονιστούν + %1$d αρχεία σε αναμονή συγχρονισμού δεν μπόρεσαν να συγχρονιστούν Τα αρχεία σε αναμονή συγχρονισμού απέτυχαν Τα περιεχόμενα των %1$d αρχείων δεν μπόρεσαν να συγχρονιστούν (%2$d διενέξεις) Ορισμένα τοπικά αρχεία ξεχάστηκαν - %1$d αρχεία από τον %2$s χώρο αποθήκευσης δεν είναι δυνατό να αντιγραφούν σε - Από την έκδοση 1.3.16 και μετά, αρχεία που μεταφορτώνονται από αυτήν τη συσκευή αντιγράφονται στον τοπικό φάκελο %1$s για να αποτραπεί η απώλεια δεδομένων όταν ένα αρχείο είναι συγχρονισμένο με πολλαπλούς λογαριασμούς.\nΛόγω αυτής της αλλαγής, όλα τα αρχεία που μεταφορτώθηκαν με προηγούμενες εκδόσεις αυτής της εφαρμογής αντιγράφηκαν στον φάκελο %2$s. Ωστόσο, ένα σφάλμα εμπόδισε την ολοκλήρωση αυτής της εργασίας κατά το συγχρονισμό του λογαριασμού. Μπορείτε είτε να αφήσετε τα αρχεία όπως είναι και να καταργήσετε τη σύνδεση με το %3$s ή να μετακινήσετε τα αρχεία στον κατάλογο %1$s και να διατηρήσετε τη σύνδεση με το %4$s.\n\nΑπαριθμημένα πιο κάτω είναι το/τα τοπικό/ά αρχείο/α και το/τα απομακρυσμένο/α αρχείο/α στο %5$s με το/τα οποίο/α συνδέονταν. + %1$d αρχεία από τον %2$s χώρο αποθήκευσης δεν ήταν δυνατό να αντιγραφούν σε + Από την έκδοση 1.3.16 και μετά, αρχεία που μεταφορτώνονται από αυτήν τη συσκευή αντιγράφονται στον τοπικό φάκελο %1$s για να αποτραπεί η απώλεια δεδομένων όταν ένα αρχείο είναι συγχρονισμένο με πολλαπλούς λογαριασμούς.\nΛόγω αυτής της αλλαγής, όλα τα αρχεία που μεταφορτώθηκαν με προηγούμενες εκδόσεις αυτής της εφαρμογής αντιγράφηκαν στον φάκελο %2$s. Ωστόσο, ένα σφάλμα εμπόδισε την ολοκλήρωση αυτής της εργασίας κατά το συγχρονισμό του λογαριασμού. Μπορείτε είτε να αφήσετε το(α) αρχείο(α) όπως είναι και να καταργήσετε τη σύνδεση με το %3$s ή να μετακινήσετε τα αρχεία στο φάκελο %1$s και να διατηρήσετε τη σύνδεση με το %4$s.\n\nΑπαριθμημένα πιο κάτω είναι το(α) τοπικό(ά) αρχείο(α) και το(α) απομακρυσμένο(α) αρχείο(α) στο %5$s με το(α) οποίο(α) συνδέονταν. Ο φάκελος %1$s δεν υπάρχει πια - Μετακινηση ολων - Ολα τα αρχεια μετακινηθηκαν - Μερικα αρχεια δεν μπορεσαν να μετακινηθουν - Τοπικα: %1$s - Remote: %1$s - Δεν υπαρχει αρκετος χωρος για να αντιγραφθουν τα επιλεγμενα αρχεια στον χωρο αποθηκευσης %1$s. Θελετε να μετακινηθουν μερικα? - Παρακαλώ, εισάγετε το PIN σας + Μετακίνηση όλων + Όλα τα αρχεία μετακινήθηκαν + Μερικά αρχεία δεν μπόρεσαν να μετακινηθούν + Τοπικά: %1$s + Απομακρυσμένα: %1$s + Δεν υπάρχει αρκετός διαθέσιμος αποθηκευτικός χώρος για να αντιγραφούν τα επιλεγμένα αρχεία στον φάκελο %1$s. Θα θέλατε να τα μετακινήσετε αντί αυτού; + Παρακαλώ, εισάγετε το PIN εφαρμογής σας Εισάγετε το PIN της εφαρμογής - Το PIN θα ζητείται κάθε φορά στην εκκίνηση - Παρακαλώ επαναεισάγετε το PIN της εφαρμογής + Το PIN θα ζητείται κάθε φορά που εκκινείται η εφαρμογή + Παρακαλώ επανεισάγετε το PIN της εφαρμογής Αφαιρέστε τον PIN της εφαρμογής Δεν ταιριάζουν τα PIN της εφαρμογής Εσφαλμένο PIN της εφαρμογής @@ -127,96 +127,96 @@ Το αρχείο δεν βρίσκεται σε έγκυρο λογαριασμό Αυτή η μορφή κωδικοποιήσης πολυμέσων δεν υποστηρίζεται Το αρχείο πολυμέσων δεν μπόρεσε να διαβαστεί - Το αρχείο πολυμέσων δεν είναι σωστά κοδικοποιημένο + Το αρχείο πολυμέσων δεν είναι κωδικοποιημένο σωστά Λήξη χρόνου κατά την προσπάθεια αναπαραγωγής Το αρχείο πολυμέσων δεν μπορεί να μεταδοθεί Το αρχείο πολυμέσων δεν μπορεί να αναπαραχθεί με την παρεχόμενη εφαρμογή αναπαραγωγής πολυμέσων Σφάλμα ασφαλείας κατά την προσπάθεια αναπαραγωγής του %1$s Σφάλμα εισόδου κατά την προσπάθεια αναπαραγωγής του %1$s - Απροσδόκτο σφάλμα κατά την προσπάθεια αναπαραγωγής του %1$s + Απροσδόκητο σφάλμα κατά την προσπάθεια αναπαραγωγής του %1$s Κουμπί επαναφοράς Κουμπί αναπαραγωγής ή παύσης Κουμπί προώθησης - Λήψη πιστοποιητικού... + Λήψη πιστοποίησης... Προσπάθεια σύνδεσης... Δεν υπάρχει σύνδεση στο δίκτυο Μη διαθέσιμη ασφαλής σύνδεση. Επετεύχθη σύνδεση Έλεγχος σύνδεσης... - Λανθασμένες ρυθμίσεις + Λανθασμένες ρυθμίσεις διακομιστή Ένας λογαριασμός για τον ίδιο χρήστη και διακομιστή υπάρχει ήδη στη συσκευή Ο χρήστης που εισάγατε δεν ταιριάζει με το χρήστη αυτού του λογαριασμού - Παρουσιάστηκε άγνωστο σφάλμα - Δεν βρέθηκε υπολογιστής - Δεν βρέθηκε παρουσία του εξυπηρετητή σας - Ο εξυπηρετητής αργεί πολύ να απαντήσει + Παρουσιάστηκε άγνωστο σφάλμα! + Δεν βρέθηκε κόμβος + Δεν βρέθηκε εγκατεστημένος διακομιστής + Ο διακομιστής αργεί πολύ να απαντήσει Κακώς διατυπωμένο URL Η αρχικοποίηση του SLL απέτυχε - Αδυναμία επιβεβαίωσης την ταυτότητα SSL του διακομιστή - Μη αναγνωρίσιμη έκδοση διακομιστή server σας + Αδυναμία επιβεβαίωσης της ταυτότητας του διακομιστή SSL + Μη-αναγνωρίσιμη έκδοση διακομιστή Δεν ήταν δυνατή η σύνδεση Επιτεύχθηκε ασφαλής σύνδεση Λάθος όνομα χρήστη ή κωδικός Η πιστοποίηση απέτυχε Ο διακομιστής πιστοποίησης αρνήθηκε την πρόσβαση Απρόοπτη κατάσταση - παρακαλώ εισάγετε τη διεύθυνση URL του διακομιστή ξανά - Η εξουσιοδότησή σας έληξε. Παρακαλώ εξουσιοδοτείστε ξανά - Παρακαλώ είσάγετε τον τρέχοντα κωδικό + Η πιστοποιίησή σας έληξε. Παρακαλώ πιστοποιήστε ξανά + Παρακαλώ εισάγετε τον τρέχοντα κωδικό πρόσβασης Η συνεδρία σας έληξε. Παρακαλώ συνδεθείτε ξανά Σύνδεση με το διακομιστή πιστοποίησης σε εξέλιξη... Ο διακομιστής δεν υποστηρίζει αυτή τη μέθοδο πιστοποίησης Ο %1$s δεν υποστηρίζει πολλαπλούς λογαριασμούς - Ο διακομιστής σας δεν επιστρέφει το σωστό χαρακτηριστικό χρήστη, παρακαλώ επικοινωνήστε με έναν διαχειριστή\n - Δεν είναι δυνατός ο έλεγχος ταυτότητας με αυτόν τον διακομιστή + Ο διακομιστής σας δεν επιστρέφει το σωστό αναγνωριστικό χρήστη, παρακαλώ επικοινωνήστε με ένα διαχειριστή\n⇥ + Δεν είναι δυνατή η πιστοποίηση με αυτόν το διακομιστή Διατήρηση αρχείου σε ενημέρωση Μετονομασία - Διαγραφή - Θέλετε να αφαιρέσετε το %1$s ; - Θέλετε να διαγράψετε το %1$s και τα περιεχόμενά του; + Αφαίρεση + Θέλετε στ\' αλήθεια να αφαιρέσετε το %1$s; + Θέλετε στ\' αλήθεια να διαγράψετε το %1$s και τα περιεχόμενά του; Μόνο τοπικά - Μόνο τοπικοί φάκελοι - Διαγραφή από τον εξυπηρέτη - Και απομακρυσμένα και τοπικά - Διαγραφή επιτυχές - Η διαγραφή απέτυχε + Μόνο τοπικό περιεχόμενο + Αφαίρεση από το διακομιστή + Απομακρυσμένα και τοπικά + Αφαίρεση επιτυχής + Η αφαίρεση απέτυχε Εισάγετε νέο όνομα - Το τοπικό αντίγραφο δεν ήταν δυνατόν να μετονομαστεί. Παρακαλώ επιλέξτε νέο όνομα. + Το τοπικό αντίγραφο δεν ήταν δυνατόν να μετονομαστεί. Παρακαλώ επιλέξτε ένα διαφορετικό όνομα. Η μετονομασία δεν ήταν επιτυχής Αδυναμία ελέγχου του απομακρυσμένου αρχείου Τα περιεχόμενα του αρχείου έχουν ήδη συγχρονιστεί - Δημιουργία φακέλου απέτυχε + Η δημιουργία φακέλου απέτυχε Μη-επιτρεπόμενοι χαρακτήρες: / \\ < > : \" | ? * Το όνομα αρχείου δεν μπορεί να είναι κενό. Παρακαλούμε περιμένετε - Απροσδόκητο σφάλμα, δοκιμάστε με άλλη εφαρμογή + Απροσδόκητο σφάλμα - παρακαλώ επιλέξτε το αρχείο από μια άλλη εφαρμογή Δεν επιλέχθηκαν αρχεία Αποστολή συνδέσμου σε ... Σύνδεση με oAuth2 Σύνδεση με το διακομιστή oAuth2 σε εξέλιξη... - Η ταυτότητα της σελίδας δεν μπορεί να εγκριθεί - - Το πιστοποιητικό του διακομιστή δεν είναι αξιόπιστο + Η ταυτότητα της σελίδας δεν μπορεί να επληθευτεί + - Το πιστοποιητικό του διακομιστή δεν είναι έμπιστο - Το πιστοποιητικό του διακομιστή έχει λήξει - Το πιστοποιητικό του διακομιστή είναι πολύ νέο - - Η διεύθυνση URL δεν ταιριάζει με το όνομα στο πιστοποιητικό - Θέλετε να θεωρείται έμπιστο το πιστοποιητικό αυτό ούτως ή άλλως; + - Η διεύθυνση URL δεν ταιριάζει με το όνομα του κόμβου στο πιστοποιητικό + Θέλετε να θεωρείται έμπιστο το πιστοποιητικό αυτό παρ\' όλα αυτά; Το πιστοποιητικό δεν ήταν δυνατόν να αποθηκευτεί Λεπτομέρειες Απόκρυψη - Εκδόθηκε σε: + Εκδόθηκε για: Εκδόθηκε από: Κοινό όνομα: Οργανισμός: Μονάδα Οργανισμού: Χώρα: - Πολιτεία + Πολιτεία: Τοποθεσία: - Εγκυρότητα: + Περίοδος ισχύος: Από: - Μέχρι + Μέχρι: Υπογραφή: Αλγόριθμος: Δεν μπορεί να εμφανιστεί το πιστοποιητικό. - - Καμία πληροφορία σχετικά με το σφάλμα + - Καμμία πληροφορία σχετικά με το σφάλμα Αυτό είναι ένα σημείο κράτησης θέσης placeholder.txt Εικόνα PNG @@ -224,38 +224,38 @@ 2012/05/18 12:23 PM 12:23:45 Μεταφόρτωση εικόνων μόνο μέσω WiFi - Αποστολή βίντεο μόνο μέσω WiFi + Μεταφόρτωση βίντεο μόνο μέσω WiFi /InstantUpload Σύγκρουση ενημερώσεων - Το απομακρυσμένο αρχείο %s δεν είναι συγχρονισμένο με το τοπικό. Η συνέχεια θα αντικαταστήσει το περιεχόμενο του αρχείου στον εξυπηρέτη. + Το απομακρυσμένο αρχείο %s δεν είναι συγχρονισμένο με το τοπικό αρχείο. Αν συνεχίσετε θα αντικατασταθεί το περιεχόμενο του αρχείου στο διακομιστή. Διατήρηση και των δύο Αντικατάσταση Να μην μεταφορτωθεί Προεπισκόπηση εικόνας - Αυτή η εικόνε δεν μπόρεσε να προβληθεί - %1$s δεν μπόρεσε να αντιγραφεί %2$s στον τοπικό φάκελο - Αποτυχημένη στιγμιαία φόρτωση - Αποτυχημένες στιγμιαίες φορτώσεις - Σύνοψη όλων των αποτυχημένων φορτώσεων + Αυτή η εικόνα δεν μπορεί να προβληθεί + Το %1$s δεν μπόρεσε να αντιγραφεί στον τοπικό φάκελο %2$s + Αποτυχημένη Στιγμιαία Μεταφόρτωση + Αποτυχημένες στιγμιαίες μεταφορτώσεις + Σύνοψη όλων των αποτυχημένων μεταφορτώσεων επιλογή όλων επανάληψη για όλα τα επιλεγμένα διαγραφή όλων των επιλεγμένων από τη λίστα προς μεταφόρτωση επανάληψη προσπάθειας μεταφόρτωσης της εικόνας: - Φόρτωση περισσότερων εικόνων + Φόρτωση περισσότερων Εικόνων μην κάνετε τίποτε, δεν είστε συνδεμένος για άμεση μεταφόρτωση Μήνυμα Αποτυχίας: - Παρακαλώ ελέγξτε τις ρυθμίσεις του διακομιστή σας, ίσως έχετε υπερβεί τη διαθέσιμη μερίδα σας. - Λυπούμαστε, ο διαμοιρασμός δεν επιτρέπεται στον διακομιστή σας. Παρακαλούμε επικοινωνείστε με τον \n\t\tδιαχειριστή σας. + Παρακαλώ ελέγξτε τις ρυθμίσεις του διακομιστή σας, ίσως έχετε υπερβεί το διαθέσιμο μερίδιό σας. + Λυπούμαστε, ο διαμοιρασμός δεν επιτρέπεται στο διακομιστή σας. Παρακαλούμε επικοινωνείστε με το\n\t\tδιαχειριστή σας. Αδυναμία διαμοιρασμού αυτού του αρχείου ή φακέλου. Παρακαλώ βεβαιωθείτε ότι υπάρχει Ένα σφάλμα προέκυψε κατά την προσπάθεια διαμοιρασμού αυτού του αρχείου ή φακέλου Ήταν αδύνατη η ακύρωση διαμοιρασμού αυτού του αρχείου ή φακέλου. Δεν υπάρχει. Ένα σφάλμα προέκυψε κατά τη διάρκεια ακύρωσης διαμοιρασμού αυτού του αρχείου ή φακέλου Αποστολή Αντιγραφή συνδέσμου - Αντιγραφθηκε στο clipboard + Αντιγραφθηκε στο πρόχειρο Κρίσιμο σφάλμα: αδύνατη η εκτέλεση λειτουργειών - Συνέβη σφάλμα κατά την σύνδεση με τον διακομιστή. - Συνέβη σφάλμα κατά την αναμονή για τον διακομιστή, η λειτουργία δεν ήταν επιτυχής - Συνέβη σφάλμα κατά την αναμονή για τον διακομιστή, η λειτουργία δεν ήταν επιτυχής + Ένα σφάλμα προέκυψε κατά τη σύνδεση με το διακομιστή. + Ένα σφάλμα προέκυψε κατά την αναμονή για το διακομιστή, η λειτουργία δεν ήταν επιτυχής + Ένα σφάλμα προέκυψε κατά την αναμονή για το διακομιστή, η λειτουργία δεν ήταν επιτυχής Η λειτουργία δεν ήταν δυνατό να ολοκληρωθεί, ο διακομιστής δεν είναι διαθέσιμος diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml index 1b3138db..e05cd365 100644 --- a/res/values-en-rGB/strings.xml +++ b/res/values-en-rGB/strings.xml @@ -93,6 +93,7 @@ Download failed, you need to login again Choose account Synchronisation failed + Synchronisation failed, you need to relogin Synchronisation of %1$s could not be completed Invalid password for %1$s Conflicts found diff --git a/res/values-eo/strings.xml b/res/values-eo/strings.xml index b5a99aca..ccd8faf3 100644 --- a/res/values-eo/strings.xml +++ b/res/values-eo/strings.xml @@ -1,8 +1,11 @@ + Android-aplikaĵo %1$s + eldono %1$s Alŝuti dosieron Enhavo el aliaj aplikaĵoj Dosieroj + Malfermi per Nova dosierujo Agordo Detaloj @@ -14,11 +17,15 @@ PIN de App-aplikaĵo Protekti vian klienton Helpo + Rekomendi al amiko + Kontroli servilon + Servila adreso https://... Uzantonomo Pasvorto Dosieroj Konekti Alŝuti + Elektu alŝutan dosierujon: Neniu konto troviĝis Estas neniu $1%s-konto en via aparato. Bonvolu agordi konton unue. Agordi @@ -35,6 +42,7 @@ Elŝuti La dosiero alinomiĝis al %1$s dum alŝuto Konhavigi ligilon + Malkunhavigi ligilon Jes Ne Akcepti @@ -43,6 +51,7 @@ Nuligi Konservi kaj forlasi Eraro + Ŝargante... Nekonata eraro Pri Ŝanĝi la pasvorton @@ -56,19 +65,30 @@ %1$s sukcese alŝutiĝis Alŝuto malsukcesis Alŝuto de %1s ne eblis plenumiĝi + Alŝuto malsukcesis, vi devas reensaluti Elŝutante... %1$d%% Elŝutante %2$s Elŝuto sukcesis %1$s sukcese elŝutiĝis Elŝuto malsukcesis Elŝuto de %1$s ne eblis plenumiĝi + Ankoraŭ ne elŝutita + Elŝuto malsukcesis, vi devas reensaluti Elekti konton Sinkronigo malsukcesis Sinkronigo de %1$s ne povis plenumiĝi + Nevalida pasvorto por %1$s Konfliktoj troviĝis %1$d ade sinkronigataj dosieroj ne povis sinkroniĝi Malsukcesis ada sinkronigo de dosieroj Enhavoj de %1$d dosieroj ne povis sinkroniĝi (%2$d konfliktas) + Iuj lokaj dosieroj forgesiĝis + La dosierujo %1$s ne plu ekzistas + Movi ĉion + Ĉiuj dosieroj moviĝis + Iuj dosieroj ne povis moviĝi + Loka: %1$s + Malloka: %1$s Bonvolu enigi vian PIN-on de aplikaĵo Enigu PIN-on de aplikaĵo Bonvolu reenigi PIN-on de aplikaĵo @@ -77,6 +97,9 @@ Malĝusta PIN de aplikaĵo PIN de aplikaĵo foriĝis PIN de aplikaĵo konserviĝis + %1$s (ludanta) + %1$s (ŝarganta) + Ekhavante rajtigon... Provante ensaluti... Neniu reta konekto Sekura konekto ne haveblas. @@ -92,9 +115,16 @@ Nerekonita eldono de servilo Ne eblis starigi konekton Sekura konekto stariĝis + Malĝusta uzantonomo aŭ pasvorto + Malsukcesa rajtigo + Bonvolu enigi la nunan pasvorton + Konektante al aŭtentiga servilo... + La servilo ne kongruas kun ĉi tiu aŭtentiga metodo Teni dosieron ĝisdatigita Alinomigi Forigi + Ĉu vi vere volas forigi %1$s? + Ĉu vi vere volas forigi %1$s kaj ĝia enhavo? Nur loka Nur lokaj enhavoj Forigi el la servilo @@ -106,9 +136,14 @@ Alinomigo ne povis plenumiĝi Malloka dosiero ne povis kontroliĝi Dosierenhavoj jam sinkroniĝis + Malpermesataj signoj: / \\ < > : \" | ? * + Dosieronomo ne povas malpleni Atendu momenton Neatendita problemo; bonvolu provi alian aplikaĵon por elekti la dosieron Neniu dosiero elektiĝis + Sendi ligilon al... + Ensaluti per oAuth2 + Konektante al oAuth2-servilo... La idento de la ejo ne povis kontroliĝi - La servila atestilo ne fidindas - La servila atestilo eksvalidiĝis @@ -130,12 +165,22 @@ Subskribo: Algoritmo: Ĉi tio estas lokokupilo + PNG-bildo + 389 KB + 12:23:45 Alŝuti bildojn nur per WiFi Alŝuta konflikto La malloka dosiero %s estas ne sinkronigita kun loka dosiero. Se la ago daŭrus, enhavo de la dosiero en la servilo anstataŭiĝus. Konservi ambaŭ Anstataŭigi Ne alŝuti + Antaŭvido de bildo + Ĉi tiu bildo ne povas montriĝi + %1$s ne povis kopiiĝi al la loka dosierujo %2$s + elekti ĉion + Mesaĝo de malsukceso: Sendi + Kopii ligilon Kopiita en la tondejon + Eraro okazis dum konekto al la servilo. diff --git a/res/values-es-rAR/strings.xml b/res/values-es-rAR/strings.xml index 4bb22bee..6b803640 100644 --- a/res/values-es-rAR/strings.xml +++ b/res/values-es-rAR/strings.xml @@ -97,7 +97,6 @@ Algunos archivos no pudieron ser movidos Local: %1$s Remote: %1$s - No hay suficiente espacio para copiar los archivos seleccionados al directorio %1$s. Querés moverlos ahí? Por favor, escribí el PIN de la aplicación Ingresá el PIN de la aplicación Se te pedirá el PIN cada vez que esta app sea iniciada. diff --git a/res/values-es-rCL/strings.xml b/res/values-es-rCL/strings.xml index 74b5fc86..341aa737 100644 --- a/res/values-es-rCL/strings.xml +++ b/res/values-es-rCL/strings.xml @@ -79,7 +79,6 @@ algunos archivos no pueden ser transferidos Local: %1$s Remoto: %1$s - No hay espacio suficiente para copiar los archivos seleccionados en la %1$s carpeta. Le gustaria que los trasladaran en su lugar? Por favor, ingreses su PIN de aplicación Ingrese su PIN de aplicación El PIN será solicitado cada vez que la aplicación se inicie diff --git a/res/values-es-rMX/strings.xml b/res/values-es-rMX/strings.xml index 441c54c8..d906888c 100644 --- a/res/values-es-rMX/strings.xml +++ b/res/values-es-rMX/strings.xml @@ -97,7 +97,6 @@ Algunos archivos no han podido ser movidos Local: %1$s Remoto: %1$s - No hay suficiente espacio para copiar los archivos seleccionados en la carpeta %1$s. ¿Quiere moverlos en lugar de copiarlos? Por favor, inserta tu PIN de aplicación Introduzca un PIN para la aplicación Se solicitará el PIN cada vez que se inicie la aplicación diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml index f6d05d89..ea42c3b3 100644 --- a/res/values-es/strings.xml +++ b/res/values-es/strings.xml @@ -93,6 +93,7 @@ Descarga fallida, necesita reinicar la sesión Elige una cuenta Falló la sincronización + La sincronización falló, debe reiniciar la sesión La sincronización de %1$s s no se pudo completar Contraseña no válida para %1$s Se encontraron conflictos @@ -108,7 +109,7 @@ No se han podido mover algunos archivos Local: %1$s Remoto: %1$s - No hay suficiente espacio para copiar los archivos seleccionados en la carpeta %1$s. ¿Quiere moverlos en lugar de copiarlos? + No hay suficiente espacio para copiar los archivos seleccionados a la carpeta %1$s. ¿Desea moverlos en vez de copiarlos? Por favor, inserta tu PIN de aplicación Introduzca un PIN para la aplicación Se solicitará el PIN cada vez que se inicie la aplicación diff --git a/res/values-et-rEE/strings.xml b/res/values-et-rEE/strings.xml index 69f7e90b..da787a69 100644 --- a/res/values-et-rEE/strings.xml +++ b/res/values-et-rEE/strings.xml @@ -93,6 +93,7 @@ Allaladimine ebaõnnestus, sa pead uuesti sisse logima Vali konto Sünkroniseerimine ebaõnnestus + Sünkroniseering katkes, pead uuesti sisse logima %1$s sünkroniseerimise lõpetamine ebaõnnestus Vigane parool %1$s jaoks Leite konflikte @@ -108,7 +109,7 @@ Mõningaid faile ei saa ümber tõsta Kohalik: %1$s Serveris: %1$s - Pole piisavalt ruumi kopeerimaks valitud faile kataloogi %1$s. Soovid kopeerimise asemel neid ümber tõsta? + Pole piisavalt ruumi kopeerimaks valitud faile kataloogi %1$s. Kas soovid kopeerimise asemel neid ümber tõsta? Palun sisesta oma rakenduse PIN Sisesta oma rakenduse PIN PIN-i nõutakse iga kord, kui rakendus käivitatakse @@ -167,9 +168,12 @@ See server ei toeta seda autentimise viisi %1$s ei toeta mitme konto kasutamist Server ei tagasta korrektset kasutaja ID-d. Palun kontakteeru administraatoriga.\n⇥ + Ei suuda autoriseerida selle serveriga. Hoia faili ajakohasena Nimeta ümber Eemalda + Oled sa kindel, et soovid %1$s eemaldada? + Kas sa tõesti soovid eemaldada %1$s ja selle sisu? Ainult kohalik Ainult kohalik sisu Eemalda serverist @@ -229,6 +233,7 @@ Kirjuta üle Ära uuenda Pildi eelvaade + Seda pilti ei saa näidata %1$s ei suudetud kopeerida kohalikku kataloogi %2$s Ebaõnnestunud kohene üleslaadimine Ebaõnnestunud kohesed üleslaadimised @@ -237,6 +242,7 @@ proovi uuesti kõik valitud eemalda kõik valitud üleslaadimise järjekorrast proovi uuesti pilti üles laadida: + Laadi rohkem pilte ära tee midagi, sa pole võrku ühendatud koheseks üleslaadimiseks Veateade: Palun kontrolli oma serveri seadeid, võib-olla on mahulimiit ületatud. @@ -248,7 +254,9 @@ Saada Kopeeri link Kopeeritud lõikepuhvrisse + Viga: ei suutnud operatsiooni lõpetada Serveriga ühendumisel tekkis tõrge. Serverilt vastuse ootamisel tekkis tõrge, toimingu sooritamine ebaõnnestus Serverilt vastuse ootamisel tekkis tõrge, toimingu sooritamine ebaõnnestus + Toimingu lõpetamine ebaõnnestus, server pole saadaval diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml index 16121e03..ea695552 100644 --- a/res/values-fa/strings.xml +++ b/res/values-fa/strings.xml @@ -98,7 +98,6 @@ بعضی از فایل ها نمی توانند انتقال یابند محلی: %1$s دور از دسترس: %1$s - فضایی به اندازه ی کافی برای کپی کردن فایل ها در پوشه ی %1$s نیست.آیا می خواهید آنها را به جای دیگری انتقال دهید؟ لطفا PIN برنامه خودتان را وارد کنید PIN برنامه را وارد کنید هر زمان که برنامه آغاز شود PIN درخواست خواهد شد. diff --git a/res/values-fi-rFI/strings.xml b/res/values-fi-rFI/strings.xml index 17622f6f..a50ab45f 100644 --- a/res/values-fi-rFI/strings.xml +++ b/res/values-fi-rFI/strings.xml @@ -17,6 +17,8 @@ Tilien hallinta Sovelluksen PIN-koodi Suojaa Asiakasohjelmasi + Välittömät videolähetykset + Lähetä kameralla kuvatut videot välittömästi Käytä lokitusta Tämä näyttää tallennetut lokit Poista historia @@ -33,6 +35,7 @@ Tiedostot Yhdistä Lähetä + Valitse lähetyskansio: Tiliä ei löytynyt Laitteelle ei ole asetettu %1$s-tiliä. Luo tili ensin. Asetukset @@ -84,6 +87,7 @@ Lataus epäonnistui, kirjaudu uudelleen Valitse tili Synkronointi epäonnistui + Synkronointi epäonnistui, kirjaudu uudelleen Kohteen %1$s synkronointia ei voitu suorittaa loppuun Virheellinen salasana tilille %1$s Ristiriitoja löytynyt @@ -130,6 +134,7 @@ Palvelimen vastaus viipyy liian kauan Väärin annettu osoite SSL:n alustus epäonnistui + SSL-palvelimen identiteettiä ei voitu varmistaa Tuntematon palvelimen versio Yhteyden muodostus epäonnistui Salattu yhteys muodostettu @@ -143,6 +148,7 @@ Yhdistetään tunnistautumispalvelimeen… Palvelin ei tue tätä tunnistautumistapaa %1$s ei tue useita tilejä + Tunnistautuminen palvelinta vastaan ei onnistu Pidä tiedosto ajan tasalla Nimeä uudelleen Poista @@ -203,13 +209,18 @@ Korvaa Älä lähetä Kuvan esikatselu + Tätä kuvaa ei voi näyttää valitse kaikki yritä uudelleen kaikkia valittuja + Lataa lisää kuvia Virheviesti: + Jakaminen ei ole käytössä palvelimellasi. Ota yhteys\n\t\tylläpitäjään. Valitettavasti tämän tiedoston tai kansion jakaminen ei onnistu. Varmista että se on olemassa Virhe tiedoston tai kansion jakamista yrittäessä Lähetä Kopioi linkki Kopioitu leikepöydälle + Kriittinen virhe: toimintoja ei voi suorittaa Virhe palvelimeen yhdistäessä + Toimintoa ei voi suorittaa loppuun, palvelin ei ole käytettävissä diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index eb1abace..506cdc12 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -93,6 +93,7 @@ Le téléchargement a échoué, vous devez vous connecter à nouveau Choisissez un compte La synchronisation a échoué + Échec de la synchronisation, vous devez vous reconnecter à nouveau La synchronisation de %1$s ne peut pas être complétée Mot de passe invalide pour %1$s Des conflits ont été trouvés @@ -108,7 +109,7 @@ Certains fichiers n\'ont pu être déplacés Local: %1$s Distant: %1$s - Il n\'y a pas assez de place disponible pour copier les fichiers sélectionnés dans le dossier %1$s. Voulez-vous les déplacer à la place ? + Il n\'y a pas assez de place disponible pour copier les fichiers sélectionnés dans le dossier %1$s. Voulez-vous quand même les déplacer ? Veuillez saisir votre code de sécurité Veuillez saisir votre code de sécurité Le code PIN vous sera demandé à chaque lancement de l\'application diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml index 725f5b5e..50297077 100644 --- a/res/values-gl/strings.xml +++ b/res/values-gl/strings.xml @@ -93,6 +93,7 @@ Fallou a descarga, necesita volver acceder Escoller unha conta Produciuse un fallo na sincronización + Fallou a sincronización, necesita volver acceder Non foi posíbel completar a sincronización de %1$s Contrasinal incorrecto para %1$s Atopáronse conflictos diff --git a/res/values-hu-rHU/strings.xml b/res/values-hu-rHU/strings.xml index e26ddb46..20d31ce4 100644 --- a/res/values-hu-rHU/strings.xml +++ b/res/values-hu-rHU/strings.xml @@ -98,7 +98,6 @@ Egyes fájlokat nem sikerült áthelyezni Helyi: %1$s Távoli: %1$s - Nincs elég hely ahhoz, hogy a kiválasztott fájlokat a %1$s mappába másoljuk. Akkor inkább helyezzük át őket oda? Kérem adja meg az alkalmazás PIN-kódját Az alkalmazás PIN-kódja A PIN-t kötelező lesz megadni az alkalmazás minden indításakor diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml index 2cacb0d6..b21685e5 100644 --- a/res/values-it/strings.xml +++ b/res/values-it/strings.xml @@ -93,6 +93,7 @@ Scaricamento non riuscito, devi ripetere l\'accesso Scegli account Sincronizzazione non riuscita + Sincronizzazione non riuscita, devi ripetere l\'accesso La sincronizzazione di %1$s non può essere completata Password non valida per %1$s Conflitti rilevati @@ -108,7 +109,7 @@ Alcuni file non possono essere spostati Locale: %1$s Remoto %1$s - Non c\'è spazio sufficiente per copiare i file selezionati nella cartella %1$s. Vuoi invece spostarli nella cartella? + Non c\'è spazio sufficiente per copiare i file selezionati nella cartella %1$s. Vuoi invece spostarli? Inserisci il PIN dell\'applicazione Inserisci il PIN di l\'applicazione Il PIN sarà richiesto ad ogni avvio dell\'applicazione diff --git a/res/values-ja-rJP/strings.xml b/res/values-ja-rJP/strings.xml index 4278f487..90c4dcec 100644 --- a/res/values-ja-rJP/strings.xml +++ b/res/values-ja-rJP/strings.xml @@ -108,7 +108,7 @@ 一部のファイルは移動できませんでした ローカル: %1$s リモート: %1$s - %1$s フォルダーに選択されたファイルをコピーするのに十分な空き領域がありません。コピーする代わりに、それらを移動させますか? + 十分なスペースが無いため、選択されたファイルを %1$s フォルダーにコピーすることができません。コピーする代わりに、それらを移動させますか? アプリのパスワードを入力してください アプリのパスワードを入力してください アプリ開始時に毎回PINが要求されます。 diff --git a/res/values-ka-rGE/strings.xml b/res/values-ka-rGE/strings.xml index 0cc10abf..02c4b9d4 100644 --- a/res/values-ka-rGE/strings.xml +++ b/res/values-ka-rGE/strings.xml @@ -76,7 +76,6 @@ რამოდენიმე ფაილის გადატანა ვერ მოხერხდა ლოკალური: %1$s დაშორებული: %1$s - ადგილი არ არის მონიშნული ფაილების დასაკოპირებლად %1$s ფოლდერში. გინდათ თქვენ გადაიტანოთ ისინი ამის მაგივრად? გთხოვთ, ჩასვათ თქვენი აპლიკაციის PIN–ი შეიყვანეთ თქვენი აპლიკაციის PIN–ი PIN–ი მოთხოვნილი იქნება აპლიკაციის ყოველ ჩართვაზე diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml index 73d01e58..4ba7ab05 100644 --- a/res/values-ko/strings.xml +++ b/res/values-ko/strings.xml @@ -97,7 +97,6 @@ 몇몇 파일을 옮기지 못했습니다. 로컬: %1$s 원격: %1$s - 선택한 파일을 %1$s폴더에 넣기에는 공간이 충분하지 않습니다. 다른곳으로 옮기시겠습니까? 앱 암호를 입력하십시오 앱 암호를 입력하십시오 앱을 시작할 때마다 암호를 물어봅니다 diff --git a/res/values-ml-rIN/strings.xml b/res/values-ml-rIN/strings.xml index c757504a..9bb8089a 100644 --- a/res/values-ml-rIN/strings.xml +++ b/res/values-ml-rIN/strings.xml @@ -1,2 +1,5 @@ - + + ഫയലുകൾ + ഫയലുകൾ + diff --git a/res/values-nb-rNO/strings.xml b/res/values-nb-rNO/strings.xml index 55ad86c1..a6122df4 100644 --- a/res/values-nb-rNO/strings.xml +++ b/res/values-nb-rNO/strings.xml @@ -93,6 +93,7 @@ Nedlasting feilet. Du må logge inn på nytt Velg konto Synkronisering feilet + Synkronisering feilet, du må logge inn på nytt Synkronisering av %1$s kunne ikke fullføres Ugyldig passord for %1$s Konflikter funnet @@ -108,7 +109,7 @@ Noen filer kunne ikke fjernes Lokal: %1$s Ekstern: %1$s - Det er ikke nok plass til å kopiere de valgte filene til mappe %1$s. Vil du flytte dem i stedet? + Det er ikke nok plass til å kopiere de valgte filene inn i mappen %1$s. Vil du flytte dem i stedet? Vennligst tast inn din App-PIN Skriv inn din PIN kode PIN koden vil bli ettersourt hver gang appen starter diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml index 96caa442..11f063b1 100644 --- a/res/values-nl/strings.xml +++ b/res/values-nl/strings.xml @@ -93,6 +93,7 @@ Download mislukt, u moet opnieuw inloggen Kies account Synchronisatie mislukt + Synchronisatie mislukt, opnieuw inloggen Synchronisatie van %1$s kon niet worden voltooid Ongeldig wachtwoord voor %1$s Conflicten gevonden @@ -108,7 +109,7 @@ Een paar bestanden konden niet worden verplaatst Lokaal: %1$s Extern: %1$s - Er is niet genoeg ruimte om de gekopieerde bestanden ook te plaatsen in map %1$s. Wilt u ze erheen verplaatsten? + Er is niet genoeg ruimte om de bestanden te gekopieëren in map %1$s. Wilt u ze erheen verplaatsten? Voer App PIN in Voer App PIN in De PIN wordt steeds opnieuw gevraagd als de app wordt gestart diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml index be625727..876be971 100644 --- a/res/values-pl/strings.xml +++ b/res/values-pl/strings.xml @@ -93,6 +93,7 @@ Ściganie nie powiodło się, musisz się ponownie zalogować Wybierz konto Błąd synchronizacji + Synchronizacja nie powiodła się, musisz się przelogować Nie można było ukończyć synchronizacji %1$s Niepoprawne hasło dla %1$s Znaleziono konflikty diff --git a/res/values-pt-rBR/strings.xml b/res/values-pt-rBR/strings.xml index 9ccfc86c..4775649c 100644 --- a/res/values-pt-rBR/strings.xml +++ b/res/values-pt-rBR/strings.xml @@ -21,9 +21,9 @@ Enviar instantaneamente fotos tiradas com a camera Envio instantâneo de vídeos Enviar instantaneamente vídeos feitos com a camera - Habilitar conexão - Isto é usado para registrar os problemas - História de Registro + Habilitar Conexão + Isto é usado para registrar(log) os problemas + História de Registro(log) Isso mostra os registros gravados Excluir Histórico Ajuda @@ -40,7 +40,7 @@ Arquivos Conectar Enviar - Escolher pasta enviar: + Escolher pasta para enviar: Nenhuma conta encontrada Não existem contas %1$s no seu dispositivo. Por favor, configure uma conta primeiro. Instalação @@ -82,7 +82,7 @@ %1$s foi enviado com sucesso Falha no envio Envio de %1$s não pôde ser finalizado - Enviar falhou, você precisa reconectar + O envio falhou, você precisa reconectar Baixando … %1$d%% Baixando %2$s Download bem sucedido @@ -90,9 +90,10 @@ Download falhou Download de %1$s não pôde ser concluído Não baixado ainda - Baixar falhou, você precisa reconectar + O download falhou, você precisa reconectar Escolha a conta Sincronização falhou + A sincronização falhou, você necessita se reconectar Sincronização de %1$s não pôde ser completada Senha inválida para %1$s Conflitos encontrados @@ -108,7 +109,7 @@ Alguns arquivos não puderam ser movidos Local: %1$s Remoto: %1$s - Não há espaço suficiente para copiar os arquivos selecionados para a pasta %1$s. Ao invés disso, gostaria de movê-los? + Não existe espaço suficiente para copiar os arquivos selecionados para a pasta %1$s. Você gostaria de ao invés de copiar movê-los? Por favor, insira o seu PIN de Aplicativo Insira seu PIN de Aplicativo O PIN (senha) será solicitado toda vez que o aplicativo for iniciado @@ -130,7 +131,7 @@ Arquivo de mídia não corretamente codificado Expirou o tempo durante a tentativa Arquivo de mídia não pode ser transmitido - Arquivo de mídia não pode ser reproduzido com o estoque media player + Arquivo de mídia não pode ser reproduzido com o stock media player Erro de segurança tentando reproduzir %1$s Erro de entrada tentando reproduzir %1$s Erro inesperado tentando reproduzir %1$s @@ -145,7 +146,7 @@ Testando conexão... Configuração do servidor mal formada Uma conta para o mesmo usuário e servidor já existe no dispositivo - As informações que o usuário digitou não corresponde ao usuário da conta + As informações que o usuário digitou não correspondem ao usuário da conta Ocorreu um erro desconhecido! Não pôde encontrar host Instância de servidor não encontrada @@ -186,7 +187,7 @@ Conteúdo do arquivo já foi sincronizado A pasta não pode ser criada Caracteres proibidos: / \\ < > : \" | ? * - O nome do arquivo não pode ficar estar vazio + O nome do arquivo não pode estar vazio Aguarde um momento Problema inesperado; por favor, tente selecionar o arquivo com outro app Nenhum arquivo foi selecionado diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml index 2265e79a..af541694 100644 --- a/res/values-pt-rPT/strings.xml +++ b/res/values-pt-rPT/strings.xml @@ -108,7 +108,7 @@ Não foi possível mover alguns ficheiros Local: %1$s Remoto: %1$s - Não existe espaço suficiente para copiar os ficheiros seleccionados para a pasta %1$s . Deseja move-los? + Não existe espaço disponível para copiar o ficheiro seleccionado para a pasta %1$s . Em vez disso deseja mover o ficheiro? Por favor escreva o PIN da Aplicação Escreva o PIN da Aplicação O PIN vai ser pedido todas as vezes que iniciar a aplicação. @@ -167,9 +167,12 @@ O servidor não suporta este método de autenticação %1$s não suporta contas múltiplas O seu servidor não transmite o ID correcto. Por favor contacte o administrador. + Não foi possível autenticar no servidor manter ficheiro actualizado Renomear Remover + Tem a certeza que deseja remover %1$s ? + Deseja realmente remover %1$s e o seu conteúdo? Apenas localmente So conteúdos locais Apagar do servidor @@ -229,6 +232,7 @@ Sobrepor Não enviar. Pré-Visualização da imagem + Esta imagem não pode ser mostrada Não foi possível copiar %1$s para a pasta local %2$s O envio rápido falhou Falharam os Uploads-Instantâneos @@ -237,6 +241,7 @@ Tentar todos os seleccionados Eliminar todos os seleccionados da lista de envio Tentar envio da imagem: + Carregar mais Fotos não fazer nada, nao está online para o Upload-Instantâneo Mensagem de erro: Por favor verifique a configuração do servidor, talvez tenha excedido a sua quota @@ -248,7 +253,9 @@ Enviar Copiar ligação Copiado para a área de transferência + Erro crítico: não é possível executar as operações Ocorreu um erro durante a ligação ao servidos. Ocorreu um erro durante a ligação ao servidor, não foi possível realizar a operação. Ocorreu um erro durante a ligação ao servidor, não foi possível realizar a operação. + A operação não foi concluída, o servidor está inacessível. diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml index b74d8c31..26349ee4 100644 --- a/res/values-ro/strings.xml +++ b/res/values-ro/strings.xml @@ -1,5 +1,8 @@ + %1$s Aplicație Android + versiunea %1$s + Refresh cont Încarcă Conținut de la alte aplicații Fișiere @@ -15,13 +18,21 @@ PIN-ul aplicaţiei Protejaţi-vă clientul Încărcare instanta de imagine + Încărca instantaneu imagini luate de camera + Încărcare instantă de videoclipuri. + Încarcă videoclipuri instant, filmate cu camera. + Acesta este folosit pentru a înregistra problemele + Asta arata înregistrările salvate Ştergeţi istoric Ajutor Recomandati unui prieten + Feedback + Încearcă %1$s pe smartphone-ul tău! Verificaţi Serverul Adresa serverului https://... Nume utilizator Parolă + Nou la %1$s? Fișiere Conectare Încărcare @@ -32,7 +43,9 @@ Anulare Nu exista conţinut pentru încărcare Nu a fost primit nici un conţinut .Nu exista nimic de încărcat . + %1$s nu este permis sa acceseze conținutul shared Încărcare + Nu există fișiere în acest dosar. \nNoile fișiere pot fi adăugate cu opțiunea de meniu \"Upload\" Selectati un fisier pentru a afisa informatia aditionala Mărime: Tip: @@ -40,6 +53,9 @@ Modificat: Descarcă Împrospătare fişier + Fișierul a fost redenumit %1$s în timpul încărcării + Share link + Unshare link Da Nu OK @@ -62,15 +78,30 @@ %1$s a fost încărcat cu succes Încărcarea a eșuat Încărcarea fișierului %1$s nu a putut fi încheiată + Incărcarea a eşuat, trebuie să te logezi din nou Se descarcă... %1$d%% Se descarcă %2$s Descărcarea a reușit %1$s a fost descărcat cu succes Descărcarea a eșuat + Nu s-a putut face downloadarea completa a %1$s + Nu s-a descărcat încă + Descărcarea a eşuat, trebuie să te logezi din nou Alege cont Sincronizarea a eșuat + Sincronizarea %1$s nu a putut fi completata + Parolă greșită pentru %1$s + S-au gasit conflicte + Unele fisiere locale au fost uitate + %1$d fisiere din dosarul %2$s nu a putut fi copiat in + Începând cu versiunea 1.3.16, fișierele încărcate de acest aparat sunt copiate în dosarul local %1$s pentru a preveni pierderea de date atunci când un singur fișier este sincronizat cu conturi multiple. \nDatorita acestei schimbari, toate fișierele încărcate în versiunile anterioare ale acestei aplicații au fost copiate în dosarul %2$s. Cu toate acestea, o eroare a împiedicat finalizarea acestei operațiuni în timpul sincronizarii contului. Poti fie sa lasi fișierul(le), așa cum sunt și sa elimini link-ul spre \n%3$s, sau muți fișierul(le) în dosarul %1$s și păstrezi link-ul la %4$s. Mai jos sunt listate fișierul(le) locale și fișierul(le) la distanță în %5$s unde au fost link-ate. + Folderul %1$s nu mai există + Muta tot/toate Toate fişierele au fost mutate Unele fişiere nu au putut fi mutate + Local: %1$s + La distanta: %1$s + Nu este suficient spațiu pentru a copia fișierele selectate în dosarul %1$s . Dorești să le muți în loc?\n Te rugăm să specifici PIN-ul aplicației Introduceti PIN-ul aplicatiei PIN-ul va fi solicitat ori de cate ori aplicaţia este pornita @@ -80,43 +111,92 @@ PIN-ul aplicației este incorect PIN-ul aplicației a fost eliminat PIN-ul aplicației a fost memorat + %1$s player de muzică + %1$s (cântă) + %1$s (încarcă) + %1$s redare terminată Nu a fost găsit nici un fişier media + Nu a fost dat nici un cont + Fişierul nu este într-un cont valid + Codec media fără suport + Fişierul media nu a putut fi citit Fişierul media nu a fost codat corect + Timpul a expirat în ce încerca să execute + Fișierul media nu poate fi transmis + Fișierul media nu poate fi executat cu stock media player + Eroare de securitate în timp ce încerca să execute %1$s + Eroare de input în timp ce încerca să execute %1$s + Eroare neprevăzută în timp ce încerca să execute %1$s + Butonul rewind + Buton de play sau pauză + Butonul pentru repede înainte În curs de autentificare... Nu exista conexiune Conexiune securizată indisponibilă Conexiune stabilită Se testează conexiunea... Configurație serverului incorectă + Un cont pentru același utilizator și server există deja în dispozitiv + Utilizatorul introdus nu se potrivește cu utilizatorul acestui cont A apărut o eroare necunoscută! + Nu a putut gasi host-ul Instanța serverului nu a fost găsită + Server-ului i-a luat prea mult timp sa raspunda + URL scris gresit Inițializarea SSL a eșuat + Nu s-a putut verifica identitatea serverului SSL Versiune necunoscuta a serverului Nu s-a putut stabili conexiunea Conexiune sigură stabilită Utilizator sau parola greşită + Autorizare nereușită + Acces refuzat de serverul de autorizare + Autorizarea dvs. a expirat. Vă rugăm să autorizați din nou. Va rugam introduceţi parola curenta Sesiunea a expirat .Va rugam conectati-va din nou + Se conectează la serverul de autentificare... Serverul nu soporta aceasta metoda de autentificare + %1$s nu suporta conturi multiple + Nu se poate autentifica cu acest server Păstrează fișierul actualizat Redenumește Elimină + Doriti sigur sa stergeti %1$s? + Sigur vrei să elimini %1$s și conținutul său? Doar local + Doar continut local Elimină de pe server + De la distanță și local Eliminat cu succes Eliminarea nu a reușit Introduceţi un nou nume + Copia locala nu a putut fi renumita; incearca un nume diferit Redenumirea nu s-a putut realiza + Fisierul de la distanta nu a putut fi verificat + Continutul fisierului este deja sincronizat Nu a putut fi creat directorul + Caractere interzise: / \\ < > : \" | ? * + Numele fișierului nu poate fi gol. Așteaptă un moment Problema neasteptata ; selectati fisierul dintr-o aplicatie diferita Nu a fost selectat nici un fișier + Trimite link la ... + Întră în cont cu oAuth2 + Se conectează la serverul oAuth2... Nu s-a putut verifica identitatea site-ului Certificatul serverului nu este de incredere Certificatul serverului a expirat + - Perioada de valabilitate a certificatului serverului este în viitor + URL nu se potriveste cu numele gazda in certificat + Vrei să ai încredere în acest certificat, oricum? + Certificatul nu a putut fi salvat. Detalii Ascunde + A emis: + Emis de: + Nume comun Organizaţie + Unitate organizationala Tara : Stat: Locaţie: @@ -125,8 +205,44 @@ Catre: Semnatura: Algoritm: + Certificatul nu a putut fi aratat. - Nu exista nici o informaţie pentru aceasta eroare + Acesta este un substituent + placeholder.txt + Imagine PNG + 389 KO + 2012/05/18 12:23 PM + 12:23:45 + Incarca poze doar via WiFi + Încarcă videoclipuri doar via WiFi /Încărcare instanta + Actualizați conflictul + Fișierul de la distanță %s nu este sincronizat cu fișierul local. Continuand, se va înlocui conținutul fișierului de pe server. + Pastreaza amandoua + Scrie peste Nu încarcă + Previzualizare imagine + Aceasta imagine nu poate fi arătată + %1$s nu a putut fi copiat in dosarul local %2$s + Încărcare instantă nereușită + Încărcare instantă nereușită + Rezumat al tuturor imaginilor trimise instant eșuate + selectează tot + șterge tot ce-i selectat din coada de încărcare + încearcă să încarci imaginea iar:\n + Încarcă mai multe Poze + Mesaj de eroare: + Vă rugăm să verificați configurația serverului, poate cota dvs. este depășită. + Ne pare rău, partajarea nu este activată pe server. Vă rugăm să contactați administratorul dvs. + Acest fișier sau director nu se poate partaja. Vă rugăm, asigurați-vă că există + A apărut o eroare în timp ce încerca să partajeze acest fișier sau folder + Imposibil de anulat partajarea acestui fișier sau director. Nu există. + A apărut o eroare în timp ce încerca să departajeze sau unshare acest fișier sau folder Expediază + Link copiat + Eroare critică: nu se pot executa operațiunile + A apărut o eroare în timp ce se conecta la server + A apărut o eroare în timp ce se aștepta pentru server, operațiunea nu s-a executat + A apărut o eroare în timp ce se aștepta pentru server, operațiunea nu s-a executat + Operațiunea nu a putut fi finalizată, serverul este indisponibil diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml index 160baa0c..81e9f53c 100644 --- a/res/values-ru/strings.xml +++ b/res/values-ru/strings.xml @@ -7,7 +7,7 @@ Содержимое из других приложений Файлы Открыть с помощью - Новый каталог + Новая папка Настройки Подробно Отправить @@ -38,7 +38,7 @@ Пароль Незнакомы с %1$s? Файлы - Соединить + Подключиться Загрузить Выберете папку для загрузки Учётная запись не найдена @@ -66,7 +66,7 @@ Отменить скачивание Отменить загрузку Отмена - Сохранить & Выйти + Сохранить и выйти Ошибка Идёт загрузка... Неизвестная ошибка @@ -108,12 +108,12 @@ Некоторые файлы не могут быть перемещены Локально: %1$s Удаленно: %1$s - Недостаточно места для копирования выделенных файлов в каталог %1$s. Переместить их в другое место? - Вставьте PIN вашего приложения + Для копирования выбранных файлов в папку %1$s недостаточно свободного места. Скопировать в другое место? + Вставьте App PIN Введите App PIN PIN-код будет запрашиваться при каждом запуске приложения. Повторите ввод App PIN - Удалить App PIN + Удалите App PIN Введённые App PIN не совпадают Неверный App PIN App PIN удалён @@ -138,8 +138,8 @@ Воспроизведение или пауза Перемотка вперед Происходит авторизация..... - Попытка входа... - Нет сетевого соединения + Авторизация... + Нет подключения к сети Защищённое соединение недоступно. Соединение установлено Тестирование соединения... diff --git a/res/values-sk-rSK/strings.xml b/res/values-sk-rSK/strings.xml index 5a90b838..0bfd78a6 100644 --- a/res/values-sk-rSK/strings.xml +++ b/res/values-sk-rSK/strings.xml @@ -108,7 +108,6 @@ Niektoré súbory nebolo možné premiestniť Lokálne: %1$s Vzdialené: %1$s - Nie je dostatok miesta na kopírovanie vybraných súborov do priečinka %1$s. Želáte si miesto kopírovania zmeniť? Zadajte PIN aplikácie Zadajte PIN aplikácie Pri každom spustení aplikácie bude vyžadovaný PIN @@ -160,7 +159,7 @@ Neúspešná autorizácia Prístup odmietnutý autorizačným serverom Nečakaný stav; prosím, opätovne vložte URL adresu servera - Vaša autorizácia expirovala. Prosím autorizujte sa znovu prosím + Vaša autorizácia vypršala. Prosím, autorizujte sa znovu Prosím, zadajte aktuálne heslo Vaše pripojenie vypršalo. Pripojte sa znovu prosím Pripájam sa na autentifikačný server... @@ -242,7 +241,7 @@ zmazať všetky vybrané z radu pre nahratie opakovať nahratie obrazu: Nahrať viac obrázkov - nevykonať nič, nie ste online pre instantné nahratie + nevykonať nič, nie ste online pre okamžité nahratie Chybová správa: Prosím skontrolujte nastavenie vášho servera, možno bola prekročená disková kvóta. Je nám to ľúto, ale zdieľanie nie je na vašom serveri povolené. Prosím kontaktujte vášho\n\t\tadministrátora. diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml index 42bff0f6..7ec6ee28 100644 --- a/res/values-sl/strings.xml +++ b/res/values-sl/strings.xml @@ -82,7 +82,7 @@ %1$s je uspešno poslan Pošiljanje je spodletelo Pošiljanja %1$s ni mogoče dokončati - Napaka pri nalaganju, ponovno se prijavite! + Pošiljanje je spodletelo. Pred nadaljevanjem se je treba prijaviti. Prejemanje … %1$d%% Prejemanje %2$s Prejemanje je uspešno končano @@ -90,9 +90,10 @@ Prejemanje je spodletelo Prejemanja %1$s ni mogoče dokončati Prejem še ni zaključen - Napaka pri prenosu, ponovno se prijavite! + Prejemanje je spodletelo. Pred nadaljevanjem se je treba prijaviti. Izbor računa Usklajevanje je spodletelo + Usklajevanje je spodletelo. Znova se je treba prijaviti. Usklajevanja %1$s ni mogoče dokončati Neveljavno geslo za %1$s Zaznani spori @@ -108,7 +109,7 @@ Nekaterih datotek ni mogoče premakniti Krajevno: %1$s Oddaljeno: %1$s - Na strežniku ni dovolj prostora za kopiranje izbranih datotek v mapo %1$s. Ali želite datoteke raje premakniti na novo mesto? + Ni dovolj prostora za kopiranje izbranih datotek v mapo %1$s. Ali jih želite premakniti? Vnesite kodo PIN programa Vnesite kodo PIN programa Koda PIN bo zahtevana vsakič pred zagonom programa. @@ -167,12 +168,12 @@ Strežnik ne podpira tega načina overitve %1$s ne omogoča podpore več računom Strežnik ne vrača ustreznega ID uporabnika. Stopite v stik s skrbnikom sistema.\n\t - Preverjanje pristnosti s tem strežnikom ni uspela + Ni mogoče preveriti pristnosti strežnika Datoteka naj bo posodobljena Preimenuj Odstrani - Resnično želite odstraniti %1$s? - Resnično želite odstraniti %1$s in vsebino? + Ali res želite odstraniti %1$s? + Ali res želite odstraniti %1$s skupaj s celotno vsebino? Le krajevno Le krajevno vsebino Odstrani s strežnika @@ -232,7 +233,7 @@ Prepiši Ne pošlji Predogled slike - Slike se ne da prikazati + Te slike ni mogoče prikazati Datoteke %1$s ni mogoče kopirati v krajevno mapo %2$s Spodletelo takojšnje pošiljanje Spodletela takojšnja pošiljanja @@ -254,8 +255,8 @@ Kopiraj povezavo Kopirano v odložišče Kritična napaka: dejanj ni možno izvesti - Pri povezavi s tem strežnikom je prišlo do napake. - Med čakanjem na strežnik je prišlo do napake. Zahtevanega dejanja ni bilo moč izvesti. - Med čakanjem na strežnik je prišlo do napake. Zahtevanega dejanja ni bilo moč izvesti. - Zahtevanega dejanja se ne da izvesti ker strežnik ni dosegljiv. + Med povezovanjem s strežnikom je prišlo do napake. + Med čakanjem na vzpostavitev povezave s strežnikom je prišlo do napake. Zahtevanega dejanja ni mogoče izvesti. + Med čakanjem na vzpostavitev povezave s strežnikom je prišlo do napake. Zahtevanega dejanja ni bilo mogoče končati. + Zahtevanega dejanja ni bilo mogoče končati. Strežnik ni dosegljiv. diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml index 35db3f12..8be33d92 100644 --- a/res/values-sv/strings.xml +++ b/res/values-sv/strings.xml @@ -108,7 +108,7 @@ Vissa filer kunde inte flyttas Lokal: %1$s Fjärr: %1$s - Det finns inte tillräckligt med utrymme för att kopiera valda filer till mappen %1$s. Vill du flytta filerna istället? + Det finns inte tillräckligt med ledigt utrymme för att kopiera de valda filerna till %1$s mappen. Skulle du vilja flytta dem istället? Ange din PIN Ange applikation PIN Din PIN måste anges varje gång du startar programmet. diff --git a/res/values-th-rTH/strings.xml b/res/values-th-rTH/strings.xml index ba6d8115..7b64376c 100644 --- a/res/values-th-rTH/strings.xml +++ b/res/values-th-rTH/strings.xml @@ -75,7 +75,6 @@ มีบางแฟ้มข้อมูลไม่สามารถย้ายได้ ต้นทาง: %1$s ปลายทาง: %1$s - ไม่มีพื้นที่เหลือเพียงพอสำหรับคัดลอกแฟ้มข้อมูลที่เลือกไว้ไปที่โฟลเดอร์ %1$s คุณต้องการย้ายมันแทนหรือไม่ กรุณาใส่ PIN แอปของคุณ กรอกรหัส PIN ของ App หมายเลข PIN ดังกล่าวจะถูกร้องขอทุกครั้งที่เริ่มใช้งานแอปฯ diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml index baa450ad..1bb3c14c 100644 --- a/res/values-tr/strings.xml +++ b/res/values-tr/strings.xml @@ -93,6 +93,7 @@ İndirme başarısız, yeniden oturum açmalısınız Hesap seçin Eşitleme başarısız + Eşitleme başarısız, yeniden oturum açmalısınız %1$s eşitlemesi tamamlanamadı %1$s için geçersiz parola Çakışma bulundu @@ -108,7 +109,7 @@ Bazı dosyalar taşınamadı Yerel: %1$s Uzak: %1$s - Seçilen dosyaları %1$s klasörüne kopyalamak için yeterli alan yok. Bunun yerine dosyayı taşımak ister misiniz? + Seçilen dosyaları %1$s dizinine kopyalamak için yeterli alan yok. Bunun yerine dosyayı içine taşımak ister misiniz? Lütfen uygulama PIN\'inizi girin Uygulama PIN\'inizi girin PIN uygulama yeniden başladığında tekrar sorulacak diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml index 260e756f..f1e6381c 100644 --- a/res/values-uk/strings.xml +++ b/res/values-uk/strings.xml @@ -78,7 +78,6 @@ Деякі файли не можуть бути переміщені Локально: %1$s Віддалено: %1$s - Недостатньо місця для копіювання обраних файлів у теку %1$s. Чи бажаєте ви перемістити їх замість копіювання? Будь ласка, введіть свій програмний PIN Введіть програмний PIN PIN необхідно буде вводити щоразу при запуску цієї програми diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml index d5a4bedc..56d20289 100644 --- a/res/values-vi/strings.xml +++ b/res/values-vi/strings.xml @@ -98,7 +98,6 @@ Một vài tập tin không thể chuyển đi Cục bộ: %1$s Từ xa: %1$s - Không đủ chỗ trống để chép các tập tin đã chọn vào thư mục %1$s. Bạn có muốn di chuyển chúng thay vì sao chép? Vui lòng, nhập mã PIN ứng dụng của bạn Nhập mã PIN ứng dụng App Mã PIN sẽ được yêu cầu mỗi khi ứng dụng được bật diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml index cbedd5b6..6df723e9 100644 --- a/res/values-zh-rCN/strings.xml +++ b/res/values-zh-rCN/strings.xml @@ -104,7 +104,6 @@ 某些文件无法被移动 本地: %1$s 远程:%1$s - 没有足够的空间来将选定的文件复制到%1$s文件夹. 是否使用使用移动来代替复制? 请输入您的App PIN码 输入 App PIN码 每次应用启动时都会请求PIN码 diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml index 7870ba3c..e606c154 100644 --- a/res/values-zh-rTW/strings.xml +++ b/res/values-zh-rTW/strings.xml @@ -108,7 +108,6 @@ 部份文件無法被移動 本地: %1$s 遠端: %1$s - 無足夠的空間可以複製檔案到 %1$s 目錄. 是否使用移動的方式來處理? 請輸入您的 App 密碼 輸入您的 App 密碼 這個密碼在你每次啟動這程式時都會被要求輸入 diff --git a/res/values/strings.xml b/res/values/strings.xml index 3a1f97d2..71436a86 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -97,6 +97,7 @@ Download failed, you need to relogin Choose account Synchronization failed + Synchronization failed, you need to relogin Synchronization of %1$s could not be completed Invalid password for %1$s Conflicts found @@ -112,7 +113,7 @@ "Some files could not be moved" "Local: %1$s" "Remote: %1$s" - There is not space enough to copy the selected files into the %1$s folder. Would like to move them into instead? + There is not space enough to copy the selected files into the %1$s folder. Would you like to move them instead? Please, insert your App PIN Enter your App PIN diff --git a/src/com/owncloud/android/MainApp.java b/src/com/owncloud/android/MainApp.java index 85718ff6..08efe342 100644 --- a/src/com/owncloud/android/MainApp.java +++ b/src/com/owncloud/android/MainApp.java @@ -16,22 +16,44 @@ */ package com.owncloud.android; +import com.owncloud.android.lib.common.OwnCloudClientManagerFactory; +import com.owncloud.android.lib.common.OwnCloudClientManagerFactory.Policy; + import android.app.Application; import android.content.Context; /** * Main Application of the project * - * Contains methods to build the "static" strings. These strings were before constants in different classes + * Contains methods to build the "static" strings. These strings were before constants in different + * classes * * @author masensio + * @author David A. Velasco */ public class MainApp extends Application { + + private static final String AUTH_ON = "on"; + + @SuppressWarnings("unused") + private static final String POLICY_SINGLE_SESSION_PER_ACCOUNT = "single session per account"; + @SuppressWarnings("unused") + private static final String POLICY_ALWAYS_NEW_CLIENT = "always new client"; private static Context mContext; - + public void onCreate(){ super.onCreate(); MainApp.mContext = getApplicationContext(); + + boolean isSamlAuth = AUTH_ON.equals(getString(R.string.auth_method_saml_web_sso)); + + if (isSamlAuth) { + OwnCloudClientManagerFactory.setDefaultPolicy(Policy.SINGLE_SESSION_PER_ACCOUNT); + + } else { + OwnCloudClientManagerFactory.setDefaultPolicy(Policy.ALWAYS_NEW_CLIENT); + } + } public static Context getAppContext() { @@ -78,4 +100,5 @@ public class MainApp extends Application { public static String getLogName() { return getAppContext().getResources().getString(R.string.log_name); } + } diff --git a/src/com/owncloud/android/authentication/AuthenticatorActivity.java b/src/com/owncloud/android/authentication/AuthenticatorActivity.java index 32bbcdcc..bc0ab54e 100644 --- a/src/com/owncloud/android/authentication/AuthenticatorActivity.java +++ b/src/com/owncloud/android/authentication/AuthenticatorActivity.java @@ -62,6 +62,9 @@ import com.actionbarsherlock.app.SherlockDialogFragment; import com.owncloud.android.MainApp; import com.owncloud.android.R; import com.owncloud.android.authentication.SsoWebViewClient.SsoWebViewClientListener; +import com.owncloud.android.lib.common.OwnCloudAccount; +import com.owncloud.android.lib.common.OwnCloudClientManagerFactory; +import com.owncloud.android.lib.common.OwnCloudCredentialsFactory; import com.owncloud.android.lib.common.accounts.AccountTypeUtils; import com.owncloud.android.lib.common.accounts.AccountUtils.Constants; import com.owncloud.android.operations.DetectAuthenticationMethodOperation.AuthenticationMethod; @@ -723,9 +726,7 @@ SsoWebViewClientListener, OnSslUntrustedCertListener { Intent getServerInfoIntent = new Intent(); getServerInfoIntent.setAction(OperationsService.ACTION_GET_SERVER_INFO); getServerInfoIntent.putExtra(OperationsService.EXTRA_SERVER_URL, uri); - getServerInfoIntent.putExtra(OperationsService.EXTRA_AUTH_TOKEN_TYPE, mAuthTokenType); if (mOperationsServiceBinder != null) { - //Log_OC.wtf(TAG, "checking server..." ); mWaitingForOpId = mOperationsServiceBinder.newOperation(getServerInfoIntent); } else { Log_OC.wtf(TAG, "Server check tried with OperationService unbound!" ); @@ -828,9 +829,6 @@ SsoWebViewClientListener, OnSslUntrustedCertListener { * the root folder of the ownCloud server. */ private void checkBasicAuthorization() { - /// get the path to the root folder through WebDAV from the version server - String webdav_path = AccountUtils.getWebdavPath(mServerInfo.mVersion, mAuthTokenType); - /// get basic credentials entered by user String username = mUsernameInput.getText().toString(); String password = mPasswordInput.getText().toString(); @@ -840,26 +838,19 @@ SsoWebViewClientListener, OnSslUntrustedCertListener { IndeterminateProgressDialog.newInstance(R.string.auth_trying_to_login, true); dialog.show(getSupportFragmentManager(), WAIT_DIALOG_TAG); - /// test credentials accessing the root folder - String remotePath =""; - boolean successIfAbsent = false; - boolean followRedirects = true; - startExistenceCheckRemoteOperation(remotePath, this, successIfAbsent, webdav_path, username, password, followRedirects); + /// validate credentials accessing the root folder + accessRootFolderRemoteOperation(username, password); } - private void startExistenceCheckRemoteOperation(String remotePath, Context context, boolean successIfAbsent, String webdav_path, - String username, String password, boolean followRedirects) { + private void accessRootFolderRemoteOperation(String username, String password) { Intent existenceCheckIntent = new Intent(); existenceCheckIntent.setAction(OperationsService.ACTION_EXISTENCE_CHECK); existenceCheckIntent.putExtra(OperationsService.EXTRA_SERVER_URL, mServerInfo.mBaseUrl); - existenceCheckIntent.putExtra(OperationsService.EXTRA_REMOTE_PATH, remotePath); - existenceCheckIntent.putExtra(OperationsService.EXTRA_SUCCESS_IF_ABSENT, successIfAbsent); - existenceCheckIntent.putExtra(OperationsService.EXTRA_WEBDAV_PATH, webdav_path); + existenceCheckIntent.putExtra(OperationsService.EXTRA_REMOTE_PATH, "/"); existenceCheckIntent.putExtra(OperationsService.EXTRA_USERNAME, username); existenceCheckIntent.putExtra(OperationsService.EXTRA_PASSWORD, password); existenceCheckIntent.putExtra(OperationsService.EXTRA_AUTH_TOKEN, mAuthToken); - existenceCheckIntent.putExtra(OperationsService.EXTRA_FOLLOW_REDIRECTS, followRedirects); if (mOperationsServiceBinder != null) { //Log_OC.wtf(TAG, "starting existenceCheckRemoteOperation..." ); @@ -904,14 +895,8 @@ SsoWebViewClientListener, OnSslUntrustedCertListener { IndeterminateProgressDialog.newInstance(R.string.auth_trying_to_login, true); dialog.show(getSupportFragmentManager(), WAIT_DIALOG_TAG); - /// get the path to the root folder through WebDAV from the version server - String webdav_path = AccountUtils.getWebdavPath(mServerInfo.mVersion, mAuthTokenType); - - /// test credentials accessing the root folder - String remotePath =""; - boolean successIfAbsent = false; - boolean followRedirections = false; - startExistenceCheckRemoteOperation(remotePath, this, successIfAbsent, webdav_path, "", "", followRedirections); + /// validate credentials accessing the root folder + accessRootFolderRemoteOperation("", ""); } @@ -959,7 +944,15 @@ SsoWebViewClientListener, OnSslUntrustedCertListener { if (!mUsernameInput.getText().toString().equals(username)) { // fail - not a new account, but an existing one; disallow - result = new RemoteOperationResult(ResultCode.ACCOUNT_NOT_THE_SAME); + result = new RemoteOperationResult(ResultCode.ACCOUNT_NOT_THE_SAME); + /* + OwnCloudClientManagerFactory.getDefaultSingleton().removeClientFor( + new OwnCloudAccount( + Uri.parse(mServerInfo.mBaseUrl), + OwnCloudCredentialsFactory.newSamlSsoCredentials(mAuthToken)) + ); + */ + mAuthToken = ""; updateAuthStatusIconAndText(result); showAuthStatus(); Log_OC.d(TAG, result.getLogMessage()); @@ -1284,8 +1277,7 @@ SsoWebViewClientListener, OnSslUntrustedCertListener { mWaitingForOpId = Long.MAX_VALUE; dismissDialog(WAIT_DIALOG_TAG); - String webdav_path = AccountUtils.getWebdavPath(mServerInfo.mVersion, mAuthTokenType); - if (result.isSuccess() && webdav_path != null) { + if (result.isSuccess()) { /// be gentle with the user IndeterminateProgressDialog dialog = IndeterminateProgressDialog.newInstance(R.string.auth_trying_to_login, true); @@ -1298,10 +1290,7 @@ SsoWebViewClientListener, OnSslUntrustedCertListener { //mAuthToken = ((OAuth2GetAccessToken)operation).getResultTokenMap().get(OAuth2Constants.KEY_ACCESS_TOKEN); Log_OC.d(TAG, "Got ACCESS TOKEN: " + mAuthToken); - String remotePath =""; - boolean successIfAbsent = false; - boolean followRedirects = true; - startExistenceCheckRemoteOperation(remotePath, this, successIfAbsent, webdav_path, "", "", followRedirects); + accessRootFolderRemoteOperation("", ""); } else { updateAuthStatusIconAndText(result); @@ -1417,11 +1406,9 @@ SsoWebViewClientListener, OnSslUntrustedCertListener { String username = mUsernameInput.getText().toString().trim(); if (isOAuth) { username = "OAuth_user" + (new java.util.Random(System.currentTimeMillis())).nextLong(); - } - String accountName = username + "@" + uri.getHost(); - if (uri.getPort() >= 0) { - accountName += ":" + uri.getPort(); } + String accountName = com.owncloud.android.lib.common.accounts.AccountUtils. + buildAccountName(uri, username); Account newAccount = new Account(accountName, MainApp.getAccountType()); if (AccountUtils.exists(newAccount, getApplicationContext())) { // fail - not a new account, but an existing one; disallow @@ -1642,7 +1629,6 @@ SsoWebViewClientListener, OnSslUntrustedCertListener { getUserNameIntent.setAction(OperationsService.ACTION_GET_USER_NAME); getUserNameIntent.putExtra(OperationsService.EXTRA_SERVER_URL, mServerInfo.mBaseUrl); getUserNameIntent.putExtra(OperationsService.EXTRA_COOKIE, sessionCookie); - getUserNameIntent.putExtra(OperationsService.EXTRA_FOLLOW_REDIRECTS, followRedirects); if (mOperationsServiceBinder != null) { //Log_OC.wtf(TAG, "starting getRemoteUserNameOperation..." ); diff --git a/src/com/owncloud/android/authentication/OwnCloudAccount.java b/src/com/owncloud/android/authentication/OwnCloudAccount.java deleted file mode 100644 index 51a9900b..00000000 --- a/src/com/owncloud/android/authentication/OwnCloudAccount.java +++ /dev/null @@ -1,75 +0,0 @@ -/* ownCloud Android client application - * Copyright (C) 2014 ownCloud Inc. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ - -package com.owncloud.android.authentication; - -import android.accounts.Account; -import android.os.Parcel; -import android.os.Parcelable; - -/** - * Account with extra information specific for ownCloud accounts. - * - * TODO integrate in the main app - * - * @author David A. Velasco - */ -public class OwnCloudAccount extends Account { - - private String mAuthTokenType; - - public OwnCloudAccount(String name, String type, String authTokenType) { - super(name, type); - // TODO validate authTokentype as supported - mAuthTokenType = authTokenType; - } - - /** - * Reconstruct from parcel - * - * @param source The source parcel - */ - public OwnCloudAccount(Parcel source) { - super(source); - mAuthTokenType = source.readString(); - } - - @Override - public void writeToParcel(Parcel dest, int flags) { - super.writeToParcel(dest, flags); - dest.writeString(mAuthTokenType); - } - - - public String getAuthTokenType() { - return mAuthTokenType; - } - - - public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { - @Override - public OwnCloudAccount createFromParcel(Parcel source) { - return new OwnCloudAccount(source); - } - - @Override - public OwnCloudAccount [] newArray(int size) { - return new OwnCloudAccount[size]; - } - }; - -} diff --git a/src/com/owncloud/android/datamodel/FileDataStorageManager.java b/src/com/owncloud/android/datamodel/FileDataStorageManager.java index 650acf74..c8c0d24d 100644 --- a/src/com/owncloud/android/datamodel/FileDataStorageManager.java +++ b/src/com/owncloud/android/datamodel/FileDataStorageManager.java @@ -186,6 +186,8 @@ public class FileDataStorageManager { cv.put(ProviderTableMeta.FILE_ETAG, file.getEtag()); cv.put(ProviderTableMeta.FILE_SHARE_BY_LINK, file.isShareByLink() ? 1 : 0); cv.put(ProviderTableMeta.FILE_PUBLIC_LINK, file.getPublicLink()); + cv.put(ProviderTableMeta.FILE_PERMISSIONS, file.getPermissions()); + cv.put(ProviderTableMeta.FILE_REMOTE_ID, file.getRemoteId()); boolean sameRemotePath = fileExists(file.getRemotePath()); if (sameRemotePath || @@ -285,6 +287,8 @@ public class FileDataStorageManager { cv.put(ProviderTableMeta.FILE_ETAG, file.getEtag()); cv.put(ProviderTableMeta.FILE_SHARE_BY_LINK, file.isShareByLink() ? 1 : 0); cv.put(ProviderTableMeta.FILE_PUBLIC_LINK, file.getPublicLink()); + cv.put(ProviderTableMeta.FILE_PERMISSIONS, file.getPermissions()); + cv.put(ProviderTableMeta.FILE_REMOTE_ID, file.getRemoteId()); boolean existsByPath = fileExists(file.getRemotePath()); if (existsByPath || fileExists(file.getFileId())) { @@ -342,6 +346,8 @@ public class FileDataStorageManager { cv.put(ProviderTableMeta.FILE_ETAG, folder.getEtag()); cv.put(ProviderTableMeta.FILE_SHARE_BY_LINK, folder.isShareByLink() ? 1 : 0); cv.put(ProviderTableMeta.FILE_PUBLIC_LINK, folder.getPublicLink()); + cv.put(ProviderTableMeta.FILE_PERMISSIONS, folder.getPermissions()); + cv.put(ProviderTableMeta.FILE_REMOTE_ID, folder.getRemoteId()); operations.add(ContentProviderOperation.newUpdate(ProviderTableMeta.CONTENT_URI). withValues(cv). @@ -750,6 +756,8 @@ public class FileDataStorageManager { file.setShareByLink(c.getInt( c.getColumnIndex(ProviderTableMeta.FILE_SHARE_BY_LINK)) == 1 ? true : false); file.setPublicLink(c.getString(c.getColumnIndex(ProviderTableMeta.FILE_PUBLIC_LINK))); + file.setPermissions(c.getString(c.getColumnIndex(ProviderTableMeta.FILE_PERMISSIONS))); + file.setRemoteId(c.getString(c.getColumnIndex(ProviderTableMeta.FILE_REMOTE_ID))); } return file; @@ -1092,6 +1100,8 @@ public class FileDataStorageManager { cv.put(ProviderTableMeta.FILE_ETAG, file.getEtag()); cv.put(ProviderTableMeta.FILE_SHARE_BY_LINK, file.isShareByLink() ? 1 : 0); cv.put(ProviderTableMeta.FILE_PUBLIC_LINK, file.getPublicLink()); + cv.put(ProviderTableMeta.FILE_PERMISSIONS, file.getPermissions()); + cv.put(ProviderTableMeta.FILE_REMOTE_ID, file.getRemoteId()); boolean existsByPath = fileExists(file.getRemotePath()); if (existsByPath || fileExists(file.getFileId())) { diff --git a/src/com/owncloud/android/datamodel/OCFile.java b/src/com/owncloud/android/datamodel/OCFile.java index 82c341ca..92168ff5 100644 --- a/src/com/owncloud/android/datamodel/OCFile.java +++ b/src/com/owncloud/android/datamodel/OCFile.java @@ -65,6 +65,9 @@ public class OCFile implements Parcelable, Comparable { private boolean mShareByLink; private String mPublicLink; + private String mPermissions; + private String mRemoteId; + /** * Create new {@link OCFile} with given path. @@ -104,6 +107,8 @@ public class OCFile implements Parcelable, Comparable { mEtag = source.readString(); mShareByLink = source.readInt() == 1; mPublicLink = source.readString(); + mPermissions = source.readString(); + mRemoteId = source.readString(); } @Override @@ -124,6 +129,8 @@ public class OCFile implements Parcelable, Comparable { dest.writeString(mEtag); dest.writeInt(mShareByLink ? 1 : 0); dest.writeString(mPublicLink); + dest.writeString(mPermissions); + dest.writeString(mRemoteId); } /** @@ -334,6 +341,8 @@ public class OCFile implements Parcelable, Comparable { mEtag = null; mShareByLink = false; mPublicLink = null; + mPermissions = null; + mRemoteId = null; } /** @@ -518,4 +527,20 @@ public class OCFile implements Parcelable, Comparable { return (result != null) ? result : ""; } + public String getPermissions() { + return mPermissions; + } + + public void setPermissions(String permissions) { + this.mPermissions = permissions; + } + + public String getRemoteId() { + return mRemoteId; + } + + public void setRemoteId(String remoteId) { + this.mRemoteId = remoteId; + } + } diff --git a/src/com/owncloud/android/db/ProviderMeta.java b/src/com/owncloud/android/db/ProviderMeta.java index 2101a688..1adf6971 100644 --- a/src/com/owncloud/android/db/ProviderMeta.java +++ b/src/com/owncloud/android/db/ProviderMeta.java @@ -17,11 +17,11 @@ */ package com.owncloud.android.db; -import com.owncloud.android.MainApp; - import android.net.Uri; import android.provider.BaseColumns; +import com.owncloud.android.MainApp; + /** * Meta-Class that holds various static field information * @@ -31,7 +31,7 @@ import android.provider.BaseColumns; public class ProviderMeta { public static final String DB_NAME = "filelist"; - public static final int DB_VERSION = 6; + public static final int DB_VERSION = 7; private ProviderMeta() { } @@ -68,6 +68,8 @@ public class ProviderMeta { public static final String FILE_ETAG = "etag"; public static final String FILE_SHARE_BY_LINK = "share_by_link"; public static final String FILE_PUBLIC_LINK = "public_link"; + public static final String FILE_PERMISSIONS = "permissions"; + public static final String FILE_REMOTE_ID = "remote_id"; public static final String FILE_DEFAULT_SORT_ORDER = FILE_NAME + " collate nocase asc"; diff --git a/src/com/owncloud/android/files/services/FileDownloader.java b/src/com/owncloud/android/files/services/FileDownloader.java index 80d4a6dc..2e34a8b6 100644 --- a/src/com/owncloud/android/files/services/FileDownloader.java +++ b/src/com/owncloud/android/files/services/FileDownloader.java @@ -34,14 +34,15 @@ import com.owncloud.android.datamodel.FileDataStorageManager; import com.owncloud.android.datamodel.OCFile; import com.owncloud.android.lib.common.network.OnDatatransferProgressListener; -import com.owncloud.android.lib.common.OwnCloudClientFactory; +import com.owncloud.android.lib.common.OwnCloudAccount; import com.owncloud.android.lib.common.OwnCloudClient; +import com.owncloud.android.lib.common.OwnCloudClientManagerFactory; import com.owncloud.android.notifications.NotificationBuilderWithProgressBar; import com.owncloud.android.notifications.NotificationDelayer; -import com.owncloud.android.operations.DownloadFileOperation; import com.owncloud.android.lib.common.operations.RemoteOperationResult; import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode; import com.owncloud.android.lib.resources.files.FileUtils; +import com.owncloud.android.operations.DownloadFileOperation; import com.owncloud.android.ui.activity.FileActivity; import com.owncloud.android.ui.activity.FileDisplayActivity; import com.owncloud.android.ui.preview.PreviewImageActivity; @@ -347,8 +348,11 @@ public class FileDownloader extends Service implements OnDatatransferProgressLis /// prepare client object to send the request to the ownCloud server if (mDownloadClient == null || !mLastAccount.equals(mCurrentDownload.getAccount())) { mLastAccount = mCurrentDownload.getAccount(); - mStorageManager = new FileDataStorageManager(mLastAccount, getContentResolver()); - mDownloadClient = OwnCloudClientFactory.createOwnCloudClient(mLastAccount, getApplicationContext()); + mStorageManager = + new FileDataStorageManager(mLastAccount, getContentResolver()); + OwnCloudAccount ocAccount = new OwnCloudAccount(mLastAccount, this); + mDownloadClient = OwnCloudClientManagerFactory.getDefaultSingleton(). + getClientFor(ocAccount, this); } /// perform the download @@ -466,9 +470,10 @@ public class FileDownloader extends Service implements OnDatatransferProgressLis int tickerId = (downloadResult.isSuccess()) ? R.string.downloader_download_succeeded_ticker : R.string.downloader_download_failed_ticker; - boolean needsToUpdateCredentials = (downloadResult.getCode() == ResultCode.UNAUTHORIZED || - (downloadResult.isIdPRedirection() - && mDownloadClient.getCredentials() == null)); + boolean needsToUpdateCredentials = ( + downloadResult.getCode() == ResultCode.UNAUTHORIZED || + downloadResult.isIdPRedirection() + ); tickerId = (needsToUpdateCredentials) ? R.string.downloader_download_failed_credentials_error : tickerId; diff --git a/src/com/owncloud/android/files/services/FileUploader.java b/src/com/owncloud/android/files/services/FileUploader.java index e9d8d1b8..7a5f8de5 100644 --- a/src/com/owncloud/android/files/services/FileUploader.java +++ b/src/com/owncloud/android/files/services/FileUploader.java @@ -48,8 +48,9 @@ import com.owncloud.android.lib.resources.files.FileUtils; import com.owncloud.android.lib.resources.status.OwnCloudVersion; import com.owncloud.android.lib.common.accounts.AccountUtils.Constants; import com.owncloud.android.lib.common.network.OnDatatransferProgressListener; -import com.owncloud.android.lib.common.OwnCloudClientFactory; +import com.owncloud.android.lib.common.OwnCloudAccount; import com.owncloud.android.lib.common.OwnCloudClient; +import com.owncloud.android.lib.common.OwnCloudClientManagerFactory; import com.owncloud.android.ui.activity.FailedUploadActivity; import com.owncloud.android.ui.activity.FileActivity; import com.owncloud.android.ui.activity.FileDisplayActivity; @@ -486,8 +487,11 @@ public class FileUploader extends Service implements OnDatatransferProgressListe /// prepare client object to send requests to the ownCloud server if (mUploadClient == null || !mLastAccount.equals(mCurrentUpload.getAccount())) { mLastAccount = mCurrentUpload.getAccount(); - mStorageManager = new FileDataStorageManager(mLastAccount, getContentResolver()); - mUploadClient = OwnCloudClientFactory.createOwnCloudClient(mLastAccount, getApplicationContext()); + mStorageManager = + new FileDataStorageManager(mLastAccount, getContentResolver()); + OwnCloudAccount ocAccount = new OwnCloudAccount(mLastAccount, this); + mUploadClient = OwnCloudClientManagerFactory.getDefaultSingleton(). + getClientFor(ocAccount, this); } /// check the existence of the parent folder for the file to upload @@ -737,9 +741,10 @@ public class FileUploader extends Service implements OnDatatransferProgressListe String content = null; // check credentials error - boolean needsToUpdateCredentials = (uploadResult.getCode() == ResultCode.UNAUTHORIZED || - (uploadResult.isIdPRedirection() && - mUploadClient.getCredentials() == null)); + boolean needsToUpdateCredentials = ( + uploadResult.getCode() == ResultCode.UNAUTHORIZED || + uploadResult.isIdPRedirection() + ); tickerId = (needsToUpdateCredentials) ? R.string.uploader_upload_failed_credentials_error : tickerId; diff --git a/src/com/owncloud/android/operations/DetectAuthenticationMethodOperation.java b/src/com/owncloud/android/operations/DetectAuthenticationMethodOperation.java index b817e724..b90c25e9 100644 --- a/src/com/owncloud/android/operations/DetectAuthenticationMethodOperation.java +++ b/src/com/owncloud/android/operations/DetectAuthenticationMethodOperation.java @@ -64,7 +64,6 @@ public class DetectAuthenticationMethodOperation extends RemoteOperation { } private Context mContext; - private String mWebDavUrl; /** * Constructor @@ -72,9 +71,8 @@ public class DetectAuthenticationMethodOperation extends RemoteOperation { * @param context Android context of the caller. * @param webdavUrl */ - public DetectAuthenticationMethodOperation(Context context, String webdavUrl) { + public DetectAuthenticationMethodOperation(Context context) { mContext = context; - mWebDavUrl = webdavUrl; } @@ -93,15 +91,15 @@ public class DetectAuthenticationMethodOperation extends RemoteOperation { AuthenticationMethod authMethod = AuthenticationMethod.UNKNOWN; RemoteOperation operation = new ExistenceCheckRemoteOperation("", mContext, false); - client.setWebdavUri(Uri.parse(mWebDavUrl)); - client.setBasicCredentials("", ""); + client.clearCredentials(); client.setFollowRedirects(false); // try to access the root folder, following redirections but not SAML SSO redirections result = operation.execute(client); String redirectedLocation = result.getRedirectedLocation(); - while (redirectedLocation != null && redirectedLocation.length() > 0 && !result.isIdPRedirection()) { - client.setWebdavUri(Uri.parse(result.getRedirectedLocation())); + while (redirectedLocation != null && redirectedLocation.length() > 0 && + !result.isIdPRedirection()) { + client.setBaseUri(Uri.parse(result.getRedirectedLocation())); result = operation.execute(client); redirectedLocation = result.getRedirectedLocation(); } diff --git a/src/com/owncloud/android/operations/GetServerInfoOperation.java b/src/com/owncloud/android/operations/GetServerInfoOperation.java index 14f405ea..7d42886c 100644 --- a/src/com/owncloud/android/operations/GetServerInfoOperation.java +++ b/src/com/owncloud/android/operations/GetServerInfoOperation.java @@ -53,7 +53,6 @@ public class GetServerInfoOperation extends RemoteOperation { private static final String TAG = GetServerInfoOperation.class.getSimpleName(); private String mUrl; - private String mAuthTokenType; private Context mContext; private ServerInfo mResultData; @@ -62,14 +61,11 @@ public class GetServerInfoOperation extends RemoteOperation { * Constructor. * * @param url URL to an ownCloud server. - * @param authTokenType Identifies the authorization token supported by the caller; - * TODO ugly dependency, get rid of it. * @param context Android context; needed to check network state * TODO ugly dependency, get rid of it. */ - public GetServerInfoOperation(String url, String authTokenType, Context context) { + public GetServerInfoOperation(String url, Context context) { mUrl = trimWebdavSuffix(url); - mAuthTokenType = authTokenType; mContext = context; mResultData = new ServerInfo(); @@ -87,9 +83,9 @@ public class GetServerInfoOperation extends RemoteOperation { protected RemoteOperationResult run(OwnCloudClient client) { // first: check the status of the server (including its version) - GetRemoteStatusOperation getStatus = new GetRemoteStatusOperation(mUrl, mContext); + GetRemoteStatusOperation getStatus = new GetRemoteStatusOperation(mContext); RemoteOperationResult result = getStatus.execute(client); - + if (result.isSuccess()) { // second: get authentication method required by the server mResultData.mVersion = (OwnCloudVersion)(result.getData().get(0)); @@ -114,10 +110,8 @@ public class GetServerInfoOperation extends RemoteOperation { private RemoteOperationResult detectAuthorizationMethod(OwnCloudClient client) { Log_OC.d(TAG, "Trying empty authorization to detect authentication method"); - String webdav_path = AccountUtils.getWebdavPath(mResultData.mVersion, mAuthTokenType); - String webdav_url = mResultData.mBaseUrl + webdav_path; DetectAuthenticationMethodOperation operation = - new DetectAuthenticationMethodOperation(mContext, webdav_url); + new DetectAuthenticationMethodOperation(mContext); return operation.execute(client); } diff --git a/src/com/owncloud/android/operations/SynchronizeFolderOperation.java b/src/com/owncloud/android/operations/SynchronizeFolderOperation.java index a8e230d5..fc4a74e8 100644 --- a/src/com/owncloud/android/operations/SynchronizeFolderOperation.java +++ b/src/com/owncloud/android/operations/SynchronizeFolderOperation.java @@ -416,6 +416,8 @@ public class SynchronizeFolderOperation extends RemoteOperation { file.setMimetype(remote.getMimeType()); file.setModificationTimestamp(remote.getModifiedTimestamp()); file.setEtag(remote.getEtag()); + file.setPermissions(remote.getPermissions()); + file.setRemoteId(remote.getRemoteId()); return file; } diff --git a/src/com/owncloud/android/operations/common/SyncOperation.java b/src/com/owncloud/android/operations/common/SyncOperation.java index e16530d8..8c5678b1 100644 --- a/src/com/owncloud/android/operations/common/SyncOperation.java +++ b/src/com/owncloud/android/operations/common/SyncOperation.java @@ -23,7 +23,6 @@ import com.owncloud.android.lib.common.operations.OnRemoteOperationListener; import com.owncloud.android.lib.common.operations.RemoteOperation; import com.owncloud.android.lib.common.operations.RemoteOperationResult; -import android.app.Activity; import android.content.Context; import android.os.Handler; @@ -97,6 +96,7 @@ public abstract class SyncOperation extends RemoteOperation { * @param listenerHandler Handler associated to the thread where the methods of the listener objects must be called. * @return Thread were the remote operation is executed. */ + /* public Thread execute(FileDataStorageManager storageManager, Context context, OnRemoteOperationListener listener, Handler listenerHandler, Activity callerActivity) { if (storageManager == null) { throw new IllegalArgumentException("Trying to execute a sync operation with a NULL storage manager"); @@ -107,6 +107,7 @@ public abstract class SyncOperation extends RemoteOperation { mStorageManager = storageManager; return super.execute(storageManager.getAccount(), context, listener, listenerHandler, callerActivity); } + */ /** diff --git a/src/com/owncloud/android/providers/FileContentProvider.java b/src/com/owncloud/android/providers/FileContentProvider.java index c84d66b0..d001bf85 100644 --- a/src/com/owncloud/android/providers/FileContentProvider.java +++ b/src/com/owncloud/android/providers/FileContentProvider.java @@ -93,6 +93,10 @@ public class FileContentProvider extends ContentProvider { ProviderTableMeta.FILE_SHARE_BY_LINK); mFileProjectionMap.put(ProviderTableMeta.FILE_PUBLIC_LINK, ProviderTableMeta.FILE_PUBLIC_LINK); + mFileProjectionMap.put(ProviderTableMeta.FILE_PERMISSIONS, + ProviderTableMeta.FILE_PERMISSIONS); + mFileProjectionMap.put(ProviderTableMeta.FILE_REMOTE_ID, + ProviderTableMeta.FILE_REMOTE_ID); } private static final int SINGLE_FILE = 1; @@ -554,7 +558,9 @@ public class FileContentProvider extends ContentProvider { + ProviderTableMeta.FILE_MODIFIED_AT_LAST_SYNC_FOR_DATA + " INTEGER, " + ProviderTableMeta.FILE_ETAG + " TEXT, " + ProviderTableMeta.FILE_SHARE_BY_LINK + " INTEGER, " - + ProviderTableMeta.FILE_PUBLIC_LINK + " TEXT );" + + ProviderTableMeta.FILE_PUBLIC_LINK + " TEXT, " + + ProviderTableMeta.FILE_PERMISSIONS + " TEXT null," + + ProviderTableMeta.FILE_REMOTE_ID + " TEXT null);" ); // Create table ocshares @@ -643,7 +649,7 @@ public class FileContentProvider extends ContentProvider { } if (!upgraded) Log_OC.i("SQL", "OUT of the ADD in onUpgrade; oldVersion == " + oldVersion + ", newVersion == " + newVersion); - + if (oldVersion < 6 && newVersion >= 6) { Log_OC.i("SQL", "Entering in the #5 ADD in onUpgrade"); db.beginTransaction(); @@ -655,7 +661,7 @@ public class FileContentProvider extends ContentProvider { db .execSQL("ALTER TABLE " + ProviderTableMeta.FILE_TABLE_NAME + " ADD COLUMN " + ProviderTableMeta.FILE_PUBLIC_LINK + " TEXT " + " DEFAULT NULL"); - + // Create table ocshares db.execSQL("CREATE TABLE " + ProviderTableMeta.OCSHARES_TABLE_NAME + "(" + ProviderTableMeta._ID + " INTEGER PRIMARY KEY, " @@ -673,6 +679,27 @@ public class FileContentProvider extends ContentProvider { + ProviderTableMeta.OCSHARES_USER_ID + " INTEGER, " + ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED + " INTEGER," + ProviderTableMeta.OCSHARES_ACCOUNT_OWNER + " TEXT );" ); + + upgraded = true; + db.setTransactionSuccessful(); + } finally { + db.endTransaction(); + } + } + if (!upgraded) + Log_OC.i("SQL", "OUT of the ADD in onUpgrade; oldVersion == " + oldVersion + ", newVersion == " + newVersion); + + if (oldVersion < 7 && newVersion >= 7) { + Log_OC.i("SQL", "Entering in the #7 ADD in onUpgrade"); + db.beginTransaction(); + try { + db .execSQL("ALTER TABLE " + ProviderTableMeta.FILE_TABLE_NAME + + " ADD COLUMN " + ProviderTableMeta.FILE_PERMISSIONS + " TEXT " + + " DEFAULT NULL"); + + db .execSQL("ALTER TABLE " + ProviderTableMeta.FILE_TABLE_NAME + + " ADD COLUMN " + ProviderTableMeta.FILE_REMOTE_ID + " TEXT " + + " DEFAULT NULL"); upgraded = true; db.setTransactionSuccessful(); diff --git a/src/com/owncloud/android/services/OperationsService.java b/src/com/owncloud/android/services/OperationsService.java index ce80b57e..2522749a 100644 --- a/src/com/owncloud/android/services/OperationsService.java +++ b/src/com/owncloud/android/services/OperationsService.java @@ -23,10 +23,15 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.ConcurrentMap; +import com.owncloud.android.MainApp; import com.owncloud.android.R; import com.owncloud.android.datamodel.FileDataStorageManager; -import com.owncloud.android.lib.common.OwnCloudClientFactory; +import com.owncloud.android.lib.common.OwnCloudAccount; import com.owncloud.android.lib.common.OwnCloudClient; +import com.owncloud.android.lib.common.OwnCloudClientManagerFactory; +import com.owncloud.android.lib.common.OwnCloudCredentials; +import com.owncloud.android.lib.common.OwnCloudCredentialsFactory; +import com.owncloud.android.lib.common.accounts.AccountUtils.AccountNotFoundException; import com.owncloud.android.lib.common.operations.OnRemoteOperationListener; import com.owncloud.android.lib.common.operations.RemoteOperation; import com.owncloud.android.lib.common.operations.RemoteOperationResult; @@ -46,6 +51,8 @@ import com.owncloud.android.utils.Log_OC; import android.accounts.Account; import android.accounts.AccountsException; +import android.accounts.AuthenticatorException; +import android.accounts.OperationCanceledException; import android.app.Service; import android.content.Intent; import android.net.Uri; @@ -64,7 +71,6 @@ public class OperationsService extends Service { public static final String EXTRA_ACCOUNT = "ACCOUNT"; public static final String EXTRA_SERVER_URL = "SERVER_URL"; - public static final String EXTRA_AUTH_TOKEN_TYPE = "AUTH_TOKEN_TYPE"; public static final String EXTRA_OAUTH2_QUERY_PARAMETERS = "OAUTH2_QUERY_PARAMETERS"; public static final String EXTRA_REMOTE_PATH = "REMOTE_PATH"; public static final String EXTRA_SEND_INTENT = "SEND_INTENT"; @@ -75,12 +81,10 @@ public class OperationsService extends Service { public static final String EXTRA_RESULT = "RESULT"; // TODO review if ALL OF THEM are necessary - public static final String EXTRA_WEBDAV_PATH = "WEBDAV_PATH"; public static final String EXTRA_SUCCESS_IF_ABSENT = "SUCCESS_IF_ABSENT"; public static final String EXTRA_USERNAME = "USERNAME"; public static final String EXTRA_PASSWORD = "PASSWORD"; public static final String EXTRA_AUTH_TOKEN = "AUTH_TOKEN"; - public static final String EXTRA_FOLLOW_REDIRECTS = "FOLLOW_REDIRECTS"; public static final String EXTRA_COOKIE = "COOKIE"; public static final String ACTION_CREATE_SHARE = "CREATE_SHARE"; @@ -107,22 +111,18 @@ public class OperationsService extends Service { private static class Target { public Uri mServerUrl = null; public Account mAccount = null; - public String mWebDavUrl = null; public String mUsername = null; public String mPassword = null; public String mAuthToken = null; - public boolean mFollowRedirects = true; public String mCookie = null; - public Target(Account account, Uri serverUrl, String webdavUrl, String username, String password, String authToken, - boolean followRedirects, String cookie) { + public Target(Account account, Uri serverUrl, String username, String password, String authToken, + String cookie) { mAccount = account; mServerUrl = serverUrl; - mWebDavUrl = webdavUrl; mUsername = username; mPassword = password; mAuthToken = authToken; - mFollowRedirects = followRedirects; mCookie = cookie; } } @@ -172,8 +172,25 @@ public class OperationsService extends Service { @Override public void onDestroy() { //Log_OC.wtf(TAG, "onDestroy init" ); + // Saving cookies + try { + OwnCloudClientManagerFactory.getDefaultSingleton(). + saveAllClients(this, MainApp.getAccountType()); + + // TODO - get rid of these exceptions + } catch (AccountNotFoundException e) { + e.printStackTrace(); + } catch (AuthenticatorException e) { + e.printStackTrace(); + } catch (OperationCanceledException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + //Log_OC.wtf(TAG, "Clear mUndispatchedFinisiedOperations" ); mUndispatchedFinishedOperations.clear(); + //Log_OC.wtf(TAG, "onDestroy end" ); super.onDestroy(); } @@ -281,21 +298,16 @@ public class OperationsService extends Service { } else { Account account = operationIntent.getParcelableExtra(EXTRA_ACCOUNT); String serverUrl = operationIntent.getStringExtra(EXTRA_SERVER_URL); - String webDavPath = operationIntent.getStringExtra(EXTRA_WEBDAV_PATH); - String webDavUrl = serverUrl + webDavPath; String username = operationIntent.getStringExtra(EXTRA_USERNAME); String password = operationIntent.getStringExtra(EXTRA_PASSWORD); String authToken = operationIntent.getStringExtra(EXTRA_AUTH_TOKEN); - boolean followRedirects = operationIntent.getBooleanExtra(EXTRA_FOLLOW_REDIRECTS, true); String cookie = operationIntent.getStringExtra(EXTRA_COOKIE); target = new Target( account, (serverUrl == null) ? null : Uri.parse(serverUrl), - ((webDavPath == null) || (serverUrl == null)) ? null : webDavUrl, username, password, authToken, - followRedirects, cookie ); @@ -318,10 +330,7 @@ public class OperationsService extends Service { } else if (action.equals(ACTION_GET_SERVER_INFO)) { // check OC server and get basic information from it - String authTokenType = - operationIntent.getStringExtra(EXTRA_AUTH_TOKEN_TYPE); - operation = new GetServerInfoOperation( - serverUrl, authTokenType, OperationsService.this); + operation = new GetServerInfoOperation(serverUrl, OperationsService.this); } else if (action.equals(ACTION_OAUTH2_GET_ACCESS_TOKEN)) { /// GET ACCESS TOKEN to the OAuth server @@ -336,7 +345,7 @@ public class OperationsService extends Service { } else if (action.equals(ACTION_EXISTENCE_CHECK)) { // Existence Check String remotePath = operationIntent.getStringExtra(EXTRA_REMOTE_PATH); - boolean successIfAbsent = operationIntent.getBooleanExtra(EXTRA_SUCCESS_IF_ABSENT, true); + boolean successIfAbsent = operationIntent.getBooleanExtra(EXTRA_SUCCESS_IF_ABSENT, false); operation = new ExistenceCheckRemoteOperation(remotePath, OperationsService.this, successIfAbsent); } else if (action.equals(ACTION_GET_USER_NAME)) { @@ -453,21 +462,35 @@ public class OperationsService extends Service { if (mLastTarget == null || !mLastTarget.equals(next.first)) { mLastTarget = next.first; if (mLastTarget.mAccount != null) { - mOwnCloudClient = OwnCloudClientFactory.createOwnCloudClient(mLastTarget.mAccount, getApplicationContext()); - mStorageManager = new FileDataStorageManager(mLastTarget.mAccount, getContentResolver()); + OwnCloudAccount ocAccount = new OwnCloudAccount(mLastTarget.mAccount, this); + mOwnCloudClient = OwnCloudClientManagerFactory.getDefaultSingleton(). + getClientFor(ocAccount, this); + mStorageManager = + new FileDataStorageManager( + mLastTarget.mAccount, + getContentResolver()); } else { - mOwnCloudClient = OwnCloudClientFactory.createOwnCloudClient(mLastTarget.mServerUrl, getApplicationContext(), - mLastTarget.mFollowRedirects); // this is not good enough - if (mLastTarget.mWebDavUrl != null) { - mOwnCloudClient.setWebdavUri(Uri.parse(mLastTarget.mWebDavUrl)); - } - if (mLastTarget.mUsername != null && mLastTarget.mPassword != null) { - mOwnCloudClient.setBasicCredentials(mLastTarget.mUsername, mLastTarget.mPassword); - } else if (mLastTarget.mAuthToken != null) { - mOwnCloudClient.setBearerCredentials(mLastTarget.mAuthToken); - } else if (mLastTarget.mCookie != null) { - mOwnCloudClient.setSsoSessionCookie(mLastTarget.mCookie); + OwnCloudCredentials credentials = null; + if (mLastTarget.mUsername != null && + mLastTarget.mUsername.length() > 0) { + credentials = OwnCloudCredentialsFactory.newBasicCredentials( + mLastTarget.mUsername, + mLastTarget.mPassword); // basic + + } else if (mLastTarget.mAuthToken != null && + mLastTarget.mAuthToken.length() > 0) { + credentials = OwnCloudCredentialsFactory.newBearerCredentials( + mLastTarget.mAuthToken); // bearer token + + } else if (mLastTarget.mCookie != null && + mLastTarget.mCookie.length() > 0) { + credentials = OwnCloudCredentialsFactory.newSamlSsoCredentials( + mLastTarget.mCookie); // SAML SSO } + OwnCloudAccount ocAccount = new OwnCloudAccount( + mLastTarget.mServerUrl, credentials); + mOwnCloudClient = OwnCloudClientManagerFactory.getDefaultSingleton(). + getClientFor(ocAccount, this); mStorageManager = null; } } diff --git a/src/com/owncloud/android/syncadapter/AbstractOwnCloudSyncAdapter.java b/src/com/owncloud/android/syncadapter/AbstractOwnCloudSyncAdapter.java index a9defc0b..28cfa54c 100644 --- a/src/com/owncloud/android/syncadapter/AbstractOwnCloudSyncAdapter.java +++ b/src/com/owncloud/android/syncadapter/AbstractOwnCloudSyncAdapter.java @@ -27,9 +27,9 @@ import org.apache.http.client.ClientProtocolException; import com.owncloud.android.datamodel.FileDataStorageManager; import com.owncloud.android.lib.common.accounts.AccountUtils; import com.owncloud.android.lib.common.accounts.AccountUtils.AccountNotFoundException; -import com.owncloud.android.lib.common.OwnCloudClientFactory; +import com.owncloud.android.lib.common.OwnCloudAccount; import com.owncloud.android.lib.common.OwnCloudClient; - +import com.owncloud.android.lib.common.OwnCloudClientManagerFactory; import android.accounts.Account; import android.accounts.AccountManager; @@ -102,7 +102,9 @@ public abstract class AbstractOwnCloudSyncAdapter extends protected void initClientForCurrentAccount() throws OperationCanceledException, AuthenticatorException, IOException, AccountNotFoundException { AccountUtils.constructFullURLForAccount(getContext(), account); - mClient = OwnCloudClientFactory.createOwnCloudClient(account, getContext()); + OwnCloudAccount ocAccount = new OwnCloudAccount(account, getContext()); + mClient = OwnCloudClientManagerFactory.getDefaultSingleton(). + getClientFor(ocAccount, getContext()); } protected OwnCloudClient getClient() { diff --git a/src/com/owncloud/android/syncadapter/FileSyncAdapter.java b/src/com/owncloud/android/syncadapter/FileSyncAdapter.java index 407ce1a2..2ac89835 100644 --- a/src/com/owncloud/android/syncadapter/FileSyncAdapter.java +++ b/src/com/owncloud/android/syncadapter/FileSyncAdapter.java @@ -292,10 +292,9 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter { } else { // in failures, the statistics for the global result are updated - if (result.getCode() == RemoteOperationResult.ResultCode.UNAUTHORIZED || - ( result.isIdPRedirection() && - getClient().getCredentials() == null )) { - //MainApp.getAuthTokenTypeSamlSessionCookie().equals(getClient().getAuthTokenType()))) { + if ( result.getCode() == RemoteOperationResult.ResultCode.UNAUTHORIZED || + result.isIdPRedirection() + ) { mSyncResult.stats.numAuthExceptions++; } else if (result.getException() instanceof DavException) { @@ -383,16 +382,12 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter { */ private void notifyFailedSynchronization() { NotificationCompat.Builder notificationBuilder = createNotificationBuilder(); - notificationBuilder.setTicker(i18n(R.string.sync_fail_ticker)); - boolean needsToUpdateCredentials = (mLastFailedResult != null && - ( mLastFailedResult.getCode() == ResultCode.UNAUTHORIZED || - ( mLastFailedResult.isIdPRedirection() && - getClient().getCredentials() == null ) - //MainApp.getAuthTokenTypeSamlSessionCookie().equals(getClient().getAuthTokenType())) - ) - ); - // TODO put something smart in the contentIntent below for all the possible errors - notificationBuilder.setContentTitle(i18n(R.string.sync_fail_ticker)); + boolean needsToUpdateCredentials = ( + mLastFailedResult != null && ( + mLastFailedResult.getCode() == ResultCode.UNAUTHORIZED || + mLastFailedResult.isIdPRedirection() + ) + ); if (needsToUpdateCredentials) { // let the user update credentials with one click Intent updateAccountCredentials = new Intent(getContext(), AuthenticatorActivity.class); @@ -402,12 +397,16 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter { updateAccountCredentials.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); updateAccountCredentials.addFlags(Intent.FLAG_FROM_BACKGROUND); notificationBuilder + .setTicker(i18n(R.string.sync_fail_ticker_unauthorized)) + .setContentTitle(i18n(R.string.sync_fail_ticker_unauthorized)) .setContentIntent(PendingIntent.getActivity( getContext(), (int)System.currentTimeMillis(), updateAccountCredentials, PendingIntent.FLAG_ONE_SHOT )) .setContentText(i18n(R.string.sync_fail_content_unauthorized, getAccount().name)); } else { notificationBuilder + .setTicker(i18n(R.string.sync_fail_ticker)) + .setContentTitle(i18n(R.string.sync_fail_ticker)) .setContentText(i18n(R.string.sync_fail_content, getAccount().name)); } diff --git a/src/com/owncloud/android/ui/activity/FileActivity.java b/src/com/owncloud/android/ui/activity/FileActivity.java index 6b8fa43d..fced61b4 100644 --- a/src/com/owncloud/android/ui/activity/FileActivity.java +++ b/src/com/owncloud/android/ui/activity/FileActivity.java @@ -195,6 +195,7 @@ implements OnRemoteOperationListener, ComponentsGetter { @Override protected void onPause() { + if (mOperationsServiceBinder != null) { mOperationsServiceBinder.removeOperationListener(this); } @@ -464,7 +465,7 @@ implements OnRemoteOperationListener, ComponentsGetter { } } - private void requestCredentialsUpdate() { + protected void requestCredentialsUpdate() { Intent updateAccountCredentials = new Intent(this, AuthenticatorActivity.class); updateAccountCredentials.putExtra(AuthenticatorActivity.EXTRA_ACCOUNT, getAccount()); updateAccountCredentials.putExtra( diff --git a/src/com/owncloud/android/ui/activity/FileDisplayActivity.java b/src/com/owncloud/android/ui/activity/FileDisplayActivity.java index f85a50a3..cb771309 100644 --- a/src/com/owncloud/android/ui/activity/FileDisplayActivity.java +++ b/src/com/owncloud/android/ui/activity/FileDisplayActivity.java @@ -19,8 +19,12 @@ package com.owncloud.android.ui.activity; import java.io.File; +import java.io.IOException; import android.accounts.Account; +import android.accounts.AccountManager; +import android.accounts.AuthenticatorException; +import android.accounts.OperationCanceledException; import android.app.AlertDialog; import android.app.Dialog; import android.app.ProgressDialog; @@ -68,6 +72,11 @@ import com.owncloud.android.files.services.FileDownloader.FileDownloaderBinder; import com.owncloud.android.files.services.FileUploader.FileUploaderBinder; import com.owncloud.android.operations.CreateFolderOperation; +import com.owncloud.android.lib.common.OwnCloudAccount; +import com.owncloud.android.lib.common.OwnCloudClient; +import com.owncloud.android.lib.common.OwnCloudClientManagerFactory; +import com.owncloud.android.lib.common.OwnCloudCredentials; +import com.owncloud.android.lib.common.accounts.AccountUtils.AccountNotFoundException; import com.owncloud.android.lib.common.network.CertificateCombinedException; import com.owncloud.android.lib.common.operations.RemoteOperation; import com.owncloud.android.lib.common.operations.RemoteOperationResult; @@ -918,10 +927,54 @@ FileFragment.ContainerActivity, OnNavigationListener, OnSslUntrustedCertListener mSyncInProgress = (!FileSyncAdapter.EVENT_FULL_SYNC_END.equals(event) && !SynchronizeFolderOperation.EVENT_SINGLE_FOLDER_SHARES_SYNCED.equals(event)); + if (SynchronizeFolderOperation.EVENT_SINGLE_FOLDER_CONTENTS_SYNCED. + equals(event) && + /// TODO refactor and make common + synchResult != null && !synchResult.isSuccess() && + (synchResult.getCode() == ResultCode.UNAUTHORIZED || + synchResult.isIdPRedirection() || + (synchResult.isException() && synchResult.getException() + instanceof AuthenticatorException))) { + + OwnCloudClient client = null; + try { + OwnCloudAccount ocAccount = + new OwnCloudAccount(getAccount(), context); + client = (OwnCloudClientManagerFactory.getDefaultSingleton(). + removeClientFor(ocAccount)); + // TODO get rid of these exceptions + } catch (AccountNotFoundException e) { + e.printStackTrace(); + } catch (AuthenticatorException e) { + e.printStackTrace(); + } catch (OperationCanceledException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + + if (client != null) { + OwnCloudCredentials cred = client.getCredentials(); + if (cred != null) { + AccountManager am = AccountManager.get(context); + if (cred.authTokenExpires()) { + am.invalidateAuthToken( + getAccount().type, + cred.getAuthToken() + ); + } else { + am.clearPassword(getAccount()); + } + } + } + + requestCredentialsUpdate(); + } - removeStickyBroadcast(intent); - Log_OC.d(TAG, "Setting progress visibility to " + mSyncInProgress); - setSupportProgressBarIndeterminateVisibility(mSyncInProgress /*|| mRefreshSharesInProgress*/); + } + removeStickyBroadcast(intent); + Log_OC.d(TAG, "Setting progress visibility to " + mSyncInProgress); + setSupportProgressBarIndeterminateVisibility(mSyncInProgress /*|| mRefreshSharesInProgress*/); } @@ -1478,7 +1531,7 @@ FileFragment.ContainerActivity, OnNavigationListener, OnSslUntrustedCertListener getAccount(), getApplicationContext() ); - synchFolderOp.execute(getAccount(), this, null, null, this); + synchFolderOp.execute(getAccount(), this, null, null); setSupportProgressBarIndeterminateVisibility(true); } diff --git a/src/com/owncloud/android/ui/activity/Uploader.java b/src/com/owncloud/android/ui/activity/Uploader.java index 07e6e959..16b32678 100644 --- a/src/com/owncloud/android/ui/activity/Uploader.java +++ b/src/com/owncloud/android/ui/activity/Uploader.java @@ -329,19 +329,10 @@ public class Uploader extends ListActivity implements OnItemClickListener, andro public void uploadFiles() { try { - //OwnCloudClient webdav = OwnCloudClientUtils.createOwnCloudClient(mAccount, getApplicationContext()); ArrayList local = new ArrayList(); ArrayList remote = new ArrayList(); - /* TODO - mCreateDir can never be true at this moment; we will replace wdc.createDirectory by CreateFolderOperation when that is fixed - OwnCloudClient wdc = OwnCloudClientUtils.createOwnCloudClient(mAccount, getApplicationContext()); - // create last directory in path if necessary - if (mCreateDir) { - wdc.createDirectory(mUploadPath); - } - */ - // this checks the mimeType for (Parcelable mStream : mStreamsToUpload) { diff --git a/src/com/owncloud/android/ui/adapter/FileListListAdapter.java b/src/com/owncloud/android/ui/adapter/FileListListAdapter.java index 656e0042..408154ac 100644 --- a/src/com/owncloud/android/ui/adapter/FileListListAdapter.java +++ b/src/com/owncloud/android/ui/adapter/FileListListAdapter.java @@ -17,8 +17,10 @@ */ package com.owncloud.android.ui.adapter; +import java.util.Vector; + import android.accounts.Account; -import android.content.Context; +import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -28,9 +30,6 @@ import android.widget.ListAdapter; import android.widget.ListView; import android.widget.TextView; - -import java.util.Vector; - import com.owncloud.android.R; import com.owncloud.android.authentication.AccountUtils; import com.owncloud.android.datamodel.FileDataStorageManager; @@ -49,6 +48,8 @@ import com.owncloud.android.utils.DisplayUtils; * */ public class FileListListAdapter extends BaseAdapter implements ListAdapter { + private final static String PERMISSION_SHARED_WITH_ME = "S"; + private Context mContext; private OCFile mFile = null; private Vector mFiles = null; @@ -113,7 +114,10 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter { fileName.setText(name); ImageView fileIcon = (ImageView) view.findViewById(R.id.imageView1); - fileIcon.setImageResource(DisplayUtils.getResourceId(file.getMimetype(), file.getFileName())); + ImageView sharedIconV = (ImageView) view.findViewById(R.id.sharedIcon); + ImageView sharedWithMeIconV = (ImageView) view.findViewById(R.id.sharedWithMeIcon); + sharedWithMeIconV.setVisibility(View.GONE); + ImageView localStateView = (ImageView) view.findViewById(R.id.imageView2); FileDownloaderBinder downloaderBinder = mTransferServiceGetter.getFileDownloaderBinder(); FileUploaderBinder uploaderBinder = mTransferServiceGetter.getFileUploaderBinder(); @@ -158,7 +162,12 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter { } checkBoxV.setVisibility(View.VISIBLE); } - + + fileIcon.setImageResource(DisplayUtils.getResourceId(file.getMimetype(), file.getFileName())); + + if (checkIfFileIsSharedWithMe(file)) { + sharedWithMeIconV.setVisibility(View.VISIBLE); + } } else { @@ -168,13 +177,19 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter { lastModV.setText(DisplayUtils.unixTimeToHumanReadable(file.getModificationTimestamp())); checkBoxV.setVisibility(View.GONE); view.findViewById(R.id.imageView3).setVisibility(View.GONE); + + if (checkIfFileIsSharedWithMe(file)) { + fileIcon.setImageResource(R.drawable.shared_with_me_folder); + sharedWithMeIconV.setVisibility(View.VISIBLE); + } else { + fileIcon.setImageResource(DisplayUtils.getResourceId(file.getMimetype(), file.getFileName())); + } } - - ImageView shareIconV = (ImageView) view.findViewById(R.id.shareIcon); + if (file.isShareByLink()) { - shareIconV.setVisibility(View.VISIBLE); + sharedIconV.setVisibility(View.VISIBLE); } else { - shareIconV.setVisibility(View.INVISIBLE); + sharedIconV.setVisibility(View.GONE); } } @@ -215,4 +230,15 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter { notifyDataSetChanged(); } + /** + * Check if parent folder does not include 'S' permission and if file/folder + * is shared with me + * + * @param file: OCFile + * @return boolean: True if it is shared with me and false if it is not + */ + private boolean checkIfFileIsSharedWithMe(OCFile file) { + return (mFile.getPermissions() != null && !mFile.getPermissions().contains(PERMISSION_SHARED_WITH_ME) + && file.getPermissions() != null && file.getPermissions().contains(PERMISSION_SHARED_WITH_ME)); + } } diff --git a/src/com/owncloud/android/ui/adapter/LocalFileListAdapter.java b/src/com/owncloud/android/ui/adapter/LocalFileListAdapter.java index 5686874e..6190ebee 100644 --- a/src/com/owncloud/android/ui/adapter/LocalFileListAdapter.java +++ b/src/com/owncloud/android/ui/adapter/LocalFileListAdapter.java @@ -21,10 +21,6 @@ import java.io.File; import java.util.Arrays; import java.util.Comparator; -import com.owncloud.android.R; -import com.owncloud.android.utils.DisplayUtils; - - import android.content.Context; import android.view.LayoutInflater; import android.view.View; @@ -35,6 +31,9 @@ import android.widget.ListAdapter; import android.widget.ListView; import android.widget.TextView; +import com.owncloud.android.R; +import com.owncloud.android.utils.DisplayUtils; + /** * This Adapter populates a ListView with all files and directories contained * in a local directory @@ -136,7 +135,8 @@ public class LocalFileListAdapter extends BaseAdapter implements ListAdapter { view.findViewById(R.id.imageView2).setVisibility(View.INVISIBLE); // not GONE; the alignment changes; ugly way to keep it view.findViewById(R.id.imageView3).setVisibility(View.GONE); - view.findViewById(R.id.shareIcon).setVisibility(View.GONE); + view.findViewById(R.id.sharedIcon).setVisibility(View.GONE); + view.findViewById(R.id.sharedWithMeIcon).setVisibility(View.GONE); } return view; diff --git a/src/com/owncloud/android/utils/FileStorageUtils.java b/src/com/owncloud/android/utils/FileStorageUtils.java index e8e8f48b..58dda0da 100644 --- a/src/com/owncloud/android/utils/FileStorageUtils.java +++ b/src/com/owncloud/android/utils/FileStorageUtils.java @@ -97,7 +97,8 @@ public class FileStorageUtils { file.setMimetype(remote.getMimeType()); file.setModificationTimestamp(remote.getModifiedTimestamp()); file.setEtag(remote.getEtag()); - + file.setPermissions(remote.getPermissions()); + file.setRemoteId(remote.getRemoteId()); return file; } @@ -114,6 +115,8 @@ public class FileStorageUtils { file.setMimeType(ocFile.getMimetype()); file.setModifiedTimestamp(ocFile.getModificationTimestamp()); file.setEtag(ocFile.getEtag()); + file.setPermissions(ocFile.getPermissions()); + file.setRemoteId(ocFile.getRemoteId()); return file; }