layed out the page structure
This commit is contained in:
parent
e51d4ca467
commit
68031b9cdd
20
notes.md
20
notes.md
@ -1,16 +1,3 @@
|
||||
# TO DO
|
||||
- Create a super class for audio_source, from which yet to come classes like Musify or Youtube inherit.
|
||||
- be able to select multiple things at once (eg "0, 3, 5, 6") and then download this selection with ok
|
||||
- add the file system as audio source
|
||||
- add complete search of musify (scraping of artist page etc.) as last resort
|
||||
- add a check if the songs truly are the same with non changebal attributes (length etc.)
|
||||
- get additional ISRCs
|
||||
- add Deezer as additional source
|
||||
- add a config file where you should be able to set:
|
||||
- folder structure (genre/artist/release/track.mp3 eg.)
|
||||
- proxies (maybe a boolean if tor should be enabled)
|
||||
- toggling of audio sources and sorting priorities of audio sources
|
||||
|
||||
# Which "Modules" do I have
|
||||
## Overview
|
||||
- fetching of metadata
|
||||
@ -118,3 +105,10 @@ Version 2.4 of the specification prescribes that all text fields (the fields tha
|
||||
A frame Name is composed from 4 capital letters $XXXX$
|
||||
|
||||
The first letter of text frames is $TXXX$
|
||||
|
||||
---
|
||||
|
||||
# TODO
|
||||
|
||||
- Add pprint to the song objects
|
||||
- DOCUMENTATION
|
||||
|
@ -1,9 +1,12 @@
|
||||
from . import (
|
||||
song,
|
||||
metadata,
|
||||
source
|
||||
source,
|
||||
parents
|
||||
)
|
||||
|
||||
MusicObject = parents.DatabaseObject
|
||||
|
||||
ID3_MAPPING = metadata.Mapping
|
||||
ID3Timestamp = metadata.ID3Timestamp
|
||||
|
||||
|
59
src/music_kraken/pages/abstract.py
Normal file
59
src/music_kraken/pages/abstract.py
Normal file
@ -0,0 +1,59 @@
|
||||
from typing import (
|
||||
List
|
||||
)
|
||||
|
||||
from ..database import (
|
||||
Song,
|
||||
Source,
|
||||
Album,
|
||||
Metadata,
|
||||
Artist,
|
||||
Lyrics,
|
||||
Target,
|
||||
MusicObject
|
||||
)
|
||||
|
||||
class Query:
|
||||
def __init__(self) -> None:
|
||||
pass
|
||||
|
||||
class Page:
|
||||
"""
|
||||
This is an abstract class, laying out the
|
||||
functionality for every other class fetching something
|
||||
"""
|
||||
|
||||
@classmethod
|
||||
def search_by_query(cls, query: str) -> List[MusicObject]:
|
||||
"""
|
||||
# The Query
|
||||
You can define a new parameter with "#",
|
||||
the letter behind it defines the *type* of parameter, followed by a space
|
||||
"#a Psychonaut 4 #r Tired, Numb and #t Drop by Drop"
|
||||
if no # is in the query it gets treated as "unspecified query"
|
||||
|
||||
# Functionality
|
||||
Returns the best matches from this page for the query, passed in.
|
||||
|
||||
:param query:
|
||||
:return possible_music_objects:
|
||||
"""
|
||||
|
||||
raise NotImplementedError()
|
||||
|
||||
@classmethod
|
||||
def fetch_details(cls, music_object: MusicObject, simple: bool = False) -> MusicObject:
|
||||
"""
|
||||
when a music object with laccing data is passed in, it returns
|
||||
the SAME object **(no copy)** with more detailed data.
|
||||
If you for example put in an album, it fetches the tracklist
|
||||
|
||||
:param music_object:
|
||||
:param simple:
|
||||
if it is true it fetches only the most important information (only one level)
|
||||
if an Artist is passed in, it fetches only the discography of the artist, and not the
|
||||
tracklist of every album of the artist.
|
||||
:return detailed_music_object:
|
||||
"""
|
||||
|
||||
raise NotImplementedError
|
Loading…
Reference in New Issue
Block a user