use scandir to read dir content on file explorer (#64)

This commit is contained in:
Mungai Geoffrey
2022-06-07 11:26:55 +03:00
committed by GitHub
parent 892a090ed5
commit 824d3c6a86
9 changed files with 150 additions and 71 deletions
+33 -4
View File
@@ -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]