Skip to content

Commit e7e7348

Browse files
lukechildsnmfretzmayankchhabra
authored
Files Refactor
Refactor files logic, add extensive testing, introduce umbrel event bus for signalling between modules. Co-authored-by: Nathan Fretz <[email protected]> Co-authored-by: Mayank Chhabra <[email protected]> Co-authored-by: mayankchhabra <[email protected]>
1 parent bc64204 commit e7e7348

File tree

143 files changed

+15055
-6595
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

143 files changed

+15055
-6595
lines changed

.github/workflows/ci.yml

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,17 @@ jobs:
2424
uses: actions/setup-node@v3
2525
with:
2626
node-version: 18
27+
# This is needed for the samba integration tests
28+
- name: Setup umbrel user
29+
run: |
30+
sudo adduser --gecos "" --disabled-password umbrel
31+
echo "umbrel:umbrel" | sudo chpasswd
32+
sudo usermod -aG sudo umbrel
2733
- name: Install dependencies
2834
run: |
29-
sudo apt-get install -y imagemagick
35+
sudo apt-get update
36+
sudo apt-get install -y unar imagemagick ffmpeg samba wsdd2
37+
sudo systemctl disable smbd wsdd2
3038
sudo npm clean-install
3139
- run: sudo npm run ${{ matrix.task }}
3240
ui:

packages/os/overlay-common/etc/samba/smb.conf

Lines changed: 0 additions & 42 deletions
This file was deleted.

packages/os/overlay-common/etc/sysctl.d/99-inotify.conf

Lines changed: 0 additions & 21 deletions
This file was deleted.

packages/os/umbrelos.Dockerfile

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -119,21 +119,17 @@ RUN apt-get install --yes sudo nano vim less man iproute2 iputils-ping curl wget
119119

120120
# Install umbreld dependencies
121121
# (many of these can be remove after the apps refactor)
122-
RUN apt-get install --yes python3 fswatch jq rsync git gettext-base gnupg procps dmidecode samba wsdd2 p7zip-full imagemagick ffmpeg
122+
RUN apt-get install --yes python3 fswatch jq rsync git gettext-base gnupg procps dmidecode unar imagemagick ffmpeg samba wsdd2
123+
124+
# Disable automatically starting smbd and wsdd2 at boot so umbreld can initialize them only when they're needed
125+
RUN systemctl disable smbd wsdd2
123126

124127
# Support for alternate filesystems
125128
# For some reason this always fails on arm64 but it's ok since we
126129
# don't support external storage on Pi anyway.
127130
RUN [ "${TARGETARCH}" = "amd64" ] && apt-get install --yes ntfs-3g || true
128131

129-
# TODO: udisks2 recommends eject (2.38.1-5+deb12u3) which is currently missing
130-
RUN apt-get install --yes --no-install-recommends udisks2
131-
132-
# Disable automatically starting smbd at boot so umbreld can initialize it first
133-
RUN systemctl disable smbd.service
134-
135132
# Install Node.js
136-
RUN apt-get install --yes python3 fswatch jq rsync git gettext-base gnupg procps dmidecode
137133
RUN NODE_ARCH=$([ "${TARGETARCH}" = "arm64" ] && echo "arm64" || echo "x64") && \
138134
NODE_SHA256=$(eval echo \$NODE_SHA256_${TARGETARCH}) && \
139135
curl -fsSL https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}-linux-${NODE_ARCH}.tar.gz -o node.tar.gz && \
@@ -153,12 +149,12 @@ RUN sh /tmp/install-docker.sh --version v${DOCKER_VERSION}
153149
RUN rm /tmp/install-docker.sh
154150

155151
# Add Umbrel user
156-
RUN addgroup --gid 1000 umbrel && adduser --uid 1000 --gid 1000 --gecos "" --disabled-password umbrel
152+
RUN adduser --gecos "" --disabled-password umbrel
157153
RUN echo "umbrel:umbrel" | chpasswd
158-
RUN usermod -aG sudo,sambashare umbrel
154+
RUN usermod -aG sudo umbrel
159155

160156
# Preload images
161-
RUN apt-get install --yes skopeo
157+
RUN sudo apt-get install --yes skopeo
162158
RUN mkdir -p /images
163159
RUN skopeo copy docker://getumbrel/tor@sha256:2ace83f22501f58857fa9b403009f595137fa2e7986c4fda79d82a8119072b6a docker-archive:/images/tor
164160
RUN skopeo copy docker://getumbrel/auth-server@sha256:b4a4b37896911a85fb74fa159e010129abd9dff751a40ef82f724ae066db3c2a docker-archive:/images/auth

packages/ui/public/locales/de.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,12 @@
218218
"files-audio-island.now-playing": "Jetzt läuft",
219219
"files-audio-island.pause": "Pausieren",
220220
"files-audio-island.play": "Abspielen",
221+
"files-collision.action.keep-both": "Beide behalten",
222+
"files-collision.action.replace": "Ersetzen",
223+
"files-collision.action.skip": "Überspringen",
224+
"files-collision.destination.original-location": "seinem ursprünglichen Speicherort",
225+
"files-collision.message": "Möchtest du das vorhandene Element ersetzen oder beide behalten?",
226+
"files-collision.title": "\"{{itemName}}\" ist bereits in {{destinationName}} vorhanden",
221227
"files-download.confirm": "Herunterladen",
222228
"files-download.description": "Files kann diesen Dateityp nicht öffnen. Möchtest du ihn stattdessen herunterladen?",
223229
"files-download.title": "„{{name}}“ herunterladen?",
@@ -240,6 +246,7 @@
240246
"files-error.rename": "Fehler beim Umbenennen: {{message}}",
241247
"files-error.restore": "Fehler beim Wiederherstellen: {{message}}",
242248
"files-error.trash": "Fehler beim Verschieben in den Papierkorb: {{message}}",
249+
"files-error.upload": "Fehler beim Hochladen: {{message}}",
243250
"files-extension-change.confirm": "Fortfahren",
244251
"files-extension-change.description-add": "Bist du sicher, dass du die Dateiendung von „{{fileName}}“ in „{{extension}}“ ändern möchtest? Dadurch kann die Datei möglicherweise unlesbar werden.",
245252
"files-extension-change.description-remove": "Bist du sicher, dass du die Dateiendung von „{{fileName}}“ entfernen möchtest?",
@@ -250,8 +257,11 @@
250257
"files-folder": "Ordner",
251258
"files-listing.empty": "Keine Elemente",
252259
"files-listing.error": "Es ist ein Fehler aufgetreten",
260+
"files-listing.item-count_one": "{{count}} Element",
261+
"files-listing.item-count_other": "{{count}} Elemente",
253262
"files-listing.loading": "Wird geladen...",
254263
"files-listing.no-such-file": "Keine solche Datei oder kein solcher Ordner",
264+
"files-listing.selected-count": "{{selectedCount}} von {{totalCount}} ausgewählt",
255265
"files-name-drawer.new-folder": "Neuer Ordner",
256266
"files-name-drawer.new-folder-description": "Gib einen Namen für den neuen Ordner ein.",
257267
"files-name-drawer.new-folder-input": "Ordnername",

packages/ui/public/locales/en.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,12 @@
218218
"files-audio-island.now-playing": "Now Playing",
219219
"files-audio-island.pause": "Pause",
220220
"files-audio-island.play": "Play",
221+
"files-collision.action.keep-both": "Keep Both",
222+
"files-collision.action.replace": "Replace",
223+
"files-collision.action.skip": "Skip",
224+
"files-collision.destination.original-location": "its original location",
225+
"files-collision.message": "Do you want to replace the existing item or keep both?",
226+
"files-collision.title": "\"{{itemName}}\" already exists in {{destinationName}}",
221227
"files-download.confirm": "Download",
222228
"files-download.description": "Files cannot open this type of file. Would you like to download it instead?",
223229
"files-download.title": "Download {{name}}?",
@@ -240,6 +246,7 @@
240246
"files-error.rename": "Error renaming: {{message}}",
241247
"files-error.restore": "Error restoring: {{message}}",
242248
"files-error.trash": "Error moving to trash: {{message}}",
249+
"files-error.upload": "Error uploading: {{message}}",
243250
"files-extension-change.confirm": "Continue",
244251
"files-extension-change.description-add": "Are you sure you want to change the extension of '{{fileName}}' to '{{extension}}'? This may cause the file to be unreadable.",
245252
"files-extension-change.description-remove": "Are you sure you want to remove the extension of '{{fileName}}'?",
@@ -250,8 +257,11 @@
250257
"files-folder": "Folder",
251258
"files-listing.empty": "No items",
252259
"files-listing.error": "An error occurred",
260+
"files-listing.item-count_one": "{{count}} item",
261+
"files-listing.item-count_other": "{{count}} items",
253262
"files-listing.loading": "Loading...",
254263
"files-listing.no-such-file": "No such file or folder",
264+
"files-listing.selected-count": "{{selectedCount}} of {{totalCount}} selected",
255265
"files-name-drawer.new-folder": "New Folder",
256266
"files-name-drawer.new-folder-description": "Enter a name for the new folder.",
257267
"files-name-drawer.new-folder-input": "Folder Name",

packages/ui/public/locales/es.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,12 @@
218218
"files-audio-island.now-playing": "Reproduciendo ahora",
219219
"files-audio-island.pause": "Pausar",
220220
"files-audio-island.play": "Reproducir",
221+
"files-collision.action.keep-both": "Conservar ambos",
222+
"files-collision.action.replace": "Reemplazar",
223+
"files-collision.action.skip": "Omitir",
224+
"files-collision.destination.original-location": "su ubicación original",
225+
"files-collision.message": "¿Quieres reemplazar el elemento existente o conservar ambos?",
226+
"files-collision.title": "\"{{itemName}}\" ya existe en {{destinationName}}",
221227
"files-download.confirm": "Descargar",
222228
"files-download.description": "Files no puede abrir este tipo de archivo. ¿Quieres descargarlo?",
223229
"files-download.title": "¿Descargar {{name}}?",
@@ -240,6 +246,7 @@
240246
"files-error.rename": "Error al renombrar: {{message}}",
241247
"files-error.restore": "Error al restaurar: {{message}}",
242248
"files-error.trash": "Error al mover a la papelera: {{message}}",
249+
"files-error.upload": "Error al subir: {{message}}",
243250
"files-extension-change.confirm": "Continuar",
244251
"files-extension-change.description-add": "¿Estás seguro de que quieres cambiar la extensión de '{{fileName}}' a '{{extension}}'? Esto podría hacer que el archivo fuera ilegible.",
245252
"files-extension-change.description-remove": "¿Estás seguro de que quieres quitar la extensión de '{{fileName}}'?",
@@ -250,8 +257,11 @@
250257
"files-folder": "Carpeta",
251258
"files-listing.empty": "No hay elementos",
252259
"files-listing.error": "Ocurrió un error",
260+
"files-listing.item-count_one": "{{count}} elemento",
261+
"files-listing.item-count_other": "{{count}} elementos",
253262
"files-listing.loading": "Cargando...",
254263
"files-listing.no-such-file": "No existe tal archivo o carpeta",
264+
"files-listing.selected-count": "{{selectedCount}} de {{totalCount}} seleccionados",
255265
"files-name-drawer.new-folder": "Nueva carpeta",
256266
"files-name-drawer.new-folder-description": "Ingresa un nombre para la nueva carpeta.",
257267
"files-name-drawer.new-folder-input": "Nombre de carpeta",

packages/ui/public/locales/fr.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,12 @@
218218
"files-audio-island.now-playing": "Lecture en cours",
219219
"files-audio-island.pause": "Pause",
220220
"files-audio-island.play": "Lire",
221+
"files-collision.action.keep-both": "Conserver les deux",
222+
"files-collision.action.replace": "Remplacer",
223+
"files-collision.action.skip": "Ignorer",
224+
"files-collision.destination.original-location": "son emplacement d’origine",
225+
"files-collision.message": "Voulez-vous remplacer l’élément existant ou conserver les deux ?",
226+
"files-collision.title": "\"{{itemName}}\" existe déjà dans {{destinationName}}",
221227
"files-download.confirm": "Télécharger",
222228
"files-download.description": "Files ne peut pas ouvrir ce type de fichier. Voulez-vous plutôt le télécharger ?",
223229
"files-download.title": "Télécharger {{name}} ?",
@@ -240,6 +246,7 @@
240246
"files-error.rename": "Erreur lors du renommage : {{message}}",
241247
"files-error.restore": "Erreur lors de la restauration : {{message}}",
242248
"files-error.trash": "Erreur lors du déplacement vers la corbeille : {{message}}",
249+
"files-error.upload": "Erreur lors du téléversement : {{message}}",
243250
"files-extension-change.confirm": "Continuer",
244251
"files-extension-change.description-add": "Êtes-vous sûr de vouloir changer l’extension de « {{fileName}} » en « {{extension}} » ? Cela pourrait rendre le fichier illisible.",
245252
"files-extension-change.description-remove": "Êtes-vous sûr de vouloir supprimer l’extension de « {{fileName}} » ?",
@@ -250,8 +257,11 @@
250257
"files-folder": "Dossier",
251258
"files-listing.empty": "Aucun élément",
252259
"files-listing.error": "Une erreur s'est produite",
260+
"files-listing.item-count_one": "{{count}} élément",
261+
"files-listing.item-count_other": "{{count}} éléments",
253262
"files-listing.loading": "Chargement...",
254263
"files-listing.no-such-file": "Aucun fichier ou dossier de ce nom",
264+
"files-listing.selected-count": "{{selectedCount}} sur {{totalCount}} sélectionnés",
255265
"files-name-drawer.new-folder": "Nouveau dossier",
256266
"files-name-drawer.new-folder-description": "Entrez un nom pour le nouveau dossier.",
257267
"files-name-drawer.new-folder-input": "Nom du dossier",

packages/ui/public/locales/hu.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,12 @@
218218
"files-audio-island.now-playing": "Most szól",
219219
"files-audio-island.pause": "Szünet",
220220
"files-audio-island.play": "Lejátszás",
221+
"files-collision.action.keep-both": "Mindkettő megtartása",
222+
"files-collision.action.replace": "Felülírás",
223+
"files-collision.action.skip": "Kihagyás",
224+
"files-collision.destination.original-location": "az eredeti helyén",
225+
"files-collision.message": "Szeretnéd felülírni a meglévő elemet, vagy megtartani mindkettőt?",
226+
"files-collision.title": "\"{{itemName}}\" már létezik a(z) {{destinationName}} helyen",
221227
"files-download.confirm": "Letöltés",
222228
"files-download.description": "A Files nem tudja megnyitni ezt a fájltípust. Inkább letöltöd?",
223229
"files-download.title": "Letöltés: {{name}}?",
@@ -240,6 +246,7 @@
240246
"files-error.rename": "Hiba az átnevezés során: {{message}}",
241247
"files-error.restore": "Hiba a visszaállítás során: {{message}}",
242248
"files-error.trash": "Hiba a kukába helyezéskor: {{message}}",
249+
"files-error.upload": "Hiba a feltöltés során: {{message}}",
243250
"files-extension-change.confirm": "Folytatás",
244251
"files-extension-change.description-add": "Biztosan meg szeretnéd változtatni a(z) „{{fileName}}” fájlkiterjesztését „{{extension}}”-re? Ez a fájl olvashatatlanságát okozhatja.",
245252
"files-extension-change.description-remove": "Biztosan szeretnéd eltávolítani a(z) „{{fileName}}” fájlkiterjesztését?",
@@ -250,8 +257,11 @@
250257
"files-folder": "Mappa",
251258
"files-listing.empty": "Nincsenek elemek",
252259
"files-listing.error": "Hiba történt",
260+
"files-listing.item-count_one": "{{count}} elem",
261+
"files-listing.item-count_other": "{{count}} elem",
253262
"files-listing.loading": "Betöltés...",
254263
"files-listing.no-such-file": "Nincs ilyen fájl vagy mappa",
264+
"files-listing.selected-count": "{{selectedCount}} / {{totalCount}} kiválasztva",
255265
"files-name-drawer.new-folder": "Új mappa",
256266
"files-name-drawer.new-folder-description": "Adj meg egy nevet az új mappának.",
257267
"files-name-drawer.new-folder-input": "Mappa neve",

packages/ui/public/locales/it.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,12 @@
218218
"files-audio-island.now-playing": "In riproduzione",
219219
"files-audio-island.pause": "Pausa",
220220
"files-audio-island.play": "Riproduci",
221+
"files-collision.action.keep-both": "Mantieni entrambi",
222+
"files-collision.action.replace": "Sostituisci",
223+
"files-collision.action.skip": "Ignora",
224+
"files-collision.destination.original-location": "la sua posizione originale",
225+
"files-collision.message": "Vuoi sostituire l'elemento esistente o mantenerli entrambi?",
226+
"files-collision.title": "\"{{itemName}}\" esiste già in {{destinationName}}",
221227
"files-download.confirm": "Scarica",
222228
"files-download.description": "Files non può aprire questo tipo di file. Vuoi scaricarlo invece?",
223229
"files-download.title": "Scaricare {{name}}?",
@@ -240,6 +246,7 @@
240246
"files-error.rename": "Errore durante la rinomina: {{message}}",
241247
"files-error.restore": "Errore durante il ripristino: {{message}}",
242248
"files-error.trash": "Errore durante lo spostamento nel Cestino: {{message}}",
249+
"files-error.upload": "Errore di caricamento: {{message}}",
243250
"files-extension-change.confirm": "Continua",
244251
"files-extension-change.description-add": "Sei sicuro di voler cambiare l'estensione di '{{fileName}}' in '{{extension}}'? Questo potrebbe rendere il file illeggibile.",
245252
"files-extension-change.description-remove": "Sei sicuro di voler rimuovere l'estensione di '{{fileName}}'?",
@@ -250,8 +257,11 @@
250257
"files-folder": "Cartella",
251258
"files-listing.empty": "Nessun elemento",
252259
"files-listing.error": "Si è verificato un errore",
260+
"files-listing.item-count_one": "{{count}} elemento",
261+
"files-listing.item-count_other": "{{count}} elementi",
253262
"files-listing.loading": "Caricamento in corso...",
254263
"files-listing.no-such-file": "Nessun file o cartella corrispondente",
264+
"files-listing.selected-count": "{{selectedCount}} di {{totalCount}} selezionati",
255265
"files-name-drawer.new-folder": "Nuova cartella",
256266
"files-name-drawer.new-folder-description": "Inserisci un nome per la nuova cartella.",
257267
"files-name-drawer.new-folder-input": "Nome cartella",

packages/ui/public/locales/ja.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,12 @@
218218
"files-audio-island.now-playing": "再生中",
219219
"files-audio-island.pause": "一時停止",
220220
"files-audio-island.play": "再生",
221+
"files-collision.action.keep-both": "両方とも残す",
222+
"files-collision.action.replace": "置き換える",
223+
"files-collision.action.skip": "スキップ",
224+
"files-collision.destination.original-location": "元の場所",
225+
"files-collision.message": "既存のアイテムを置き換えるか、両方とも残しますか?",
226+
"files-collision.title": "「{{itemName}}」はすでに{{destinationName}}に存在します",
221227
"files-download.confirm": "ダウンロード",
222228
"files-download.description": "「Files」ではこの種類のファイルを開けません。代わりにダウンロードしますか?",
223229
"files-download.title": "「{{name}}」をダウンロードしますか?",
@@ -240,6 +246,7 @@
240246
"files-error.rename": "名前を変更できませんでした: {{message}}",
241247
"files-error.restore": "復元できませんでした: {{message}}",
242248
"files-error.trash": "ゴミ箱に移動できませんでした: {{message}}",
249+
"files-error.upload": "アップロードエラー: {{message}}",
243250
"files-extension-change.confirm": "続行",
244251
"files-extension-change.description-add": "「{{fileName}}」の拡張子を「{{extension}}」に変更してもよろしいですか? ファイルが読み込めなくなる可能性があります。",
245252
"files-extension-change.description-remove": "「{{fileName}}」の拡張子を削除してもよろしいですか?",
@@ -250,8 +257,11 @@
250257
"files-folder": "フォルダ",
251258
"files-listing.empty": "アイテムがありません",
252259
"files-listing.error": "エラーが発生しました",
260+
"files-listing.item-count_one": "{{count}} 件の項目",
261+
"files-listing.item-count_other": "{{count}} 件の項目",
253262
"files-listing.loading": "読み込み中...",
254263
"files-listing.no-such-file": "そのようなファイルまたはフォルダはありません",
264+
"files-listing.selected-count": "全{{totalCount}}件のうち{{selectedCount}}件を選択",
255265
"files-name-drawer.new-folder": "新規フォルダ",
256266
"files-name-drawer.new-folder-description": "新しいフォルダの名前を入力してください。",
257267
"files-name-drawer.new-folder-input": "フォルダ名",

0 commit comments

Comments
 (0)