mirror of
https://github.com/Dvorinka/swingmusic-extended.git
synced 2026-06-04 20:43:04 +00:00
use scandir to read dir content on file explorer (#64)
This commit is contained in:
+33
-4
@@ -6,6 +6,7 @@ import random
|
||||
import threading
|
||||
import time
|
||||
from datetime import datetime
|
||||
from typing import Any
|
||||
from typing import Dict
|
||||
from typing import List
|
||||
|
||||
@@ -27,15 +28,14 @@ def background(func):
|
||||
return background_func
|
||||
|
||||
|
||||
def run_fast_scandir(__dir: str,
|
||||
ext: list,
|
||||
full=False) -> Dict[List[str], List[str]]:
|
||||
def run_fast_scandir(__dir: str, full=False) -> Dict[List[str], List[str]]:
|
||||
"""
|
||||
Scans a directory for files with a specific extension. Returns a list of files and folders in the directory.
|
||||
"""
|
||||
|
||||
subfolders = []
|
||||
files = []
|
||||
ext = [".flac", ".mp3"]
|
||||
|
||||
for f in os.scandir(__dir):
|
||||
if f.is_dir() and not f.name.startswith("."):
|
||||
@@ -46,7 +46,7 @@ def run_fast_scandir(__dir: str,
|
||||
|
||||
if full or len(files) == 0:
|
||||
for _dir in list(subfolders):
|
||||
sf, f = run_fast_scandir(_dir, ext, full=True)
|
||||
sf, f = run_fast_scandir(_dir, full=True)
|
||||
subfolders.extend(sf)
|
||||
files.extend(f)
|
||||
|
||||
@@ -133,3 +133,32 @@ def create_safe_name(name: str) -> str:
|
||||
Creates a url-safe name from a name.
|
||||
"""
|
||||
return "".join([i for i in name if i not in '/\\:*?"<>|'])
|
||||
|
||||
|
||||
class UseBisection:
|
||||
|
||||
def __init__(self, list: List, search_from: str,
|
||||
queries: List[str]) -> None:
|
||||
self.list = list
|
||||
self.queries = queries
|
||||
self.search_from = search_from
|
||||
self.list.sort(key=lambda x: getattr(x, search_from))
|
||||
|
||||
def find(self, query: str):
|
||||
left = 0
|
||||
right = len(self.list) - 1
|
||||
|
||||
while left <= right:
|
||||
mid = (left + right) // 2
|
||||
|
||||
if self.list[mid].__getattribute__(self.search_from) == query:
|
||||
return self.list[mid]
|
||||
elif self.list[mid].__getattribute__(self.search_from) > query:
|
||||
right = mid - 1
|
||||
else:
|
||||
left = mid + 1
|
||||
|
||||
return None
|
||||
|
||||
def __call__(self) -> Any:
|
||||
return [self.find(query) for query in self.queries]
|
||||
|
||||
Reference in New Issue
Block a user