diff --git a/DEPLOY.md b/DEPLOY.md index fda5336..0272c70 100644 --- a/DEPLOY.md +++ b/DEPLOY.md @@ -47,8 +47,8 @@ guide to switching back to the official build once the upstream fix lands. ./build-ytdlp.sh docker buildx build --platform linux/amd64 \ - --build-arg VERSION=1.30 \ - -t 192.168.2.212:3000/tigeren/metube:1.30 \ + --build-arg VERSION=1.31 \ + -t 192.168.2.212:3000/tigeren/metube:1.31 \ --push . ``` diff --git a/app/main.py b/app/main.py index 8485a25..e6b8fd7 100644 --- a/app/main.py +++ b/app/main.py @@ -95,6 +95,8 @@ class Config: self.LIBRARY_ROOTS = normalize_library_roots(roots) if self.LIBRARY_DIRS and not self.LIBRARY_ROOTS: log.warning('Library feature disabled: none of LIBRARY_DIRS exists') + if self.LIBRARY_ROOTS: + log.info('Library roots: ' + ', '.join(f'{label or "(root)"} -> {path}' for label, path in self.LIBRARY_ROOTS)) if not self.URL_PREFIX.endswith('/'): self.URL_PREFIX += '/' @@ -402,7 +404,10 @@ def _scan_library_folders(roots): exclude = re.compile(config.CUSTOM_DIRS_EXCLUDE_REGEX) if config.CUSTOM_DIRS_EXCLUDE_REGEX else None folders = [] for label, root in roots: - for dirpath, dirnames, filenames in os.walk(root): + def _on_walk_error(exc): + log.warning(f'Library scan error under "{root}": {exc!r}') + + for dirpath, dirnames, filenames in os.walk(root, onerror=_on_walk_error): rel = os.path.relpath(dirpath, root) dirnames[:] = [d for d in dirnames if not (exclude and exclude.search(os.path.normpath(os.path.join(rel, d))))] diff --git a/docker-compose.yml b/docker-compose.yml index 5a045a8..71640f6 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -11,14 +11,14 @@ services: volumes: - ./downloads:/downloads - ./metube-config:/config - # Media library for the organize/browse feature (change the host path to your real library) - - ./library:/library + # Media library for the organize/browse feature (change the host path to your real library) + - ./library:/library # Multiple library mounts share one Library view; each mount becomes a # top-level collapsible group. Uncomment to use instead of ./library: - # - /mnt/media-a:/media/media-a - # - /mnt/media-b:/media/media-b - # Optional: mount cookies file for authenticated downloads - # - ./cookies:/cookies:ro + - ./library/media-a:/media/media-a + - ./library/media-b:/media/media-b + # Optional: mount cookies file for authenticated downloads + # - ./cookies:/cookies:ro environment: # Basic configuration - UID=0 @@ -29,10 +29,10 @@ services: - DOWNLOAD_DIR=/downloads - STATE_DIR=/config - TEMP_DIR=/downloads - # Media library (organize/browse feature); leave empty to disable - - LIBRARY_DIR=/library - # Multi-root alternative (overrides LIBRARY_DIR, comma-separated): - # - LIBRARY_DIRS=/media/media-a,/media/media-b + # Media library (organize/browse feature); leave empty to disable + - LIBRARY_DIR=/library + # Multi-root alternative (overrides LIBRARY_DIR, comma-separated): + - LIBRARY_DIRS=/media/media-a,/media/media-b # Download behavior - DOWNLOAD_MODE=limited @@ -117,4 +117,4 @@ services: # metube-downloads: # driver: local # metube-cookies: -# driver: local +# driver: local diff --git a/ui/src/app/sidebar.component.sass b/ui/src/app/sidebar.component.sass index 02d080f..d8c53e8 100644 --- a/ui/src/app/sidebar.component.sass +++ b/ui/src/app/sidebar.component.sass @@ -177,12 +177,14 @@ background: var(--bg) color: var(--fg) - svg + fa-icon + display: inline-block font-size: 11px + line-height: 1 transition: transform 0.15s ease transform: rotate(90deg) - &.collapsed svg + &.collapsed fa-icon transform: none .lib-group-item