feat: Add count of videos added from cloud scan

This commit is contained in:
Peifan Li
2025-12-24 17:26:19 -05:00
parent 853e7a54ec
commit 7af272aef2
13 changed files with 29 additions and 7 deletions

View File

@@ -234,6 +234,7 @@ export const syncToCloud = async (
uploaded,
skipped,
failed,
cloudScanAdded, // Add count of videos added from cloud scan
errors: [...errors, ...cloudScanErrors],
},
message: `Two-way sync completed: ${uploaded} uploaded, ${cloudScanAdded} added from cloud, ${failed} failed`,

View File

@@ -129,8 +129,7 @@ export async function scanCloudFiles(
return false;
}
// Also check by filename (for backward compatibility)
return !existingFilenames.has(file.name);
return true;
});
logger.info(

View File

@@ -21,6 +21,7 @@ interface SyncProgress {
uploaded: number;
skipped: number;
failed: number;
cloudScanAdded?: number; // Count of videos added from cloud scan
errors: string[];
};
}
@@ -398,11 +399,22 @@ const CloudDriveSettings: React.FC<CloudDriveSettingsProps> = ({ settings, onCha
{t('syncCompleted')}
</Typography>
<Typography variant="body2">
{t('syncReport', {
total: syncProgress.report.total,
uploaded: syncProgress.report.uploaded,
failed: syncProgress.report.failed
})}
{syncProgress.report.cloudScanAdded !== undefined && syncProgress.report.cloudScanAdded > 0 ? (
<>
{t('syncReport', {
total: syncProgress.report.total + syncProgress.report.cloudScanAdded,
uploaded: syncProgress.report.uploaded,
failed: syncProgress.report.failed
})}
<span> | {t('cloudScanAdded')}: {syncProgress.report.cloudScanAdded}</span>
</>
) : (
t('syncReport', {
total: syncProgress.report.total,
uploaded: syncProgress.report.uploaded,
failed: syncProgress.report.failed
})
)}
</Typography>
{syncProgress.report.errors.length > 0 && (
<Box sx={{ mt: 1 }}>

View File

@@ -156,6 +156,7 @@ export const ar = {
scanPathsHelper: "مسار واحد في كل سطر. سيتم مسح مقاطع الفيديو من هذه المسارات. إذا كانت فارغة، سيتم استخدام مسار التحميل. مثال:\n/a/أفلام\n/b/وثائقيات",
cloudDriveNote:
"بعد تفعيل هذه الميزة، سيتم تحميل مقاطع الفيديو التي تم تنزيلها حديثًا تلقائيًا إلى التخزين السحابي وسيتم حذف الملفات المحلية. سيتم تشغيل مقاطع الفيديو من التخزين السحابي عبر الوكيل.",
cloudScanAdded: "تمت الإضافة من السحابة",
testing: "جارٍ الاختبار...",
testConnection: "اختبار الاتصال",
sync: "مزامنة",

View File

@@ -153,6 +153,7 @@ export const de = {
scanPathsHelper: "Ein Pfad pro Zeile. Videos werden von diesen Pfaden gescannt. Wenn leer, wird der Upload-Pfad verwendet. Beispiel:\n/a/Filme\n/b/Dokumentationen",
cloudDriveNote:
"Nach Aktivierung dieser Funktion werden neu heruntergeladene Videos automatisch in den Cloud-Speicher hochgeladen und lokale Dateien werden gelöscht. Videos werden über einen Proxy aus dem Cloud-Speicher abgespielt.",
cloudScanAdded: "Aus Cloud hinzugefügt",
testing: "Teste...",
testConnection: "Verbindung testen",
sync: "Synchronisieren",

View File

@@ -157,6 +157,7 @@ export const en = {
"One path per line. Videos will be scanned from these paths. If empty, will use upload path. Example:\n/a/Movies\n/b/Documentaries",
cloudDriveNote:
"After enabling this feature, newly downloaded videos will be automatically uploaded to cloud storage and local files will be deleted. Videos will be played from cloud storage via proxy.",
cloudScanAdded: "Added from cloud",
testing: "Testing...",
testConnection: "Test Connection",
sync: "Sync",

View File

@@ -167,6 +167,7 @@ export const es = {
scanPathsHelper: "Una ruta por línea. Se escanearán videos de estas rutas. Si está vacío, se usará la ruta de carga. Ejemplo:\n/a/Peliculas\n/b/Documentales",
cloudDriveNote:
"Después de habilitar esta función, los videos recién descargados se subirán automáticamente al almacenamiento en la nube y se eliminarán los archivos locales. Los videos se reproducirán desde el almacenamiento en la nube a través de un proxy.",
cloudScanAdded: "Añadido desde la nube",
testing: "Probando...",
testConnection: "Probar Conexión",
sync: "Sincronizar",

View File

@@ -171,6 +171,7 @@ export const fr = {
"Un chemin par ligne. Les vidéos seront analysées à partir de ces chemins. Si vide, le chemin de téléchargement sera utilisé. Exemple :\n/a/Films\n/b/Documentaires",
cloudDriveNote:
"Après avoir activé cette fonctionnalité, les vidéos nouvellement téléchargées seront automatiquement téléchargées vers le stockage cloud et les fichiers locaux seront supprimés. Les vidéos seront lues depuis le stockage cloud via un proxy.",
cloudScanAdded: "Ajouté depuis le cloud",
testing: "Test en cours...",
testConnection: "Tester la connexion",
sync: "Synchroniser",

View File

@@ -162,6 +162,7 @@ export const ja = {
scanPathsHelper: "1行に1つのパスを入力してください。これらのパスから動画がスキャンされます。空の場合はアップロードパスが使用されます。例\n/a/映画\n/b/ドキュメンタリー",
cloudDriveNote:
"この機能を有効にすると、新しくダウンロードされた動画は自動的にクラウドストレージにアップロードされ、ローカルファイルは削除されます。動画はプロキシ経由でクラウドストレージから再生されます。",
cloudScanAdded: "クラウドから追加",
testing: "テスト中...",
testConnection: "接続をテスト",
sync: "同期",

View File

@@ -159,6 +159,7 @@ export const ko = {
scanPathsHelper: "줄당 하나의 경로. 이 경로에서 동영상을 스캔합니다. 비어 있으면 업로드 경로를 사용합니다. 예:\n/a/영화\n/b/다큐멘터리",
cloudDriveNote:
"이 기능을 활성화한 후 새로 다운로드된 비디오는 자동으로 클라우드 스토리지에 업로드되고 로컬 파일은 삭제됩니다. 비디오는 프록시를 통해 클라우드 스토리지에서 재생됩니다.",
cloudScanAdded: "클라우드에서 추가됨",
testing: "테스트 중...",
testConnection: "연결 테스트",
sync: "동기화",

View File

@@ -162,6 +162,7 @@ export const pt = {
scanPathsHelper: "Um caminho por linha. Os vídeos serão verificados a partir desses caminhos. Se vazio, usará o caminho de upload. Exemplo:\n/a/Filmes\n/b/Documentários",
cloudDriveNote:
"Após habilitar este recurso, os vídeos recém-baixados serão automaticamente enviados para o armazenamento em nuvem e os arquivos locais serão excluídos. Os vídeos serão reproduzidos do armazenamento em nuvem via proxy.",
cloudScanAdded: "Adicionado da nuvem",
testing: "Testando...",
testConnection: "Testar Conexão",
sync: "Sincronizar",

View File

@@ -170,6 +170,7 @@ export const ru = {
scanPathsHelper: "Один путь в строке. Видео будут сканироваться из этих путей. Если пусто, будет использоваться путь загрузки. Пример:\n/a/Фильмы\n/b/Документальные",
cloudDriveNote:
"После включения этой функции недавно загруженные видео будут автоматически загружены в облачное хранилище, а локальные файлы будут удалены. Видео будут воспроизводиться из облачного хранилища через прокси.",
cloudScanAdded: "Добавлено из облака",
testing: "Тестирование...",
testConnection: "Тестировать соединение",
sync: "Синхронизировать",

View File

@@ -155,6 +155,7 @@ export const zh = {
"每行一个路径。系统将扫描这些路径下的视频。留空则使用默认上传路径。示例:\n/a/电影\n/b/纪录片",
cloudDriveNote:
"启用此功能后,新下载的视频将自动上传到云端存储,本地文件将被删除。视频将通过代理从云端存储播放。",
cloudScanAdded: "从云端添加",
testing: "测试中...",
testConnection: "测试连接",
sync: "同步",