I am using videodb as well Wrote a plugin to integrate on mysql level , still work in progress ( for over a year now :-) ) Any ideas help in making it more usable is welcome , i stuck in event processing so no search functionality yet Alex M [EMAIL PROTECTED] wrote: OK, i take a look into this.On Dec 3, 2007, at 2:23 PM, [EMAIL PROTECTED] wrote:- to offer an interface to store the data of each new movie (name, IDMB data, ...) and the disc id (entered by hand in some cases, i guess). - to offer an interface to seach in this database, ideally with text search by using a "on screen" keyboard, like on PDA or on the Wii. - then to perform a search against the database and to return the relevant items, with the associated disk ID (of course).I use VideoDB[1] for this type of catalog functionality, and I have written a couple of simple scripts to pull down cover images and generate .fxd files from my VideoDB database. You might look into using VideoDB yourself. I'd love to see some integration between Freevo and VideoDB, but honestly haven't had the time to write it myself. -Hasan [1] http://www.splitbrain.org/projects/videodb ------------------------------------------------------------------------- SF.Net email is sponsored by: The Future of Linux Business White Paper from Novell. From the desktop to the data center, Linux is going mainstream. Let it simplify your IT future. http://altfarm.mediaplex.com/ad/ck/8857-50307-18918-4 _______________________________________________ Freevo-devel mailing list Freevo-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/freevo-devel------------------------------------------------------------------------- SF.Net email is sponsored by: The Future of Linux Business White Paper from Novell. From the desktop to the data center, Linux is going mainstream. Let it simplify your IT future. http://altfarm.mediaplex.com/ad/ck/8857-50307-18918-4 _______________________________________________ Freevo-devel mailing list Freevo-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/freevo-devel |
# -*- coding: iso-8859-1 -*- # ----------------------------------------------------------------------- # appletrailers.py - Plugin for streaming trailers from apple.com # ----------------------------------------------------------------------- # # Notes: # Add "plugin.activate('video.appletrailers')" in local_conf.py # to activate # Todo: # # ----------------------------------------------------------------------- # Copyright (C) 2006 Pierre Ossman # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of MER- # CHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General # Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # ----------------------------------------------------------------------- #rating import os import re import config import plugin import menu import stat import time import string import util.fileops import util.misc from item import Item from video.videoitem import VideoItem from gui.ProgressBox import ProgressBox import MySQLdb import plugin _thumbs_dir = "/var/cache/freevo/videodb" _mysql_host="storage1" _mysql_user="videodb" _mysql_passwd="videodb" _mysql_db="videodb" cachedir = os.path.join(config.FREEVO_CACHEDIR, 'videodb') if not os.path.isdir(cachedir): os.mkdir(cachedir, stat.S_IMODE(os.stat(config.FREEVO_CACHEDIR)[stat.ST_MODE])) def _dbfetch(sqlstm): try: connection = MySQLdb.connect(_mysql_host, _mysql_user, _mysql_passwd, _mysql_db) cursor = connection.cursor() cursor.execute( sqlstm ) except MySQLdb.OperationalError, message: errorMessage = "Error %d:\n%s" % (message[ 0 ], message[ 1 ] ) print errorMessage return else: data = cursor.fetchall() fields = cursor.description cursor.close() connection.close() return data def FetchAssoc(sqlstm) : print "FetchAssoc:"+sqlstm+"\n" try: connection = MySQLdb.connect(_mysql_host, _mysql_user, _mysql_passwd, _mysql_db) cursor = connection.cursor() cursor.execute( sqlstm ) except MySQLdb.OperationalError, message: errorMessage = "Error %d:\n%s" % (message[ 0 ], message[ 1 ] ) print errorMessage return else: data = cursor.fetchall() if data == None : return None desc = cursor.description videos=[] for d in data: dict = {} for (name, value) in zip(desc, d) : dict[name[0]] = value videos.append(dict) return videos #-------------------------------------------------------- _vdb_by_genere = { 'type' : "vdb_movies", 'display_name' : "Browse by Title", 'menu_name' : "Choose a Title", 'sql_value' : "videodata.id,videodata.title,videodata.filename,videodata.plot,videodata.year,videodata.imgurl,videodata.custom2", 'sql' : "FROM videodata,videogenre,genres WHERE videodata.id=videogenre.video_id AND videogenre.genre_id=genres.id AND videodata.mediatype < 50 AND genres.name=", 'post_sql' : "ORDER BY videodata.title" } _vdb_geners = { 'type' : "sql_menu", 'display_name' : "Browse by Genre", 'menu_name' : "Choose a Genre", 'sql_value' : "name", 'sql' : "FROM genres", 'next' : _vdb_by_genere } #------------------------------------------------------- _vdb_by_year = { 'type' : "vdb_movies", 'display_name' : "Browse by Title", 'menu_name' : "Choose a Title", 'sql_value' : "id,title,filename,plot,year,imgurl,custom2", 'sql' : "FROM videodata WHERE mediatype < 50 AND year=", 'post_sql' : "ORDER BY title" } _vdb_years = { 'type' : "sql_menu", 'display_name' : "Browse by Year", 'menu_name' : "Choose a Year", 'sql_value' : "year", 'sql' : "FROM videodata where year > 0 GROUP BY year ORDER BY year DESC", 'next' : _vdb_by_year } #------------------------------------------------------ _byname = [ ("num","^[0-9]"), ("ABC","^[ABCabc]"), ("DEF","^[DEFdef]"), ("GHI","^[GHIghi]"), ("JKL","^[JKLjkl]"), ("MNO","^[MNOmno]"), ("PQRS","^[PQRSpqrs]"), ("TUV","^[TUVtuv]"), ("WXYZ","^[WXZwxy]") ] _vdb_by_name = { 'type' : "vdb_movies", 'display_name' : "Browse by Title", 'menu_name' : "Choose a Title", 'sql_value' : "id,title,filename,plot,year,imgurl,custom2", 'sql' : "FROM videodata WHERE mediatype < 50 AND title RLIKE ", 'post_sql' : "ORDER BY title" } _vdb_names = { 'type' : "sql_list_menu", 'display_name' : "Browse by Title", 'menu_name' : "Choose a Title", 'dbout' : _byname, 'next' : _vdb_by_name } #------------------------------------------------------------------ _vdb_by_new = { 'type' : "vdb_movies", 'display_name' : "Browse by New", 'menu_name' : "Choose a Title", 'sql_value' : "id,title,filename,plot,year,imgurl,custom2", 'sql' : "FROM videodata WHERE mediatype < 50 ORDER BY lastupdate DESC LIMIT 100 " } #---------------------------------------------------------------- _chars = ["","[ABCabc]","[DEFdef]","[GHIghi]","[JKLjkl]","[MNOmno]","[PQRSpqrs]","[TUVtuv]"] _vdb_by_name = { 'type' : "vdb_search", 'display_name' : "Search by actor", 'menu_name' : "Choose a Title", 'sql_value' : "Name", 'sql' : "FROM actors WHERE name RLIKE " } class PluginInterface(plugin.MainMenuPlugin): """ A freevo interface to videodb plugin.activate('video.videodb') """ def __init__(self): plugin.MainMenuPlugin.__init__(self) self.display_type = 'video' def items(self, parent): return [ BrowseBy(parent) ] class VdbVideoItem(VideoItem): def __init__(self, title, parent): VideoItem.__init__(self, title['filename'], parent) cd = re.compile('cd1*', re.IGNORECASE) m = cd.search( title['filename'] ) if m: print 'Match found: ', m.group() recd = re.compile('(cd)(1)*', re.IGNORECASE) self.subitems.append(VideoItem(title['filename'], self)) for i in range(2, 6): nextcd = recd.sub(r'\g<1>'+str(i),title['filename']) if os.path.isfile(nextcd): print "Adding"+ nextcd self.subitems.append(VideoItem(nextcd, self)) print "Missing:" + nextcd print "\n \n TITLE: " + title['title'] + " -- " + title['custom2'] self.name = title['title'] if ( title['imgurl'] != "" ): self.image = os.path.join( cachedir , str(title['id']) + ".jpg") if not os.path.isfile(self.image): print "Downloading image for movie:" + str(title['id']) + "\n" os.system ('wget %s -O %s 2> /dev/null' % ( title['imgurl'],self.image )) self.info["plot"] = util.format_text(title['plot']) self.info["year"] = util.format_text(str(title['year'])) self.info["rating"] = util.format_text(str(title['custom2'])) # self.info["genre"] = util.format_text(title['genre']) self.type = 'video' self.display_type='video' class BrowseBySql(Item): def __init__(self, parent,sqldata,name=None,sqlparam=None): Item.__init__(self, parent) self.display_type = 'video' self.sqldata=sqldata print "_BrowseBySql_init" print self.sqldata self.description = sqldata['display_name'] dbdata = [] if name : self.name = name else: self.name = self.sqldata['display_name'] self.sqlparam = sqlparam if self.sqldata['type'] == "sql_menu" : dbdata=_dbfetch("SELECT count(*) " + self.sqldata['sql'] ) self.description = dbdata[0][0] if self.sqldata['type'] == "vdb_movies" : if self.sqlparam: dbdata=_dbfetch("SELECT count(*) " + self.sqldata['sql'] + " " + str(self.sqlparam)) else: dbdata=_dbfetch("SELECT count(*) " + self.sqldata['sql'] ) self.description = dbdata[0][0] print "\n" def actions(self): print "BrowseBySql actions...\n" return [ (self.make_menu, 'Titles') ] def make_menu(self, arg=None, menuw=None): print "_BrowseBySql_makemenu" print self.sqldata print "\n" dbdata=[] items=[] if self.sqldata['type'] == "sql_menu" : dbdata=_dbfetch("SELECT "+ self.sqldata['sql_value'] + " " + self.sqldata['sql'] ) for data in dbdata: nextmenu=self.sqldata['next'] # nextmenu['display_name']=str(data[0]) items.append(BrowseBySql(self,sqldata=nextmenu,name = str(data[0]),sqlparam = "'"+str(data[0])+"'")) menuw.pushmenu(menu.Menu(_(self.sqldata['menu_name']), items,item_types = self.display_type , force_skin_layout = -1)) if self.sqldata['type'] == "sql_list_menu" : dbdata = self.sqldata['dbout'] for data in dbdata: nextmenu=self.sqldata['next'] # nextmenu['display_name']=str(data[0]) items.append(BrowseBySql(self,sqldata=nextmenu,name = str(data[0]),sqlparam = "'"+str(data[1])+"'" )) menuw.pushmenu(menu.Menu(_(self.sqldata['menu_name']), items,item_types = self.display_type , force_skin_layout = -1)) if self.sqldata['type'] == "vdb_movies" : if self.sqlparam: dbdata=FetchAssoc("SELECT "+ self.sqldata['sql_value'] + " " + self.sqldata['sql'] + " " + str(self.sqlparam) + " " + self.sqldata['post_sql']) else: dbdata=FetchAssoc("SELECT "+ self.sqldata['sql_value'] + " " + self.sqldata['sql'] ) for data in dbdata: items.append(VdbVideoItem(data,self)) menuw.pushmenu(menu.Menu(_(self.sqldata['display_name']), items,item_types = self.display_type , force_skin_layout = -1)) class BrowseBy(Item): def __init__(self, parent): Item.__init__(self, parent) self.name = 'VideoDB' self.display_type='video' self.type = 'dir' self.skin_display_type = parent.display_type def actions(self): return [ (self.make_menu, 'Browse by') ] def make_menu(self, arg=None, menuw=None): menuw.pushmenu(menu.Menu('Video DB', [ BrowseBySql(self,_vdb_by_new), BrowseBySql(self,_vdb_years), BrowseBySql(self,_vdb_geners), BrowseBySql(self, _vdb_names) ],item_types = self.display_type , force_skin_layout = -1))
------------------------------------------------------------------------- This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2005. http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________ Freevo-devel mailing list Freevo-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/freevo-devel