#!/usr/bin/env python # -*- coding: utf-8 -*- from __future__ import absolute_import, division, unicode_literals from datetime import datetime, timedelta from time import localtime, strftime EPOCH = datetime.utcfromtimestamp(0) # What's the time offset between the PMS and Kodi? KODI_PLEX_TIME_OFFSET = 0.0 def unix_timestamp(seconds_into_the_future=None): """ Returns a Unix time stamp (seconds passed since January 1 1970) for NOW as an integer. Optionally, pass seconds_into_the_future: positive int's will result in a future timestamp, negative the past """ if seconds_into_the_future: future = datetime.utcnow() + timedelta(seconds=seconds_into_the_future) else: future = datetime.utcnow() return int((future - EPOCH).total_seconds()) def unix_date_to_kodi(unix_kodi_time): """ converts a Unix time stamp (seconds passed sinceJanuary 1 1970) to a propper, human-readable time stamp used by Kodi Output: Y-m-d h:m:s = 2009-04-05 23:16:04 """ return strftime('%Y-%m-%d %H:%M:%S', localtime(float(unix_kodi_time))) def plex_date_to_kodi(plex_timestamp): """ converts a Unix time stamp (seconds passed sinceJanuary 1 1970) to a propper, human-readable time stamp used by Kodi Output: Y-m-d h:m:s = 2009-04-05 23:16:04 """ return strftime('%Y-%m-%d %H:%M:%S', localtime(float(plex_timestamp) + KODI_PLEX_TIME_OFFSET)) def kodi_timestamp(plex_timestamp): return unix_date_to_kodi(plex_timestamp) def kodi_now(): return unix_date_to_kodi(unix_timestamp()) def millis_to_kodi_time(milliseconds): """ Converts time in milliseconds to the time dict used by the Kodi JSON RPC: { 'hours': [int], 'minutes': [int], 'seconds'[int], 'milliseconds': [int] } Pass in the time in milliseconds as an int """ seconds = int(milliseconds / 1000) minutes = int(seconds / 60) seconds = seconds % 60 hours = int(minutes / 60) minutes = minutes % 60 milliseconds = milliseconds % 1000 return {'hours': hours, 'minutes': minutes, 'seconds': seconds, 'milliseconds': milliseconds} def kodi_time_to_millis(time): """ Converts the Kodi time dict { 'hours': [int], 'minutes': [int], 'seconds'[int], 'milliseconds': [int] } to milliseconds [int]. Will not return negative results but 0! """ ret = (time['hours'] * 3600 + time['minutes'] * 60 + time['seconds']) * 1000 + time['milliseconds'] return 0 if ret < 0 else ret