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 @@
+
+
+
+
+
+
+
-
-
+
@@ -102,7 +164,9 @@
-
+
+
+
@@ -118,7 +182,13 @@
+
+
+
+
+
@@ -206,6 +276,9 @@
+
+