# This Python file uses the following encoding: utf-8 """ GUI, main window class and correspondig methods for pyGTKtalog app. """ import sys import os import mimetypes import popen2 import pygtk import gtk import gtk.glade from config import Config import deviceHelper import dialogs class PyGTKtalog: def __init__(self): self.conf = Config() self.gladefile = "glade/main.glade" self.pygtkcat = gtk.glade.XML(self.gladefile,"main") self.window = self.pygtkcat.get_widget("main") self.window.set_title("pyGTKtalog") icon = gtk.gdk.pixbuf_new_from_file("pixmaps/mainicon.png") self.window.set_icon_list(icon) self.progress = self.pygtkcat.get_widget("progressbar1") self.status = self.pygtkcat.get_widget("mainStatus") self.sbSearchCId = self.status.get_context_id('detailed res') self.sbid = self.status.push(self.sbSearchCId, "Idle") self.detailplaceholder = self.pygtkcat.get_widget("detailplace") self.detailplaceholder.set_sensitive(False) self.details = self.pygtkcat.get_widget("details") self.details.hide() self.widgets = ("discs","files","details",'save1','save_as1','cut1','copy1','paste1','delete1','add_cd','add_directory1') for w in self.widgets: a = self.pygtkcat.get_widget(w) a.set_sensitive(False) a = self.pygtkcat.get_widget('hpaned1') a.set_position(self.conf.confd['h']) a = self.pygtkcat.get_widget('vpaned1') a.set_position(self.conf.confd['v']) self.window.resize(self.conf.confd['wx'],self.conf.confd['wy']) # sygnały: dic = {"on_main_destroy_event" :self.doQuit, "on_quit1_activate" :self.doQuit, "on_new1_activate" :self.newDB, "on_add_cd_activate" :self.addCD, } # connect signals self.pygtkcat.signal_autoconnect(dic) self.window.connect("delete_event", self.deleteEvent) def storeSettings(self): """Store window size and pane position in config file (using config object)""" hpan = self.pygtkcat.get_widget('hpaned1') vpan = self.pygtkcat.get_widget('vpaned1') self.conf.confd['wx'], self.conf.confd['wy'] = self.window.get_size() self.conf.confd['h'],self.conf.confd['v'] = hpan.get_position(), vpan.get_position() self.conf.save() return def doQuit(self, widget): """quit and save window parameters to config file""" try: if widget.title: pass except: self.storeSettings() gtk.main_quit() return False def newDB(self,widget): """create database in temporary place""" self.window.set_title("żażółć gęślą jaźń") #self.window.set_title("untitled - pyGTKtalog") for w in self.widgets: try: a = self.pygtkcat.get_widget(w) a.set_sensitive(True) # PyGTK FAQ entry 23.20 except: pass while gtk.events_pending(): gtk.main_iteration() #self.details.set_sensitive(True) #self.details.destroy() #self.details = gtk.Button("Press mi or daj"); #self.details.set_name("details") #self.detailplaceholder.add_with_viewport(self.details) #self.details.show() return def deleteEvent(self, widget, event, data=None): """checkout actual database changed. If so, do the necessary ask.""" self.storeSettings() return False def run(self): self.window.show(); gtk.main() def addCD(self,widget): mount = deviceHelper.volmount(self.conf.confd['cd']) if mount == 'ok': self.scan(self.conf.confd['cd']) deviceHelper.eject_cd() else: msg = dialogs.Wrn(self.window, "error mounting device - pyGTKtalog","Cannot mount device pointed to %s.\nLast mount message:\n%s" % (self.conf.confd['cd'],mount)) def scan(self,path): mime = mimetypes.MimeTypes() extensions = ('mkv','avi','ogg','mpg','wmv','mp4') count = 0 for root,kat,plik in os.walk(path): for p in plik: count+=1 frac = 1.0/count count = 1 #self.progress.set_pulse_step(0) for root,kat,plik in os.walk(path): for p in plik: if p[-3:].lower() in extensions or \ mime.guess_type(p)!= (None,None) and \ mime.guess_type(p)[0].split("/")[0] == 'video': # video only # TODO: parametrize this loop! info = popen2.popen4('midentify "' + os.path.join(root,p)+'"')[0].readlines() video_format = '' audio_codec = '' video_codec = '' video_x = '' video_y = '' for line in info: l = line.split('=') val = l[1].split('\n')[0] if l[0] == 'ID_VIDEO_FORMAT': video_format = val elif l[0] == 'ID_AUDIO_CODEC': audio_codec = val elif l[0] == 'ID_VIDEO_CODEC': video_codec = val elif l[0] == 'ID_VIDEO_WIDTH': video_x = val elif l[0] == 'ID_VIDEO_HEIGHT': video_y = val if self.sbid != 0: """jeśli jest jakiś mesedż, usuń go""" self.status.remove(self.sbSearchCId, self.sbid) self.sbid = self.status.push(self.sbSearchCId, "Scannig: %s" % (os.path.join(root,p))) self.progress.set_fraction(frac * count) count+=1 # PyGTK FAQ entry 23.20 while gtk.events_pending(): gtk.main_iteration() if self.sbid != 0: self.status.remove(self.sbSearchCId, self.sbid) self.sbid = self.status.push(self.sbSearchCId, "Idle") self.progress.set_fraction(0)