__init__.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import aiohttp
  2. import aiofiles
  3. import hashlib
  4. import mp3
  5. import config
  6. from .os import listdir, rename
  7. import re
  8. def no_translate(s):
  9. try:
  10. return re.sub(r" ?\(.+\)", "", s)
  11. except:
  12. print("Exception", s)
  13. async def wget(url: str, filename: str=None):
  14. """ async requests.get(url) """
  15. session = aiohttp.ClientSession()
  16. resp = await session.get(url)
  17. content = await resp.read()
  18. await session.close()
  19. if filename is not None:
  20. async with aiofiles.open(filename, "wb") as f:
  21. await f.write(content)
  22. return content
  23. def hash(s: str):
  24. return hashlib.md5(s.encode("utf-8")).hexdigest()
  25. def _correlate(songs, folder):
  26. res = {}
  27. for filename in listdir(folder):
  28. if not filename.endswith(".mp3"):
  29. continue
  30. def pre(s: str):
  31. return s.strip().lower().replace("ё", "е")
  32. for song in songs:
  33. title = no_translate(song["title"])
  34. if pre(title) in pre(filename) or pre(filename[:-4]) in pre(title):
  35. song["founded"] = True
  36. break
  37. title = None
  38. if title is None:
  39. print(title)
  40. continue
  41. res[filename] = song
  42. return res
  43. def format(s: str, obj):
  44. if "{number}" in s:
  45. number = f'{obj.get("number")}'
  46. length = f'{obj["album_length"]}'
  47. number = f"{'0'*(len(length) - len(number))}{number}"
  48. s = s.replace("{number}", number)
  49. return s.format(
  50. artist=no_translate(obj["artist"]),
  51. title=no_translate(obj["title"])
  52. )
  53. async def set_meta_to_albumfolder(album, path):
  54. for name, song in _correlate(album["songs"], path).items():
  55. song["album_length"] = len(album["songs"])
  56. filename = path + "/" + format(
  57. config.track_filename_template, song
  58. ).replace("/", "-")
  59. mp3.set_meta(f"{path}/{name}", song, album)
  60. await rename(f"{path}/{name}", filename)