diff --git a/app.py b/app.py index c78ca08..562b119 100644 --- a/app.py +++ b/app.py @@ -812,8 +812,16 @@ def do_copy(src_devs, dst_dev, cfg): add_log('Fertig! ' + ', '.join(msg_parts)) dst_dir_root = Path(dst_mp) / date_str - _upload_thread = threading.Thread(target=run_uploads, args=(dst_dir_root, cfg), daemon=True) - _upload_thread.start() + upload_files = [dst_f for _, dst_f in verified_pairs if dst_f.exists()] + if upload_files: + _upload_thread = threading.Thread( + target=run_uploads, + args=(dst_dir_root, cfg, upload_files), + daemon=True + ) + _upload_thread.start() + elif any(t.get('enabled') for t in cfg.get('upload_targets', [])): + add_log('NAS-Upload: keine neu auf das Ziel übertragenen Dateien') except Exception as e: log.exception('Copy failed') @@ -1088,8 +1096,8 @@ def test_remote(tid): return True, '' -def run_uploads(local_dir: Path, cfg: dict): - """Lädt local_dir zu allen aktiven Fernzielen hoch. Läuft im Background-Thread.""" +def run_uploads(local_dir: Path, cfg: dict, upload_files=None): + """Lädt die zuletzt lokal geschriebenen Dateien zu allen aktiven Fernzielen hoch.""" targets = [t for t in cfg.get('upload_targets', []) if t.get('enabled')] if not targets: return @@ -1145,16 +1153,28 @@ def run_uploads(local_dir: Path, cfg: dict): # 3. Kopieren mit Fortschritt add_log(f'Upload {name}: starte copy von {local_dir}') dup_mode = cfg.get('duplicate_handling', 'skip') - files = sorted(f for f in local_dir.rglob('*') if f.is_file()) - dirs = sorted(d for d in local_dir.rglob('*') if d.is_dir()) + if upload_files is None: + files = sorted(f for f in local_dir.rglob('*') if f.is_file()) + else: + files = [] + for f in upload_files: + f = Path(f) + try: + f.relative_to(local_dir) + except ValueError: + continue + if f.is_file(): + files.append(f) + files = sorted(files) + dirs = sorted({p for f in files for p in f.relative_to(local_dir).parents + if str(p) != '.'}) bytes_total = sum(f.stat().st_size for f in files) with upload_lock: upload_state.update(total=len(files), bytes_total=bytes_total, progress=100 if not files else 0) for d in dirs: - rel_dir = d.relative_to(local_dir).as_posix() - _rclone('mkdir', _smb_conn(t, _join_remote_path(dest_rel, rel_dir)), timeout=30) + _rclone('mkdir', _smb_conn(t, _join_remote_path(dest_rel, d.as_posix())), timeout=30) errors = [] skipped = 0 diff --git a/version.txt b/version.txt index feca5b2..3e9c4a6 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -1.0.49 \ No newline at end of file +1.0.50