def __init__(self, dbFile=None, build=True): if not dbFile: self.__dbFile = SettingsProvider.get_instance().readsetting( 'dbfile') else: self.__dbFile = dbFile logging.debug('[DBUTILS] Opening db %s' % (self.__dbFile)) if build: buildDb(async=False) # Run in current thread
def __init__(self, handler, certFile=None, port=None): if not certFile: certFile = SettingsProvider.get_instance().readsetting( 'httpscertpath') if not port: port = int( SettingsProvider.get_instance().readsetting('listenporthttps')) HTTPServer.__init__( self, ('0.0.0.0', port), handler, ) SimpleXMLRPCServer.__init__(self, ('0.0.0.0', port), handler, allow_none=True) self.socket = ssl.wrap_socket(self.socket, server_side=True, certfile=certFile, keyfile=certFile, ssl_version=ssl.PROTOCOL_SSLv23)
def getm3ufromplaylist(self, name, myremoteip): res = '#EXTM3U\n' playlist = self._dm.getplaylist(name) if not playlist: return None songs = playlist.songs for songid in songs: song = self._dm.getsong(songid) if song: res += '#EXTINF:%d, %s - %s\n' % (song.oid, song.artist, song.title) res += 'http://%s:%s/getsong?id=%d\n' % ( myremoteip, SettingsProvider.get_instance().readsetting('listenporthttp'), songid) return res
def getm3ufromfolder(self, folderid, myremoteip, recursive=False, header=True): res = '#EXTM3U\n' if header else '' songs = self._dm.listsongsinto(folderid) for song in songs: res += '#EXTINF:%d, %s - %s\n' % (song.oid, song.artist, song.title) res += 'http://%s:%s/getsong?id=%d\n' % ( myremoteip, SettingsProvider.get_instance().readsetting('listenporthttp'), song.oid) if recursive: folders = self._dm.listfoldersinto(folderid) for folder in folders: res += self.getm3ufromfolder(folder.oid, myremoteip, recursive, header=False) return res
def __init__(self): self._path = SettingsProvider.get_instance( ).readsetting('songbasepath') + '/' + str(datetime.date.today( ).year) + '/' + FolderManager.monthsstr[datetime.date.today().month]
def createHTTPServer(): server = ThreadedHTTPServer( ('0.0.0.0', int(SettingsProvider.get_instance().readsetting('listenporthttp'))), HttpHandler) return server
# deleting folder c.execute('DELETE FROM Folder WHERE rowid = ?', [folderid]) c.close() # ------------------------------------------------------------------------------ # Creates song database using basePath as root folder, on dbFile sqlite3 db # # basePath -> /shared/Musica <-- WITHOUT FINAL / # rootFolder -> /shared/ # First folder -> /shared/Musica # ------------------------------------------------------------------------------ def buildDb(basePath=None, dbFile=None, async=False): if not basePath: basePath = str(SettingsProvider.get_instance().readsetting('songbasepath')) if not dbFile: dbFile = SettingsProvider.get_instance().readsetting('dbfile') MUTEX.acquire() logging.debug('[DBBUILDER] Building %s database from %s...' % (dbFile, basePath)) # Fix for path ending with / if basePath[-1:] == '/': basePath = basePath[:-1] conn = sqlite3.connect(dbFile) createDb(conn) conn.commit()
def main(): parse_arguments() logging.info('PyMusicServer3 %s Marco Panato - %s' % (globals.REVISION, globals.DATE)) logging.info('[MAIN] Loading settings') SettingsProvider.get_instance() logging.info('[MAIN] Initializing DbManager') DbManager.get_instance() logging.info('[MAIN] Initializing DataManager') DataManager.get_instance() logging.info('[MAIN] Initializing MusicManager') PyMusicManager.get_instance() logging.info('[MAIN] Initializing youtube-dl updater') ydlupdater = YoutubeDlUpdater() ydlupdater.start() logging.info('[MAIN] Creating HTTP frontend') httpfrontend = createHTTPServer() logging.info('[MAIN] Creating HTTPS frontend') httpsfrontend = createHTTPSServer() logging.info( '[MAIN] Waiting for clients on port %s and %s...' % (SettingsProvider.get_instance().readsetting('listenporthttp'), SettingsProvider.get_instance().readsetting('listenporthttps'))) threadhttp = runinanotherthread(httpfrontend.serve_forever) threadhttps = runinanotherthread(httpsfrontend.serve_forever) try: while True: sleep(500) except KeyboardInterrupt: logging.info("[MAIN] CTRL-C catched! Closing...") finally: logging.info("[MAIN] Closing server") httpfrontend.shutdown() httpsfrontend.shutdown() threadhttp.join(2) threadhttps.join(2) del httpfrontend del httpsfrontend logging.info('[MAIN] Closing youtube-dl updater') ydlupdater.stop() logging.info("[MAIN] Closing settings manager") SettingsProvider.del_instance() logging.info("[MAIN] Closing MusicManager") PyMusicManager.del_instance() logging.info("[MAIN] Closing DataManager") DataManager.del_instance() logging.info("[MAIN] Closing DbManager") DbManager.del_instance() logging.info("[MAIN] Bye")