2021-04-14 23:23:56 +03:00
|
|
|
import logging
|
|
|
|
import os
|
2021-04-15 12:30:26 +03:00
|
|
|
import shutil
|
|
|
|
from pathlib import Path
|
|
|
|
|
|
|
|
from tags import Tags
|
|
|
|
|
2021-04-14 23:23:56 +03:00
|
|
|
|
|
|
|
class Library:
|
|
|
|
def __init__(self, dir_root: Path):
|
|
|
|
self.dir_root = dir_root
|
2021-04-14 23:59:28 +03:00
|
|
|
self.dir_orphan = Path(dir_root, '_orphan')
|
2021-04-14 23:23:56 +03:00
|
|
|
self.dir_orphan.mkdir(exist_ok=True, parents=True)
|
|
|
|
|
2021-04-15 12:30:26 +03:00
|
|
|
def move_to_orphan(self, p: Path) -> None:
|
2021-04-14 23:23:56 +03:00
|
|
|
logging.info("%s move to orphan", p)
|
|
|
|
shutil.move(os.fspath(p), os.fspath(self.dir_orphan))
|
|
|
|
|
2021-04-15 12:30:26 +03:00
|
|
|
def move(self, p: Path, tags: Tags) -> None:
|
2021-04-14 23:23:56 +03:00
|
|
|
new_path = self.__compute_path(tags)
|
|
|
|
new_path.mkdir(exist_ok=True, parents=True)
|
|
|
|
logging.info("%s move to %s", p.name, new_path)
|
|
|
|
shutil.move(os.fspath(p), os.fspath(new_path))
|
|
|
|
|
|
|
|
def __compute_path(self, tags: Tags) -> Path:
|
|
|
|
p = self.dir_root
|
|
|
|
if tags.copyrights == 'original':
|
|
|
|
# Originals groups by artist
|
|
|
|
p = p / "_originals"
|
|
|
|
if tags.artists != "":
|
|
|
|
artist = tags.artists.split(" ")[0]
|
|
|
|
p = p / self.__sanitize(artist)
|
|
|
|
return p
|
|
|
|
# Main section
|
|
|
|
if tags.copyrights != "":
|
2021-04-15 12:30:26 +03:00
|
|
|
_copyright = tags.copyrights.split(" ")[0]
|
|
|
|
p = p / self.__sanitize(_copyright)
|
2021-04-14 23:23:56 +03:00
|
|
|
if tags.characters == "":
|
|
|
|
return p
|
|
|
|
# Characters section
|
2021-04-14 23:59:28 +03:00
|
|
|
characters = tags.characters_sanitized()
|
2021-04-14 23:23:56 +03:00
|
|
|
if len(characters) == 1:
|
2021-04-14 23:59:28 +03:00
|
|
|
p = p / self.__sanitize(characters[0])
|
2021-04-14 23:23:56 +03:00
|
|
|
else:
|
|
|
|
p = p / "_multiple"
|
|
|
|
return p
|
|
|
|
|
2021-04-15 12:30:26 +03:00
|
|
|
@staticmethod
|
|
|
|
def __sanitize(s: str) -> str:
|
2021-04-14 23:23:56 +03:00
|
|
|
s = "".join(x for x in s if x.isalnum() or x in "._-()")
|
|
|
|
return s.replace("_", " ").strip()
|