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)
Exemple #3
0
 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
Exemple #4
0
    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
Exemple #5
0
 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
Exemple #7
0
    # 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()
Exemple #8
0
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")