diff --git a/plexpy/notification_handler.py b/plexpy/notification_handler.py index b6972268..a7336a30 100644 --- a/plexpy/notification_handler.py +++ b/plexpy/notification_handler.py @@ -18,6 +18,7 @@ from __future__ import division from __future__ import unicode_literals +from typing import Optional from future.builtins import next from future.builtins import map from future.builtins import str @@ -1006,21 +1007,21 @@ def build_media_notify_params(notify_action=None, session=None, timeline=None, m 'product': notify_params['product'], 'player': notify_params['player'], 'ip_address': notify_params.get('ip_address', 'N/A'), - 'started_datestamp': arrow.get(notify_params['started']).format(date_format) if notify_params['started'] else '', - 'started_timestamp': arrow.get(notify_params['started']).format(time_format) if notify_params['started'] else '', + 'started_datestamp': CustomArrow(arrow.get(notify_params['started']), date_format) if notify_params['started'] else '', + 'started_timestamp': CustomArrow(arrow.get(notify_params['started']), time_format) if notify_params['started'] else '', 'started_unixtime': notify_params['started'], - 'stopped_datestamp': arrow.get(notify_params['stopped']).format(date_format) if notify_params['stopped'] else '', - 'stopped_timestamp': arrow.get(notify_params['stopped']).format(time_format) if notify_params['stopped'] else '', + 'stopped_datestamp': CustomArrow(arrow.get(notify_params['stopped']), date_format) if notify_params['stopped'] else '', + 'stopped_timestamp': CustomArrow(arrow.get(notify_params['stopped']), time_format) if notify_params['stopped'] else '', 'stopped_unixtime': notify_params['stopped'], 'stream_duration': stream_duration, 'stream_duration_sec': stream_duration_sec, - 'stream_time': arrow.get(stream_duration_sec).format(duration_format), + 'stream_time': CustomArrow(arrow.get(stream_duration_sec), duration_format), 'remaining_duration': remaining_duration, 'remaining_duration_sec': remaining_duration_sec, - 'remaining_time': arrow.get(remaining_duration_sec).format(duration_format), + 'remaining_time': CustomArrow(arrow.get(remaining_duration_sec), duration_format), 'progress_duration': progress_duration, 'progress_duration_sec': progress_duration_sec, - 'progress_time': arrow.get(progress_duration_sec).format(duration_format), + 'progress_time': CustomArrow(arrow.get(progress_duration_sec), duration_format), 'progress_percent': helpers.get_percent(progress_duration_sec, duration_sec), 'view_offset': session.get('view_offset', 0), 'initial_stream': notify_params['initial_stream'], @@ -1128,15 +1129,15 @@ def build_media_notify_params(notify_action=None, session=None, timeline=None, m 'track_count': grandchild_count, 'year': notify_params['year'], 'show_year': show_year, - 'release_date': arrow.get(notify_params['originally_available_at']).format(date_format) + 'release_date': CustomArrow(arrow.get(notify_params['originally_available_at']), date_format) if notify_params['originally_available_at'] else '', - 'air_date': arrow.get(notify_params['originally_available_at']).format(date_format) + 'air_date': CustomArrow(arrow.get(notify_params['originally_available_at']), date_format) if notify_params['originally_available_at'] else '', - 'added_date': arrow.get(int(notify_params['added_at'])).format(date_format) + 'added_date': CustomArrow(arrow.get(int(notify_params['added_at'])), date_format) if notify_params['added_at'] else '', - 'updated_date': arrow.get(int(notify_params['updated_at'])).format(date_format) + 'updated_date': CustomArrow(arrow.get(int(notify_params['updated_at'])), date_format) if notify_params['updated_at'] else '', - 'last_viewed_date': arrow.get(int(notify_params['last_viewed_at'])).format(date_format) + 'last_viewed_date': CustomArrow(arrow.get(int(notify_params['last_viewed_at'])), date_format) if notify_params['last_viewed_at'] else '', 'studio': notify_params['studio'], 'content_rating': notify_params['content_rating'], @@ -1155,7 +1156,7 @@ def build_media_notify_params(notify_action=None, session=None, timeline=None, m 'duration': duration, 'duration_sec': duration_sec, 'duration_ms': notify_params['duration'], - 'druation_time': arrow.get(duration_sec).format(duration_format), + 'druation_time': CustomArrow(arrow.get(duration_sec), duration_format), 'poster_title': notify_params['poster_title'], 'poster_url': notify_params['poster_url'], 'plex_id': notify_params['plex_id'], @@ -1292,7 +1293,7 @@ def build_server_notify_params(notify_action=None, **kwargs): # Plex Media Server update parameters 'update_version': pms_download_info['version'], 'update_url': pms_download_info['download_url'], - 'update_release_date': arrow.get(pms_download_info['release_date']).format(date_format) + 'update_release_date': CustomArrow(arrow.get(pms_download_info['release_date']), date_format) if pms_download_info['release_date'] else '', 'update_channel': 'Beta' if update_channel == 'beta' else 'Public', 'update_platform': pms_download_info['platform'], @@ -2095,3 +2096,21 @@ class CustomFormatter(Formatter): return ''.join(result) else: return ''.join(result), auto_arg_index + + +class CustomArrow: + def __init__(self, arrow_value: arrow.arrow.Arrow, default_format: Optional[str] = None): + self.arrow_value = arrow_value + self.default_format = default_format + + def __format__(self, formatstr: str) -> str: + if len(formatstr) > 0: + return self.arrow_value.format(formatstr) + + if self.default_format is not None: + return self.__format__(self.default_format) + + return str(self.arrow_value) + + def __str__(self) -> str: + return self.__format__('')