def reload(self): self._list = [] db = eMediaDatabase.getInstance() res = None if self._id < 0: #no @staticmethod get() used, probably.... self._valid = False self.listChanged() Log.w("A Playlist with the name/id %s/%s does not exist!" %(self._name, self._id)) return res = db.getPlaylistItemsById(self._id) if res and not res.error(): for data in res.data(): data = dict(data) file_uri = data.get(eMediaDatabase.FIELD_FILE_URI, None) if not file_uri: Log.w("Playlist entry invalid, %s" % data) continue if file_uri.endswith('.ts'): ref = eServiceReference(eServiceReference.idDVB, 0, file_uri) elif file_uri.endswith('.m2ts'): ref = eServiceReference(3, 0, file_uri) else: ref = eServiceReference(eServiceReference.idGST, 0, file_uri) self.add(ref, data, True) self._valid = True else: Log.i("Error loading playlist %s:%s\n%s\n%s" % (self._id, self._name, res.errorDatabaseText(), res.errorDriverText())) self._valid = False self.listChanged()
def save(self): #c-ify vector = StringMapVector() pos = 1 for item in self._list: item = item[2] stringMap = StringMap() for k, v in item.iteritems(): stringMap[k] = str(v) stringMap[eMediaDatabase.FIELD_POS] = str(pos) pos += 1 vector.append(stringMap) db = eMediaDatabase.getInstance() res = db.savePlaylist(self._id, self._name, self._type, vector) error = res.error() if error: Log.w("Error saving playlist %s\n%s\n%s" % (self._id, res.errorDatabaseText(), res.errorDriverText())) return not error #if self._id <= 0: data = res.data() self._id = -1 if data and len(data) > 0: self._id = int(res.data()[0].get(eMediaDatabase.FIELD_ID, -1)) if self._id == -1: error = True self._valid = not error if not error: Log.i("Playlist '%s (%s)' saved" %(self._name, self._id)) else: Log.w("Error saving playlist!") return not error
def __init__(self, session): Screen.__init__(self, session) self["list"] = List([], enableWrapAround=True) self["key_red"] = Button(_("Remove")) self["key_green"] = Button(_("Add")) self["key_yellow"] = Button(_("Reset")) self["key_blue"] = Button(_("Rescan")) self["status"] = Label(_("waiting for statistics...")) # Background for Buttons self["red"] = Pixmap() self["green"] = Pixmap() self["yellow"] = Pixmap() self["blue"] = Pixmap() self._db = eMediaDatabase.getInstance() self["actions"] = ActionMap(["OkCancelActions", "ColorActions"], { "ok" : self._ok, "cancel" : self.close, "red" : self._red, "green" : self._green, "yellow" : self._yellow, "blue" : self._blue }, -2) self._db_scanStatistics_conn = self._db.scanStatistics.connect(self._onScanStatistics) self._db_scanFinished_conn = self._db.scanFinished.connect(self._onScanFinished) self._db_insertFinished_conn = self._db.insertFinished.connect(self._onInsertFinished) self.onLayoutFinish.append(self._onLayoutFinish) self.onClose.append(self._onClose)
def get(id=-1, name=None, type=MediaCore.TYPE_AUDIO, create=False): # If we'er called with only the name given we'll try to get the id. # If we cannot find a matching playlist, we return None db = eMediaDatabase.getInstance() if id < 0: res = db.getPlaylistByName(name, type) else: res = db.getPlaylist(id) if res.error( ) or not res.data(): #Playlist unkown (not yet saved/created!) Log.w("%s / %s" % (res.errorDatabaseText(), res.errorDriverText())) if create: Log.i("creating new playlist") return DatabasePlaylist.create(name, type) else: Log.w("Unkown Playlist for id=%s, name=%s and type=%s" % (id, name, type)) return None data = res.data()[0] id = int(data[eMediaDatabase.FIELD_ID]) name = data[eMediaDatabase.FIELD_NAME] Log.i("Playlist %s found. Id is %s" % (name, id)) playlist = DatabasePlaylist(id, name=name, type=type) playlist.reload() return playlist
def __init__(self, session): Screen.__init__(self, session) self["list"] = List([], enableWrapAround=True) self["key_red"] = Button(_("Remove")) self["key_green"] = Button(_("Add")) self["key_yellow"] = Button("") self["key_blue"] = Button(_("Rescan")) self["status"] = Label(_("waiting for statistics...")) # Background for Buttons self["red"] = Pixmap() self["green"] = Pixmap() self["yellow"] = Pixmap() self["blue"] = Pixmap() self._db = eMediaDatabase.getInstance() self["actions"] = ActionMap( ["OkCancelActions", "ColorActions"], { "ok": self._ok, "cancel": self.close, "red": self._red, "green": self._green, "yellow": self._yellow, "blue": self._blue }, -2) self._db_scanStatistics_conn = self._db.scanStatistics.connect( self._onScanStatistics) self._db_scanFinished_conn = self._db.scanFinished.connect( self._onScanFinished) self._db_insertFinished_conn = self._db.insertFinished.connect( self._onInsertFinished) self.onLayoutFinish.append(self._onLayoutFinish) self.onClose.append(self._onClose)
def getPlaylists(type=MediaCore.TYPE_AUDIO): Log.i("") res = eMediaDatabase.getInstance().getPlaylists(type) playlists = [] if res: for item in res.data(): playlists.append(( DatabasePlaylist( int(item[eMediaDatabase.FIELD_ID]), name=item[eMediaDatabase.FIELD_PLAYLIST_NAME], type=int(item[eMediaDatabase.FIELD_TYPE]) ) )) return playlists
def create(name, type=MediaCore.TYPE_AUDIO): Log.i("name=%s, type=%s" %(name, type)) db = eMediaDatabase.getInstance() res = db.getPlaylistByName(name, type) if not res or res.error() or res.data(): Log.w("%s / %s / %s" %(res.data(), res.errorDatabaseText(), res.errorDriverText())) return None playlist = DatabasePlaylist(-1, name=name, type=type) playlist.save() return playlist
def search(needle): db = eMediaDatabase.getInstance() res = db.filterAudio(needle, 0, 250) if res.error(): return [] items = [] for item in res.data(): filename = "%s/%s" %(item[eMediaDatabase.FIELD_PATH], item[eMediaDatabase.FIELD_FILENAME]) ref = eServiceReference(4097, 0, filename) ref.setName("%s - %s" %(item[eMediaDatabase.FIELD_ARTIST], item[eMediaDatabase.FIELD_TITLE])) items.append( (ref.getName(), (ref, dict(item))) ) return items
def __init__(self, server, *args, **kwargs): AbstractBackendStore.__init__(self, server, **kwargs) self._db = eMediaDatabase.getInstance() self.next_id = 1000 self.name = kwargs.get('name', 'Dreambox Mediaserver') # streaminghost is the ip address of the dreambox machine, defaults to localhost self.streaminghost = kwargs.get('streaminghost', self.server.coherence.hostname) self.refresh = float(kwargs.get('refresh', 1)) * 60 self.init_root() self.init_completed()
def getDetailsByRef(self, ref): path = ref.getPath() #if we get only a reference or an entry with "extra data" but no file id yet we ask the database to enrich the data if path.startswith("/"): Log.i("Asking database for details!") db = eMediaDatabase.getInstance() res = db.getFileByPath(path) if res and res.data() and not res.error() : return dict(res.data()[0]) else: Log.i("ERROR: %s :: %s" %(res.errorDatabaseText(), res.errorDriverText())) else: Log.i("%s is not an absolute local path, skip querying the database" % path) return None
def __init__(self, server, *args, **kwargs): AbstractBackendStore.__init__(self, server, **kwargs) self._db = eMediaDatabase.getInstance() self.next_id = 1000 self.name = kwargs.get('name', 'Dreambox Mediaserver') # streaminghost is the ip address of the dreambox machine, defaults to localhost self.streaminghost = kwargs.get('streaminghost', self.server.coherence.hostname) self.refresh = float(kwargs.get('refresh', 1)) * 60 self.init_root() self.init_completed() self._cover_root = None
def __init__(self, root, list_type=None, sort_type=None, descr_state=None): TemplatedMultiContentComponent.__init__(self) self.virtualList = [] self.list = [] self._vlist = [] self.descr_state = descr_state or self.HIDE_DESCRIPTION self.sort_type = sort_type or self.SORT_RECORDED self.setListType(list_type or self.LISTTYPE_ORIGINAL) self.tags = set() self.root = root self.filter_tags = [] self.l.setBuildFunc(self.buildMovieListEntry) self.onSelectionChanged = [ ] self.__mediaDbScanFinished_conn = eMediaDatabase.getInstance().scanFinished.connect(self._onMediaDbScanFinished)
def search(needle): db = eMediaDatabase.getInstance() res = db.filterAudio(needle, 0, 250) if res.error(): return [] items = [] for item in res.data(): filename = "%s/%s" %(item[eMediaDatabase.FIELD_PATH], item[eMediaDatabase.FIELD_FILENAME]) if filename.endswith('.ts'): ref = eServiceReference(eServiceReference.idDVB, 0, filename) elif filename.endswith('.m2ts'): ref = eServiceReference(3, 0, filename) else: ref = eServiceReference(eServiceReference.idGST, 0, filename) ref.setName("%s - %s" %(item[eMediaDatabase.FIELD_ARTIST], item[eMediaDatabase.FIELD_TITLE])) items.append( (ref.getName(), (ref, dict(item))) ) return items
def get(ref, state, data, coverSize=eSize(300,300)): artist = data.get(eMediaDatabase.FIELD_ARTIST, "") title = data.get(eMediaDatabase.FIELD_TITLE, "") album = data.get(eMediaDatabase.FIELD_ALBUM, "") seconds = int(data.get(eMediaDatabase.FIELD_DURATION, 0)) cover_art_id = int(data.get(eMediaDatabase.FIELD_COVER_ART_ID, 0)) cover_art = DefaultCoverArt cover = None if cover_art_id: cover = eMediaDatabase.getInstance().getCoverArt(cover_art_id, coverSize) if cover: cover_art = cover if seconds > 0: minutes, seconds = divmod(seconds, 60) duration = "%02d:%02d" % (minutes, seconds) else: duration = "--:--" entry = (data, "", title, artist, album, duration, cover_art) entry = AudioPlaylistEntry.updateState(entry, state) return entry
def get(ref, state, data): artist = data.get(eMediaDatabase.FIELD_ARTIST, "") title = data.get(eMediaDatabase.FIELD_TITLE, "") album = data.get(eMediaDatabase.FIELD_ALBUM, "") seconds = int(data.get(eMediaDatabase.FIELD_DURATION, 0)) cover_art_id = int(data.get(eMediaDatabase.FIELD_COVER_ART_ID, 0)) cover_art = DefaultCoverArt cover = None if cover_art_id: cover = eMediaDatabase.getInstance().getCoverArt(cover_art_id) if cover: cover_art = cover if seconds > 0: minutes, seconds = divmod(seconds, 60) duration = "%02d:%02d" % (minutes, seconds) else: duration = "--:--" entry = (data, "", title, artist, album, duration, cover_art) entry = AudioPlaylistEntry.updateState(entry, state) return entry
def get(id=-1, name=None, type=MediaCore.TYPE_AUDIO, create=False): # If we'er called with only the name given we'll try to get the id. # If we cannot find a matching playlist, we return None db = eMediaDatabase.getInstance() if id < 0: res = db.getPlaylistByName(name, type) else: res = db.getPlaylist(id) if res.error() or not res.data(): #Playlist unkown (not yet saved/created!) Log.w("%s / %s" %(res.errorDatabaseText(), res.errorDriverText())) if create: Log.i("creating new playlist") return DatabasePlaylist.create(name, type) else: Log.w("Unkown Playlist for id=%s, name=%s and type=%s" %(id, name, type)) return None data = res.data()[0] id = int(data[eMediaDatabase.FIELD_ID]) name = data[eMediaDatabase.FIELD_NAME] Log.i("Playlist %s found. Id is %s" %(name, id)) playlist = DatabasePlaylist(id, name=name, type=type) playlist.reload() return playlist
def __init__(self, type): MenuList.__init__(self, [], True, eListboxPythonMultiContent) MediaBrowserList.__init__(self, type) tlf = TemplatedListFonts() self.l.setFont(0, gFont(tlf.face(tlf.MEDIUM), tlf.size(tlf.MEDIUM))) itemHeight = componentSizes.itemHeight(componentSizes.FILE_LIST, 30) self.l.setItemHeight(itemHeight) self.l.setBuildFunc(self._buildListEntry) self._db = eMediaDatabase.getInstance() self._rootHandle = RootNavigationHandle(self._navRoot) if type == MediaCore.TYPE_AUDIO: #Artist -> Album -> Titles self._artistHandle = NavigationHandle(self.__getArtists, [eMediaDatabase.FIELD_ARTIST]) self._artistAlbumHandle = NavigationHandle(self.__getAlbumsByArtist, [eMediaDatabase.FIELD_ARTIST, eMediaDatabase.FIELD_ALBUM]) self._artistAllHandle = NavigationHandle(self.__filterByArtist, [eMediaDatabase.FIELD_ARTIST, eMediaDatabase.FIELD_ALBUM, eMediaDatabase.FIELD_TITLE]) self._artistAlbumTitleHandle = NavigationHandle(self.__filterByArtistAlbum, [eMediaDatabase.FIELD_ARTIST, eMediaDatabase.FIELD_TITLE]) self._artistHandle.link(desc=self._artistAlbumHandle, asc=self._rootHandle) self._artistAlbumHandle.link(desc=self._artistAlbumTitleHandle, asc=self._artistHandle, all=self._artistAllHandle) self._artistAllHandle.link(asc=self._artistAlbumHandle) self._artistAlbumTitleHandle.link(asc=self._artistAlbumHandle) #Album -> Titles self._albumHandle = NavigationHandle(self.__getAllAlbums, [eMediaDatabase.FIELD_ARTIST, eMediaDatabase.FIELD_ALBUM]) self._albumTitleHandle = NavigationHandle(self.__filterByArtistAlbum, [eMediaDatabase.FIELD_ARTIST, eMediaDatabase.FIELD_TITLE]) self._albumHandle.link(desc=self._albumTitleHandle, asc=self._rootHandle) self._albumTitleHandle.link(asc=self._albumHandle) #AlbumArtist -> Album -> Titles self._albumArtistHandle = NavigationHandle(self.__getAlbumArtists, [eMediaDatabase.FIELD_ARTIST]) self._albumArtistAlbumHandle = NavigationHandle(self.__getAlbumsByAlbumArtist, [eMediaDatabase.FIELD_ALBUM_ARTIST, eMediaDatabase.FIELD_ALBUM]) self._albumArtistAllHandle = NavigationHandle(self.__filterByAlbumArtist, [eMediaDatabase.FIELD_ARTIST, eMediaDatabase.FIELD_ALBUM, eMediaDatabase.FIELD_TITLE]) self._albumArtistAlbumTitleHandle = NavigationHandle(self.__filterByAlbumArtistAlbum, [eMediaDatabase.FIELD_ARTIST, eMediaDatabase.FIELD_TITLE]) self._albumArtistHandle.link(desc=self._albumArtistAlbumHandle, asc=self._rootHandle) self._albumArtistAlbumHandle.link(desc=self._albumArtistAlbumTitleHandle, asc=self._albumArtistHandle, all=self._albumArtistAllHandle) self._albumArtistAllHandle.link(asc=self._albumArtistAlbumHandle) self._albumArtistAlbumTitleHandle.link(asc=self._albumArtistAlbumHandle) #All self._allHandle = NavigationHandle(self.__getAll, [eMediaDatabase.FIELD_ARTIST, eMediaDatabase.FIELD_ALBUM, eMediaDatabase.FIELD_TITLE]) self._allHandle.link(asc=self._rootHandle) #set navigation handle items self._navitems = [{ ITEM_KEY_TITLE : _("Artists"), ITEM_KEY_HANDLE: self._artistHandle, }, { ITEM_KEY_TITLE : _("Albums"), ITEM_KEY_HANDLE: self._albumHandle, }, { ITEM_KEY_TITLE : _("Album Artists"), ITEM_KEY_HANDLE: self._albumArtistHandle, }, { ITEM_KEY_TITLE : _("All"), ITEM_KEY_HANDLE: self._allHandle, }] elif type == MediaCore.TYPE_VIDEO: self._recordingHandle = NavigationHandle(self.__getAllRecordings, [eMediaDatabase.FIELD_TITLE]) self._allVideoHandle = NavigationHandle(self.__getAllVideos, [eMediaDatabase.FIELD_TITLE]) self._unseenVideoHandle = NavigationHandle(self.__getUnseenVideos, [eMediaDatabase.FIELD_TITLE]) self._hdVideoHandle = NavigationHandle(self.__getHDVideos, [eMediaDatabase.FIELD_TITLE]) self._sdVideoHandle = NavigationHandle(self.__getSDVideos, [eMediaDatabase.FIELD_TITLE]) self._recordingHandle.link(asc=self._rootHandle) self._allVideoHandle.link(asc=self._rootHandle) self._unseenVideoHandle.link(asc=self._rootHandle) self._hdVideoHandle.link(asc=self._rootHandle) self._sdVideoHandle.link(asc=self._rootHandle) self._navitems = [{ ITEM_KEY_TITLE : _("Unseen"), ITEM_KEY_HANDLE: self._unseenVideoHandle, }, { ITEM_KEY_TITLE : _("Recordings"), ITEM_KEY_HANDLE: self._recordingHandle, }, { ITEM_KEY_TITLE : _("All Videos"), ITEM_KEY_HANDLE: self._allVideoHandle, }, { ITEM_KEY_TITLE : _("Only HD"), ITEM_KEY_HANDLE: self._hdVideoHandle, }, { ITEM_KEY_TITLE : _("Only SD"), ITEM_KEY_HANDLE: self._sdVideoHandle, },] self.__currentNavHandle = self._rootHandle self.__prevNavHandle = None self._currentHandleItem = None self.__getFolderContent = None
def __init__(self, type): MenuList.__init__(self, [], True, eListboxPythonMultiContent) MediaBrowserList.__init__(self, type) self.l.setFont(0, gFont("Regular", 18)) self.l.setItemHeight(30) self.l.setBuildFunc(self._buildListEntry) self._db = eMediaDatabase.getInstance() self._rootHandle = RootNavigationHandle(self._navRoot) if type == MediaCore.TYPE_AUDIO: #Artist -> Album -> Titles self._artistHandle = NavigationHandle(self.__getArtists, [eMediaDatabase.FIELD_ARTIST]) self._artistAlbumHandle = NavigationHandle(self.__getAlbumsByArtist, [eMediaDatabase.FIELD_ARTIST, eMediaDatabase.FIELD_ALBUM]) self._artistAllHandle = NavigationHandle(self.__filterByArtist, [eMediaDatabase.FIELD_ARTIST, eMediaDatabase.FIELD_ALBUM, eMediaDatabase.FIELD_TITLE]) self._artistAlbumTitleHandle = NavigationHandle(self.__filterByArtistAlbum, [eMediaDatabase.FIELD_ARTIST, eMediaDatabase.FIELD_TITLE]) self._artistHandle.link(desc=self._artistAlbumHandle, asc=self._rootHandle) self._artistAlbumHandle.link(desc=self._artistAlbumTitleHandle, asc=self._artistHandle, all=self._artistAllHandle) self._artistAllHandle.link(asc=self._artistAlbumHandle) self._artistAlbumTitleHandle.link(asc=self._artistAlbumHandle) #Album -> Titles self._albumHandle = NavigationHandle(self.__getAllAlbums, [eMediaDatabase.FIELD_ARTIST, eMediaDatabase.FIELD_ALBUM]) self._albumTitleHandle = NavigationHandle(self.__filterByArtistAlbum, [eMediaDatabase.FIELD_ARTIST, eMediaDatabase.FIELD_TITLE]) self._albumHandle.link(desc=self._albumTitleHandle, asc=self._rootHandle) self._albumTitleHandle.link(asc=self._albumHandle) #All self._allHandle = NavigationHandle(self.__getAll, [eMediaDatabase.FIELD_ARTIST, eMediaDatabase.FIELD_ALBUM, eMediaDatabase.FIELD_TITLE]) self._allHandle.link(asc=self._rootHandle) #set navigation handle items self._navitems = [{ ITEM_KEY_TITLE : _("Artists"), ITEM_KEY_HANDLE: self._artistHandle, }, { ITEM_KEY_TITLE : _("Albums"), ITEM_KEY_HANDLE: self._albumHandle, }, { ITEM_KEY_TITLE : _("All"), ITEM_KEY_HANDLE: self._allHandle, }] elif type == MediaCore.TYPE_VIDEO: self._recordingHandle = NavigationHandle(self.__getAllRecordings, [eMediaDatabase.FIELD_TITLE]) self._allVideoHandle = NavigationHandle(self.__getAllVideos, [eMediaDatabase.FIELD_TITLE]) self._unseenVideoHandle = NavigationHandle(self.__getUnseenVideos, [eMediaDatabase.FIELD_TITLE]) self._hdVideoHandle = NavigationHandle(self.__getHDVideos, [eMediaDatabase.FIELD_TITLE]) self._sdVideoHandle = NavigationHandle(self.__getSDVideos, [eMediaDatabase.FIELD_TITLE]) self._recordingHandle.link(asc=self._rootHandle) self._allVideoHandle.link(asc=self._rootHandle) self._unseenVideoHandle.link(asc=self._rootHandle) self._hdVideoHandle.link(asc=self._rootHandle) self._sdVideoHandle.link(asc=self._rootHandle) self._navitems = [{ ITEM_KEY_TITLE : _("Unseen"), ITEM_KEY_HANDLE: self._unseenVideoHandle, }, { ITEM_KEY_TITLE : _("Recordings"), ITEM_KEY_HANDLE: self._recordingHandle, }, { ITEM_KEY_TITLE : _("All Videos"), ITEM_KEY_HANDLE: self._allVideoHandle, }, { ITEM_KEY_TITLE : _("Only HD"), ITEM_KEY_HANDLE: self._hdVideoHandle, }, { ITEM_KEY_TITLE : _("Only SD"), ITEM_KEY_HANDLE: self._sdVideoHandle, },] self.__currentNavHandle = self._rootHandle self.__prevNavHandle = None self._currentHandleItem = None self.__getFolderContent = None
def __init__(self, path): resource.Resource.__init__(self) self.noResource = resource.NoResource(message=_("Nothing there!")) self._path = path self._db = eMediaDatabase.getInstance()
def reload(self, root = None, filter_tags = None): root = root or self.root if root and config.media_database.readmeta.value: eMediaDatabase.getInstance().rescanPath(root.getPath(), True) self.load(root, filter_tags) self.l.setList(self.list)