diff options
27 files changed, 90 insertions, 76 deletions
diff --git a/apps/dav/lib/Connector/Sabre/Directory.php b/apps/dav/lib/Connector/Sabre/Directory.php index a7b8ea1755e..aaf5f54ec26 100644 --- a/apps/dav/lib/Connector/Sabre/Directory.php +++ b/apps/dav/lib/Connector/Sabre/Directory.php @@ -28,6 +28,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/> * */ + namespace OCA\DAV\Connector\Sabre; use OC\Files\View; @@ -147,8 +148,16 @@ class Directory extends \OCA\DAV\Connector\Sabre\Node $info = new \OC\Files\FileInfo($path, null, null, [], null); } $node = new \OCA\DAV\Connector\Sabre\File($this->fileView, $info); + + // only allow 1 process to upload a file at once but still allow reading the file while writing the part file $node->acquireLock(ILockingProvider::LOCK_SHARED); - return $node->put($data); + $this->fileView->lockFile($path . '.upload.part', ILockingProvider::LOCK_EXCLUSIVE); + + $result = $node->put($data); + + $this->fileView->unlockFile($path . '.upload.part', ILockingProvider::LOCK_EXCLUSIVE); + $node->releaseLock(ILockingProvider::LOCK_SHARED); + return $result; } catch (\OCP\Files\StorageNotAvailableException $e) { throw new \Sabre\DAV\Exception\ServiceUnavailable($e->getMessage(), $e->getCode(), $e); } catch (InvalidPathException $ex) { diff --git a/apps/files/css/files.scss b/apps/files/css/files.scss index b89332248f7..d2d810c1e6c 100644 --- a/apps/files/css/files.scss +++ b/apps/files/css/files.scss @@ -105,9 +105,6 @@ .nav-icon-trashbin { background-image: url('../img/delete.svg?v=1'); } -.nav-icon-quota { - background-image: url('../img/quota.svg?v=1'); -} #app-navigation .nav-files a.nav-icon-files { width: auto; diff --git a/apps/files/templates/appnavigation.php b/apps/files/templates/appnavigation.php index a85e2515a92..c811ace8abe 100644 --- a/apps/files/templates/appnavigation.php +++ b/apps/files/templates/appnavigation.php @@ -15,7 +15,7 @@ if ($_['quota'] !== \OCP\Files\FileInfo::SPACE_UNLIMITED) { ?>has-tooltip" title="<?php p($_['usage_relative'] . '%'); } ?>"> - <a href="#" class="nav-icon-quota svg"> + <a href="#" class="icon-quota svg"> <p id="quotatext"><?php if ($_['quota'] !== \OCP\Files\FileInfo::SPACE_UNLIMITED) { p($l->t('%s of %s used', [$_['usage'], $_['total_space']])); diff --git a/apps/files_external/l10n/de.js b/apps/files_external/l10n/de.js index 6fafc3e5489..eefbbe8c409 100644 --- a/apps/files_external/l10n/de.js +++ b/apps/files_external/l10n/de.js @@ -112,6 +112,7 @@ OC.L10N.register( "Check for changes" : "Auf Änderungen prüfen", "Never" : "Nie", "Once every direct access" : "Einmal bei jedem Direktzugriff", + "Read only" : "Schreibgeschützt", "Folder name" : "Ordnername", "External storage" : "Externer Speicher", "Authentication" : "Authentifizierung", diff --git a/apps/files_external/l10n/de.json b/apps/files_external/l10n/de.json index 89f089605b9..50c07260636 100644 --- a/apps/files_external/l10n/de.json +++ b/apps/files_external/l10n/de.json @@ -110,6 +110,7 @@ "Check for changes" : "Auf Änderungen prüfen", "Never" : "Nie", "Once every direct access" : "Einmal bei jedem Direktzugriff", + "Read only" : "Schreibgeschützt", "Folder name" : "Ordnername", "External storage" : "Externer Speicher", "Authentication" : "Authentifizierung", diff --git a/apps/files_external/l10n/de_DE.js b/apps/files_external/l10n/de_DE.js index ca2d37523b2..13e44ab0cb9 100644 --- a/apps/files_external/l10n/de_DE.js +++ b/apps/files_external/l10n/de_DE.js @@ -112,6 +112,7 @@ OC.L10N.register( "Check for changes" : "Auf Änderungen prüfen", "Never" : "Nie", "Once every direct access" : "Einmal bei jedem Direktzugriff", + "Read only" : "Schreibgeschützt", "Folder name" : "Ordnername", "External storage" : "Externer Speicher", "Authentication" : "Authentifizierung", diff --git a/apps/files_external/l10n/de_DE.json b/apps/files_external/l10n/de_DE.json index 4ab53e25cbc..1f19a325427 100644 --- a/apps/files_external/l10n/de_DE.json +++ b/apps/files_external/l10n/de_DE.json @@ -110,6 +110,7 @@ "Check for changes" : "Auf Änderungen prüfen", "Never" : "Nie", "Once every direct access" : "Einmal bei jedem Direktzugriff", + "Read only" : "Schreibgeschützt", "Folder name" : "Ordnername", "External storage" : "Externer Speicher", "Authentication" : "Authentifizierung", diff --git a/apps/files_external/l10n/fr.js b/apps/files_external/l10n/fr.js index 7533b976a14..a3b12150d45 100644 --- a/apps/files_external/l10n/fr.js +++ b/apps/files_external/l10n/fr.js @@ -112,6 +112,7 @@ OC.L10N.register( "Check for changes" : "Rechercher les modifications", "Never" : "Jamais", "Once every direct access" : "Une fois à chaque accès direct", + "Read only" : "Lecture seule", "Folder name" : "Nom du dossier", "External storage" : "Stockage externe", "Authentication" : "Authentification", diff --git a/apps/files_external/l10n/fr.json b/apps/files_external/l10n/fr.json index 73b8bc28c5b..8b0bc077c0e 100644 --- a/apps/files_external/l10n/fr.json +++ b/apps/files_external/l10n/fr.json @@ -110,6 +110,7 @@ "Check for changes" : "Rechercher les modifications", "Never" : "Jamais", "Once every direct access" : "Une fois à chaque accès direct", + "Read only" : "Lecture seule", "Folder name" : "Nom du dossier", "External storage" : "Stockage externe", "Authentication" : "Authentification", diff --git a/apps/files_external/l10n/it.js b/apps/files_external/l10n/it.js index 26cf94da6d5..f8ac97f6f68 100644 --- a/apps/files_external/l10n/it.js +++ b/apps/files_external/l10n/it.js @@ -112,6 +112,7 @@ OC.L10N.register( "Check for changes" : "Controlla le modifiche", "Never" : "Mai", "Once every direct access" : "Una volta per ogni accesso diretto", + "Read only" : "Sola lettura", "Folder name" : "Nome della cartella", "External storage" : "Archiviazione esterna", "Authentication" : "Autenticazione", diff --git a/apps/files_external/l10n/it.json b/apps/files_external/l10n/it.json index a8151db2395..6495f32fc8d 100644 --- a/apps/files_external/l10n/it.json +++ b/apps/files_external/l10n/it.json @@ -110,6 +110,7 @@ "Check for changes" : "Controlla le modifiche", "Never" : "Mai", "Once every direct access" : "Una volta per ogni accesso diretto", + "Read only" : "Sola lettura", "Folder name" : "Nome della cartella", "External storage" : "Archiviazione esterna", "Authentication" : "Autenticazione", diff --git a/apps/files_external/l10n/pt_BR.js b/apps/files_external/l10n/pt_BR.js index f1624a0f9ea..a04fc14c8a3 100644 --- a/apps/files_external/l10n/pt_BR.js +++ b/apps/files_external/l10n/pt_BR.js @@ -112,6 +112,7 @@ OC.L10N.register( "Check for changes" : "Verifique se há alterações", "Never" : "Nunca", "Once every direct access" : "Uma vez a cada acesso direto", + "Read only" : "Somente leitura", "Folder name" : "Nome da pasta", "External storage" : "Armazenamento Externo", "Authentication" : "Autenticação", diff --git a/apps/files_external/l10n/pt_BR.json b/apps/files_external/l10n/pt_BR.json index 80d6ba18e09..bfe10a37539 100644 --- a/apps/files_external/l10n/pt_BR.json +++ b/apps/files_external/l10n/pt_BR.json @@ -110,6 +110,7 @@ "Check for changes" : "Verifique se há alterações", "Never" : "Nunca", "Once every direct access" : "Uma vez a cada acesso direto", + "Read only" : "Somente leitura", "Folder name" : "Nome da pasta", "External storage" : "Armazenamento Externo", "Authentication" : "Autenticação", diff --git a/apps/files_external/l10n/ru.js b/apps/files_external/l10n/ru.js index 39e02bdabde..fbb90ba4a89 100644 --- a/apps/files_external/l10n/ru.js +++ b/apps/files_external/l10n/ru.js @@ -112,6 +112,7 @@ OC.L10N.register( "Check for changes" : "Проверять изменения", "Never" : "Никогда", "Once every direct access" : "Каждый раз при прямом доступе", + "Read only" : "Только чтение", "Folder name" : "Имя папки", "External storage" : "Внешнее хранилище", "Authentication" : "Способ авторизации", diff --git a/apps/files_external/l10n/ru.json b/apps/files_external/l10n/ru.json index 387b9087209..ff6df5b9a55 100644 --- a/apps/files_external/l10n/ru.json +++ b/apps/files_external/l10n/ru.json @@ -110,6 +110,7 @@ "Check for changes" : "Проверять изменения", "Never" : "Никогда", "Once every direct access" : "Каждый раз при прямом доступе", + "Read only" : "Только чтение", "Folder name" : "Имя папки", "External storage" : "Внешнее хранилище", "Authentication" : "Способ авторизации", diff --git a/apps/files_external/l10n/tr.js b/apps/files_external/l10n/tr.js index 9d854556b97..bcc1c64cc0c 100644 --- a/apps/files_external/l10n/tr.js +++ b/apps/files_external/l10n/tr.js @@ -112,6 +112,7 @@ OC.L10N.register( "Check for changes" : "Değişiklikleri denetle", "Never" : "Asla", "Once every direct access" : "Her doğrudan erişimde bir kez", + "Read only" : "Salt okunur", "Folder name" : "Klasör adı", "External storage" : "Dış depolama", "Authentication" : "Kimlik Doğrulama", diff --git a/apps/files_external/l10n/tr.json b/apps/files_external/l10n/tr.json index 4376d41228c..73ebf0c7759 100644 --- a/apps/files_external/l10n/tr.json +++ b/apps/files_external/l10n/tr.json @@ -110,6 +110,7 @@ "Check for changes" : "Değişiklikleri denetle", "Never" : "Asla", "Once every direct access" : "Her doğrudan erişimde bir kez", + "Read only" : "Salt okunur", "Folder name" : "Klasör adı", "External storage" : "Dış depolama", "Authentication" : "Kimlik Doğrulama", diff --git a/core/css/icons.scss b/core/css/icons.scss index 775decfa3a8..8f2d4748754 100644 --- a/core/css/icons.scss +++ b/core/css/icons.scss @@ -300,6 +300,10 @@ img, object, video, button, textarea, input, select, div[contenteditable=true] { background-image: url('../img/actions/public.svg?v=1'); } +.icon-quota { + background-image: url('../img/actions/quota.svg?v=1'); +} + .icon-rename { background-image: url('../img/actions/rename.svg?v=1'); } diff --git a/core/css/styles.scss b/core/css/styles.scss index 0bbd89f075b..736713c3e7a 100644 --- a/core/css/styles.scss +++ b/core/css/styles.scss @@ -927,40 +927,6 @@ code { font-family: 'Lucida Console', 'Lucida Sans Typewriter', 'DejaVu Sans Mono', monospace; } -#body-settings #quota { - cursor: default; - margin: 30px !important; - position: relative; - padding: 0 !important; - progress { - height: 36px; - &::-moz-progress-bar { - border-radius: 3px 0 0 3px; - } - &::-webkit-progress-value { - border-radius: 3px 0 0 3px; - } - } - div { - font-weight: normal; - white-space: nowrap; - position: absolute;; - top: 0; - &.quotatext-bg { - mix-blend-mode: luminosity; - } - &.quotatext-fg { - color: $color-primary-text; - overflow: hidden; - z-index: 50; - max-width: 100%; - } - .quotatext { - padding: .6em 1em; - } - } -} - .pager { list-style: none; float: right; diff --git a/apps/files/img/quota.svg b/core/img/actions/quota.svg index 691cb29efce..691cb29efce 100644 --- a/apps/files/img/quota.svg +++ b/core/img/actions/quota.svg diff --git a/core/l10n/da.js b/core/l10n/da.js index 882685fb124..005c28c0d43 100644 --- a/core/l10n/da.js +++ b/core/l10n/da.js @@ -266,6 +266,8 @@ OC.L10N.register( "More apps" : "Flere apps", "Search" : "Søg", "Reset search" : "Nulstil søgning", + "Contacts" : "Kontakter", + "Contacts menu" : "Menuen kontakter", "Confirm your password" : "Bekræft dit password", "Server side authentication failed!" : "Server side godkendelse mislykkedes!", "Please contact your administrator." : "Kontakt venligst din administrator.", diff --git a/core/l10n/da.json b/core/l10n/da.json index 620bec0372f..b5863376fc1 100644 --- a/core/l10n/da.json +++ b/core/l10n/da.json @@ -264,6 +264,8 @@ "More apps" : "Flere apps", "Search" : "Søg", "Reset search" : "Nulstil søgning", + "Contacts" : "Kontakter", + "Contacts menu" : "Menuen kontakter", "Confirm your password" : "Bekræft dit password", "Server side authentication failed!" : "Server side godkendelse mislykkedes!", "Please contact your administrator." : "Kontakt venligst din administrator.", diff --git a/lib/private/Template/SCSSCacher.php b/lib/private/Template/SCSSCacher.php index 6fb9d11953b..6e25e1fa5de 100644 --- a/lib/private/Template/SCSSCacher.php +++ b/lib/private/Template/SCSSCacher.php @@ -273,7 +273,11 @@ class SCSSCacher { $appDirectory = $this->appData->getDirectoryListing(); foreach ($appDirectory as $folder) { foreach ($folder->getDirectoryListing() as $file) { - $file->delete(); + try { + $file->delete(); + } catch(NotPermittedException $e) { + $this->logger->logException($e, ['message' => 'SCSSCacher: unable to delete file: ' . $file->getName()]); + } } } } diff --git a/settings/css/settings.scss b/settings/css/settings.scss index a040ee6195a..3e7e5576640 100644 --- a/settings/css/settings.scss +++ b/settings/css/settings.scss @@ -52,9 +52,6 @@ input { #displayavatar { text-align: center; - p { - text-align: left; - } } #uploadavatarbutton, #selectavatar, #removeavatar { @@ -119,6 +116,7 @@ input { background-size: 16px; background-position: left 8px; opacity: .3; + margin-top: -2px; margin-left: 10px; cursor: pointer; @@ -162,6 +160,16 @@ input { .section { padding: 10px 10px; } + + .personal-info { + margin-right: 10%; + margin-bottom: 20px; + } + .personal-info[class^='icon-'], .personal-info[class*=' icon-'] { + background-position: 0px 2px; + padding-left: 30px; + opacity: 0.7; + } } @@ -234,7 +242,7 @@ input { margin-bottom: 12px; display: inline-flex; flex-wrap: nowrap; - justify-content: space-between; + justify-content: flex-start; width: 100%; > label { white-space: nowrap; @@ -272,6 +280,26 @@ input { } } + +#body-settings #quota { + cursor: default; + position: relative; + progress { + height: 6px; + &::-moz-progress-bar { + border-radius: 3px 0 0 3px; + } + &::-webkit-progress-value { + border-radius: 3px 0 0 3px; + } + } + div { + font-weight: normal; + white-space: nowrap; + } +} + + /* verify accounts */ /* only show pointer cursor when popup will be there */ .verification-dialog { diff --git a/settings/l10n/el.js b/settings/l10n/el.js index dbd8f865939..4f5a4d45c25 100644 --- a/settings/l10n/el.js +++ b/settings/l10n/el.js @@ -258,6 +258,7 @@ OC.L10N.register( "Restrict users to only share with users in their groups" : "Να επιτρέπεται σε χρήστες ο διαμοιρασμός μόνο με χρήστες που ανήκουν στις ομάδες τους", "Exclude groups from sharing" : "Εξαίρεση ομάδων από τον διαμοιρασμό", "These groups will still be able to receive shares, but not to initiate them." : "Αυτές οι ομάδες θα συνεχίσουν να λαμβάνουν διαμοιρασμούς, αλλά δεν θα είναι δυνατό να τους δημιουργήσουν.", + "Allow username autocompletion in share dialog. If this is disabled the full username or email address needs to be entered." : "Να επιτρέπεται η χρήση αυτόματης συμπλήρωσης του ονόματος χρήστη στο πεδίο διαμοιρασμού. Αν η ρύθμιση αυτή είναι απενεργοποιημένη θα πρέπει να εισαχθεί το πλήρες όνομα χρήστη ή το email του. ", "This text will be shown on the public link upload page when the file list is hidden." : "Αυτό το κείμενο θα ", "Tips & tricks" : "Συμβουλές & τεχνάσματα", "How to do backups" : "Πώς να κάνετε αντίγραφα ασφαλείας", diff --git a/settings/l10n/el.json b/settings/l10n/el.json index 30c4fb7829e..9a440e76d72 100644 --- a/settings/l10n/el.json +++ b/settings/l10n/el.json @@ -256,6 +256,7 @@ "Restrict users to only share with users in their groups" : "Να επιτρέπεται σε χρήστες ο διαμοιρασμός μόνο με χρήστες που ανήκουν στις ομάδες τους", "Exclude groups from sharing" : "Εξαίρεση ομάδων από τον διαμοιρασμό", "These groups will still be able to receive shares, but not to initiate them." : "Αυτές οι ομάδες θα συνεχίσουν να λαμβάνουν διαμοιρασμούς, αλλά δεν θα είναι δυνατό να τους δημιουργήσουν.", + "Allow username autocompletion in share dialog. If this is disabled the full username or email address needs to be entered." : "Να επιτρέπεται η χρήση αυτόματης συμπλήρωσης του ονόματος χρήστη στο πεδίο διαμοιρασμού. Αν η ρύθμιση αυτή είναι απενεργοποιημένη θα πρέπει να εισαχθεί το πλήρες όνομα χρήστη ή το email του. ", "This text will be shown on the public link upload page when the file list is hidden." : "Αυτό το κείμενο θα ", "Tips & tricks" : "Συμβουλές & τεχνάσματα", "How to do backups" : "Πώς να κάνετε αντίγραφα ασφαλείας", diff --git a/settings/templates/settings/personal/personal.info.php b/settings/templates/settings/personal/personal.info.php index 24f89076275..e581e6d39e6 100644 --- a/settings/templates/settings/personal/personal.info.php +++ b/settings/templates/settings/personal/personal.info.php @@ -37,34 +37,6 @@ vendor_style('jcrop/css/jquery.Jcrop'); ?> -<div id="quota" class="section"> - <progress value="<?php p($_['usage_relative']); ?>" max="100" - <?php if($_['usage_relative'] > 80): ?> class="warn" <?php endif; ?>></progress> - - <div style="width:<?php p($_['usage_relative']);?>%" class="quotatext-fg"> - <p class="quotatext"> - <?php if ($_['quota'] === \OCP\Files\FileInfo::SPACE_UNLIMITED): ?> - <?php print_unescaped($l->t('You are using <strong>%s</strong> of <strong>%s</strong>', - [$_['usage'], $_['total_space']]));?> - <?php else: ?> - <?php print_unescaped($l->t('You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)', - [$_['usage'], $_['total_space'], $_['usage_relative']]));?> - <?php endif ?> - </p> - </div> - <div class="quotatext-bg"> - <p class="quotatext"> - <?php if ($_['quota'] === \OCP\Files\FileInfo::SPACE_UNLIMITED): ?> - <?php print_unescaped($l->t('You are using <strong>%s</strong> of <strong>%s</strong>', - [$_['usage'], $_['total_space']]));?> - <?php else: ?> - <?php print_unescaped($l->t('You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)', - [$_['usage'], $_['total_space'], $_['usage_relative']]));?> - <?php endif ?> - </p> - </div> -</div> - <div id="personal-settings"> <div id="personal-settings-avatar-container" class="personal-settings-container"> <div> @@ -100,14 +72,28 @@ vendor_style('jcrop/css/jquery.Jcrop'); <?php } ?> </form> </div> - <div class="personal-settings-setting-box personal-settings-group-box"> - <div id="groups" class="section"> - <h2><?php p($l->t('Groups')); ?></h2> - <p><?php p($l->t('You are member of the following groups:')); ?></p> + <div class="personal-settings-setting-box personal-settings-group-box section"> + <h2><?php p($l->t('Details')); ?></h2> + <div id="groups" class="personal-info icon-user"> + <p class="icon-groups"><?php p($l->t('You are member of the following groups:')); ?></p> <p id="groups-groups"> <strong><?php p(implode(', ', $_['groups'])); ?></strong> </p> </div> + <div id="quota" class="personal-info icon-quota"> + <div class="quotatext-bg"> + <p class="quotatext"> + <?php if ($_['quota'] === \OCP\Files\FileInfo::SPACE_UNLIMITED): ?> + <?php print_unescaped($l->t('You are using <strong>%s</strong>', + [$_['usage']]));?> + <?php else: ?> + <?php print_unescaped($l->t('You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)', + [$_['usage'], $_['total_space'], $_['usage_relative']]));?> + <?php endif ?> + </p> + </div> + <progress value="<?php p($_['usage_relative']); ?>" max="100"<?php if($_['usage_relative'] > 80): ?> class="warn" <?php endif; ?>></progress> + </div> </div> </div> |