refactor initial not fully recovered

This commit is contained in:
Шурупов Илья Викторович 2026-01-04 19:25:42 +03:00
parent 892568d668
commit a620e7a4f5
16 changed files with 925 additions and 267 deletions

40
src/local/ParseLocal.py Normal file
View file

@ -0,0 +1,40 @@
from datetime import datetime
from typing import Any, Iterable
from pathlib import Path
import json
from src.Library import *
class LocalParser:
def __init__(self):
pass
def parse_track_item(self, id, track: dict[str, Any]) -> Track:
track = Track(
title=track["name"],
artists=[track.get("artist", [])],
album=track["album"] if track.get("album") else None,
duration_ms=None,
added_at=None,
spotify=None,
id=id,
local=LocalData(path=track["path"])
)
return track
def parse_all_tracks(self, items: dict[str, list[dict[str, Any]]]) -> list[Track]:
return [self.parse_track_item(id, track) for id, track in items.items()]
def build_library_from_tracks(self, tracks_content_json: dict[str, list[dict[str, Any]]]) -> Library:
library = Library()
tracks = self.parse_all_tracks(tracks_content_json)
library.tracklists.append(TrackList(tracks=list(tracks)))
library.tracks.extend(tracks)
return library
def parse(self, tracks_file: Path) -> Library:
tracks_content = json.loads(tracks_file.read_text())
return self.build_library_from_tracks(tracks_content)