tidalf/plugin.audio.qobuz

View on GitHub
resources/lib/qobuz/service/monitor.py

Summary

Maintainability
A
0 mins
Test Coverage
'''
    qobuz.service.monitor
    ~~~~~~~~~~~~~~~~~~~~~

    :part_of: kodi-qobuz
    :copyright: (c) 2012-2018 by Joachim Basmaison, Cyril Leclerc
    :license: GPLv3, see LICENSE for more details.
'''
# import os
# import sys
# from time import time
# import xbmcaddon
# import xbmcgui
# import xbmc

# pluginId = 'plugin.audio.qobuz'
# __addon__ = xbmcaddon.Addon(id=pluginId)
# __addonversion__ = __addon__.getAddonInfo('version')
# __addonid__ = __addon__.getAddonInfo('id')
# __cwd__ = __addon__.getAddonInfo('path')
# dbg = True
# addonDir = __addon__.getAddonInfo('path')
# libDir = xbmc.translatePath(os.path.join(addonDir, 'resources', 'lib'))
# qobuzDir = xbmc.translatePath(os.path.join(libDir, 'qobuz'))
# sys.path.append(libDir)
# sys.path.append(qobuzDir)

# from bootstrap import QobuzBootstrap
# from api import api
# import threading
# from cache import cache
# from cache.cacheutil import clean_old
# keyTrackId = 'QobuzPlayerTrackId'
# keyMonitoredTrackId = 'QobuzPlayerMonitoredTrackId'


# class MyPlayer(xbmc.Player):
#     def __init__(self, *args, **kwargs):
#         xbmc.Player.__init__(self)
#         self.trackId = None
#         self.lock = threading.Lock()

#     @classmethod
#     def playlist(cls):
#         return xbmc.PlayList(0)

#     def getProperty(self, key):
#         """Wrapper to retrieve property from Xbmc Main Window
#             Parameter:
#                 key: string, property that you want to get
#             * Lock may be useless ...
#         """
#         try:
#             if not self.lock.acquire(5):
#                 warn(self, "getProperty: Cannot acquire lock!")
#                 return ''
#             return xbmcgui.Window(10000).getProperty(key)
#         finally:
#             self.lock.release()

#     def setProperty(self, key, value):
#         """Wrapper to set Xbmc Main window property
#             Parameter:
#                 key: string, property name to set
#                 value: string, value to set
#         """
#         try:
#             if not self.lock.acquire(5):
#                 warn(self, "setProperty: Cannot acquire lock!")
#                 return
#             xbmcgui.Window(10000).setProperty(key, value)
#         finally:
#             self.lock.release()

#     def onPlayBackEnded(self):
#         nid = self.getProperty(keyTrackId)
#         warn(self, "play back ended from monitor !!!!!!" + nid)
#         return True

#     def onPlayBackStopped(self):
#         nid = self.getProperty(keyTrackId)
#         warn(self, "play back stopped from monitor !!!!!!" + nid)
#         return True

#     def onPlayBackStarted(self):
#         # workaroung bug, we are sometimes called multiple times.
#         if self.trackId:
#             if self.getProperty(keyTrackId) != self.trackId:
#                 self.trackId = None
#             else:
#                 warn(self, "Already monitoring song id: %s" % (self.trackId))
#                 return False
#         nid = self.getProperty(keyTrackId)
#         if not nid:
#             warn(self, "No track id set by the player...")
#             return False
#         self.trackId = nid
#         elapsed = 0
#         while elapsed <= 10:
#             if not self.isPlayingAudio():
#                 self.trackId = None
#                 return False
#             if self.getProperty(keyTrackId) != self.trackId:
#                 self.trackId = None
#                 return False
#             elapsed += 1
#             xbmc.sleep(1000)
#         api.track_resportStreamingStart(nid)
#         self.trackId = None
#         return False


# class Monitor(xbmc.Monitor):
#     def __init__(self):
#         super(Monitor, self).__init__()
#         self.abortRequested = False
#         self.garbage_refresh = 60
#         self.last_garbage_on = time() - (self.garbage_refresh + 1)

#     def onAbortRequested(self):
#         self.abortRequested = True

#     @classmethod
#     def onDatabaseUpdated(cls, database):
#         import sqlite3 as lite
#         if database != 'music':
#             return 0
#         dbver = ""
#         if xbmcaddon.Addon('xbmc.addon').getAddonInfo('version') == "12.0.0":
#             dbver = "MyMusic32.db"
#         else:
#             dbver = "MyMusic37.db"
#         dbfile = os.path.join(
#             xbmc.translatePath('special://profile/'), "Database", dbver)
#         try:
#             con = lite.connect(dbfile)
#             cur = con.cursor()
#             cur.execute('SELECT DISTINCT(IdAlbum), comment from song')
#             data = cur.fetchall()
#             for line in data:
#                 musicdb_idAlbum = line[0]
#                 import re
#                 try:
#                     curl = re.search(u'curl=(.*)\)', line[1]).group(1)
#                 except:
#                     continue
#                 sqlcmd = "SELECT rowid from art WHERE media_id=?"
#                 data2 = None
#                 try:
#                     cur.execute(sqlcmd, str(musicdb_idAlbum))
#                     data2 = cur.fetchone()
#                 except:
#                     pass
#                 if data2 is None:
#                     sqlcmd2 = str("INSERT INTO art VALUES ("
#                                   "NULL, (?) , 'album', 'thumb', (?)"
#                                   ")")
#                     cur.execute(sqlcmd2, (str(musicdb_idAlbum), str(curl)))
#                     con.commit()
#         except lite.Error, e:
#             print "Error %s:" % e.args[0]
#             return -1
#         finally:
#             if con:
#                 con.commit()
#                 con.close()
#         return True

#     def is_garbage_time(self):
#         if time() > (self.last_garbage_on + self.garbage_refresh):
#             return True
#         return False

#     def isIdle(self, since=1):
#         try:
#             if xbmc.getGlobalIdleTime() >= since:
#                 return True
#             return False
#         except:
#             return False

#     def cache_remove_old(self, **ka):
#         self.last_garbage_on = time()
#         clean_old(cache)

#     def onSettingsChanged(self):
#         pass


# boot = QobuzBootstrap(__addon__, 0)
# logLabel = 'QobuzMonitor'
# import pprint
# try:
#     boot.bootstrap_app()
#     monitor = Monitor()
#     player = MyPlayer()
#     alive = True
#     while alive:
#         alive = False
#         try:
#             alive = not monitor.abortRequested
#         except Exception as e:
#             print "Exception while getting abortRequested..."
#             raise e
#         if not alive:
#             break
#         if monitor.isIdle(60) and monitor.is_garbage_time():
#             log(logLabel, 'Periodic cleaning...')
#             monitor.cache_remove_old(limit=20)
#         xbmc.sleep(1000)
#     print '[%s] Exiting... bye!' % (logLabel)
# except Exception as e:
#     print '[%s] Exiting monitor' % (pluginId)
#     print 'Exception: %s' % (pprint.pformat(e))