This commit is contained in:
Draper
2020-01-16 12:22:02 +00:00
parent 3839bdaf3c
commit d76d3acb70
2 changed files with 43 additions and 17 deletions

View File

@@ -0,0 +1 @@
Fixed symbolic link folders not showing for local tracks.

View File

@@ -1,3 +1,4 @@
import contextlib
import ntpath
import os
import posixpath
@@ -167,29 +168,51 @@ class LocalPath:
modified.path = modified.path.joinpath(*args)
return modified
def multiglob(self, *patterns):
def rglob(self, pattern, folder=False):
return list(glob.glob(f"{self.path}{os.sep}**{os.sep}{pattern}", recursive=True))
def glob(self, pattern, folder=False):
if folder:
return list(glob.glob(f"{self.path}{os.sep}*{os.sep}", recursive=False))
else:
return list(glob.glob(f"{self.path}{os.sep}*{pattern}", recursive=False))
def multiglob(self, *patterns, folder=False):
paths = []
for p in patterns:
paths.extend(list(self.path.glob(p)))
for p in self._filtered(paths):
yield p
paths.extend(self.glob(p, folder=folder))
if not folder:
for p in self._filtered(paths):
yield p
else:
for p in paths:
p = LocalPath(p) if not isinstance(p, LocalPath) else p
yield p
def multirglob(self, *patterns):
def multirglob(self, *patterns, folder=False):
paths = []
for p in patterns:
paths.extend(list(self.path.rglob(p)))
for p in self._filtered(paths):
yield p
paths.extend(self.rglob(p, folder=folder))
if not folder:
for p in self._filtered(paths):
yield p
else:
for p in paths:
p = LocalPath(p) if not isinstance(p, LocalPath) else p
yield p
def _filtered(self, paths: List[Path]):
for p in paths:
p = LocalPath(p) if not isinstance(p, LocalPath) else p
if p.suffix in self._all_music_ext:
yield p
def __str__(self):
return self.to_string()
def __repr__(self):
return str(self)
def to_string(self):
try:
return str(self.path.absolute())
@@ -213,11 +236,11 @@ class LocalPath:
tracks = []
for track in self.multirglob(*[f"*{ext}" for ext in self._all_music_ext]):
if track.exists() and track.is_file() and track.parent != self.localtrack_folder:
tracks.append(Query.process_input(LocalPath(str(track.absolute()))))
tracks.append(LocalPath(str(track.absolute())))
return sorted(tracks, key=lambda x: x.to_string_user().lower())
def subfolders_in_tree(self):
files = list(self.multirglob(*[f"*{ext}" for ext in self._all_music_ext]))
files = list(self.multirglob(*[f"*{ext}" for ext in self._all_music_ext], folder=True))
folders = []
for f in files:
if f.exists() and f.parent not in folders and f.parent != self.localtrack_folder:
@@ -230,17 +253,19 @@ class LocalPath:
def tracks_in_folder(self):
tracks = []
for track in self.multiglob(*[f"*{ext}" for ext in self._all_music_ext]):
if track.exists() and track.is_file() and track.parent != self.localtrack_folder:
tracks.append(Query.process_input(LocalPath(str(track.absolute()))))
for track in self.multiglob(*[f"{ext}" for ext in self._all_music_ext]):
with contextlib.suppress(ValueError):
if track.exists() and track.is_file() and track.parent != self.localtrack_folder and track.path.relative_to(self.path):
tracks.append(LocalPath(str(track.absolute())))
return sorted(tracks, key=lambda x: x.to_string_user().lower())
def subfolders(self):
files = list(self.multiglob(*[f"*{ext}" for ext in self._all_music_ext]))
files = list(self.multiglob(f"{os.sep}*", folder=True))
folders = []
for f in files:
if f.exists() and f.parent not in folders and f.parent != self.localtrack_folder:
folders.append(f.parent)
with contextlib.suppress(ValueError):
if f.exists() and f.parent not in folders and f.parent != self.localtrack_folder and f.path.relative_to(self.path):
folders.append(f.parent)
return_folders = []
for folder in folders:
if folder.exists() and folder.is_dir():