diff --git a/.gitignore b/.gitignore index 46e65c4..0ad16ec 100644 --- a/.gitignore +++ b/.gitignore @@ -19,6 +19,7 @@ TestResults/ *.coverage *.nupkg project.lock.json +publish/ ## IDE .idea/ @@ -35,3 +36,4 @@ Desktop.ini *.db-shm *.db-wal *.log + diff --git a/Explorer.slnx b/Explorer.slnx index 4563adf..3584075 100644 --- a/Explorer.slnx +++ b/Explorer.slnx @@ -8,6 +8,8 @@ + + diff --git a/docs/ARCHITECTURE.md b/docs/ARCHITECTURE.md index e5f9545..cce8051 100644 --- a/docs/ARCHITECTURE.md +++ b/docs/ARCHITECTURE.md @@ -353,7 +353,7 @@ Windows-NFS-Client (optional Feature) erscheint als Laufwerk oder Mount. Behande ### 5.4 Cloud (Plugin-Overlay) -Explorer **implementiert keine Synchronisation**. Offizielle Clients (OneDrive, später Google Drive / Dropbox) bleiben zuständig für Sync, Hydration, Konflikte und Anmeldung. +Explorer **implementiert keine Synchronisation**. Offizielle Clients (OneDrive, Google Drive, Nextcloud; später Dropbox) bleiben zuständig für Sync, Hydration, Konflikte und Anmeldung. Cloud-Ordner werden wie jedes andere gemountete Dateisystem über Win32 gelistet. `Explorer.Plugin.Abstractions` / `IStorageProvider` **reichern** Einträge an (Status, logische vs. allokierte Größe, Pin/Free-up), sie **ersetzen nicht** Enumeration, Watcher oder Source-Identität. @@ -763,7 +763,7 @@ Ziel-SLO (Richtwerte, kein Contract): - Historien-Charts (Schema ja) - Pause/Resume Transfers, Konflikt-UI, Undo - Icon-View, Treemap, Preview-Pane -- Weitere Cloud-Provider (Google Drive, Dropbox) und PluginHost/IPC +- Weitere Cloud-Provider (Dropbox) und PluginHost/IPC - Explorer.exe ersetzen - Volltext in Dateiinhalten diff --git a/src/Explorer.Analysis/DuplicateAndHistory.cs b/src/Explorer.Analysis/DuplicateAndHistory.cs index 4f5b351..069df3b 100644 --- a/src/Explorer.Analysis/DuplicateAndHistory.cs +++ b/src/Explorer.Analysis/DuplicateAndHistory.cs @@ -42,6 +42,12 @@ public sealed class DuplicateHashWorker : BackgroundService var path = PathRules.Combine(item.RootPath, item.PathRel); try { + if (!File.Exists(path)) + { + await _store.Hashes.MarkSkippedAsync(item.EntryId, cancellationToken).ConfigureAwait(false); + continue; + } + if (_hydration.WouldHydrateOnRead(item.Attributes, item.CloudAvailability) || await _hydration.WouldHydrateOnReadAsync(path, cancellationToken).ConfigureAwait(false)) { diff --git a/src/Explorer.App/App.xaml b/src/Explorer.App/App.xaml index 8348a16..0a31961 100644 --- a/src/Explorer.App/App.xaml +++ b/src/Explorer.App/App.xaml @@ -228,6 +228,15 @@ + + + + + + + -