utils.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import logging
  2. from typing import Any
  3. from urllib.parse import unquote
  4. from dateutil.parser import ParserError, parse
  5. logger = logging.getLogger(__name__)
  6. def convert_to_seconds(run_time: str) -> int:
  7. """Jellyfin sends run time as 00:00:00 string. We want the run time to
  8. actually be in seconds so we'll convert it"""
  9. if ":" in run_time:
  10. run_time_list = run_time.split(":")
  11. run_time = (int(run_time_list[1]) * 60) + int(run_time_list[2])
  12. return int(run_time)
  13. def parse_mopidy_uri(uri: str) -> dict:
  14. logger.debug(f"Parsing URI: {uri}")
  15. parsed_uri = uri.split('/')
  16. episode_str = unquote(parsed_uri.pop(-1).strip(".mp3"))
  17. podcast_str = unquote(parsed_uri.pop(-1))
  18. possible_date_str = episode_str[0:10]
  19. try:
  20. pub_date = parse(possible_date_str)
  21. except ParserError:
  22. pub_date = ""
  23. logger.debug(f"Found pub date {pub_date} from Mopidy URI")
  24. try:
  25. if pub_date:
  26. episode_num = int(episode_str.split('-')[3])
  27. else:
  28. episode_num = int(episode_str.split('-')[0])
  29. except IndexError:
  30. episode_num = None
  31. except ValueError:
  32. episode_num = None
  33. logger.debug(f"Found episode num {episode_num} from Mopidy URI")
  34. if pub_date:
  35. episode_str = episode_str.strip(episode_str[:11])
  36. if type(episode_num) is int:
  37. episode_num_gap = len(str(episode_num)) + 1
  38. episode_str = episode_str.strip(episode_str[:episode_num_gap])
  39. episode_str = episode_str.replace('-', ' ')
  40. logger.debug(f"Found episode name {episode_str} from Mopidy URI")
  41. return {
  42. 'episode_filename': episode_str,
  43. 'episode_num': episode_num,
  44. 'podcast_name': podcast_str,
  45. 'pub_date': pub_date,
  46. }