Exemplo n.º 1
0
def restore(self):
	"""restores a griffith compressed backup"""
	filename = gutils.file_chooser(_("Restore Griffith backup"), \
		action=gtk.FILE_CHOOSER_ACTION_OPEN, buttons= \
		(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, \
		gtk.STOCK_OPEN, gtk.RESPONSE_OK))
	if filename[0]:
		try:
			zip = zipfile.ZipFile(filename[0], 'r')
		except:
			gutils.error(self, _("Can't read backup file"), self.widgets['window'])
			return False
		mypath = os.path.join(self.locations['posters'])
		for each in zip.namelist():
			file_to_restore = os.path.split(each)
			if not os.path.isdir(file_to_restore[1]):
				if file_to_restore[1] == '':
					continue
				if file_to_restore[1].endswith('.jpg'):
					myfile = os.path.join(mypath,file_to_restore[1])
				else:
					myfile = os.path.join(self.locations['home'],file_to_restore[1])
				outfile = open(myfile, 'wb')
				outfile.write(zip.read(each))
				outfile.flush()
				outfile.close()
		zip.close()

		# restore config file
		self.config = config.Config(file=os.path.join(self.locations['home'],'griffith.conf'))
		filename = os.path.join(self.locations['home'], self.config["default_db"])

		self.db.metadata.engine.dispose() # close DB
		from sqlalchemy.orm import clear_mappers
		clear_mappers()

		# check if file needs conversion
		if self.config['default_db'].lower().endswith('.gri'):
			self.debug.show('Old database format detected. Converting...')
			from dbupgrade import convert_from_old_db
			from initialize	import location_posters
			if convert_from_old_db(self, filename, os.path.join(self.locations['home'], 'griffith.db')):
				self.config.save()
				location_posters(self.locations, self.config)
			else:
				print 'Cant convert old database, exiting.'
				import sys
				sys.exit(4)

		self.db = sql.GriffithSQL(self.config, self.debug, self.locations['home'])
		from initialize	import dictionaries, people_treeview
		dictionaries(self)
		people_treeview(self)
		# let's refresh the treeview
		self.clear_details()
		self.populate_treeview()
		self.go_last()
		self.treeview_clicked()
		self.count_statusbar()
		gutils.info(self, _("Backup restored"), self.widgets['window'])
Exemplo n.º 2
0
	def new_db(self, parent): #{{{
		"""initializes a new griffith database file"""
		response = gutils.question(self, \
			_("Are you sure you want to create a new database?\nYou will lose ALL your current data!"), \
			1, parent.main_window)
		if response == gtk.RESPONSE_YES:
			response_sec = gutils.question(self, \
				_("Last chance!\nDo you confirm that you want\nto lose your current data?"), \
				1, parent.main_window)
			if response_sec == gtk.RESPONSE_YES:
				# delete images
				for root, dirs, files in os.walk(os.path.join(self.griffith_dir,"posters"), topdown=False):
					for name in files:
						os.remove(os.path.join(root, name))
				# delete db
				parent.db.con.close()
				os.unlink(os.path.join(self.griffith_dir,self.config.get('default_db')))
				# create/connect db
				parent.db = GriffithSQL(self.config, self.debug, self.griffith_dir)
				parent.clear_details()
				parent.total = 0
				parent.count_statusbar()
				parent.treemodel.clear()
				from initialize	import dictionaries
				dictionaries(parent)
			else:
				pass
		else:
			pass
Exemplo n.º 3
0
def restore(self):
	"""restores a griffith compressed backup"""
	filename = gutils.file_chooser(_("Restore Griffith backup"), \
		action=gtk.FILE_CHOOSER_ACTION_OPEN, buttons= \
		(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, \
		gtk.STOCK_OPEN, gtk.RESPONSE_OK))
	if filename[0]:   
		response_unzip = gutils.restore(filename[0], self.griffith_dir)
		if not response_unzip:
			gutils.error(self, _("Can't read backup file"), self.main_window)
			return
		self.db.con.close()
		self.db = sql.GriffithSQL(self.config, self.debug, self.griffith_dir)
		from initialize	import dictionaries
		dictionaries(self)
		gutils.info(self, _("Backup restored"), self.main_window)
		# let's refresh the treeview
		self.populate_treeview(self.db.get_all_data())
		self.total = self.db.count_records("movies")
		self.select_last_row(self.total)
		self.treeview_clicked()
		self.count_statusbar()
Exemplo n.º 4
0
def restore(self, merge=False):
    """
    Merge database from:
    * compressed backup (*.zip)
    * SQLite2 *.gri file
    * SQLite3 *.db file
    """
    # let user select a backup file
    filename = gutils.file_chooser(_("Restore Griffith backup"), \
                action=gtk.FILE_CHOOSER_ACTION_OPEN, backup=True, \
                buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN, gtk.RESPONSE_OK))
    if not filename:
        log.debug('no file selected')
        return False

    try:
        tmp_db = None
        tmp_dir = mkdtemp()
        os.mkdir(os.path.join(tmp_dir, 'posters'))
        print filename
        if filename.lower().endswith('.zip'):
            try:
                zip_file = zipfile.ZipFile(filename, 'r')
            except:
                gutils.error(_("Can't read backup file"), self.widgets['window'])
                return False

            old_config_file = False
            # unpack files to temporary directory
            for file_path in zip_file.namelist():
                file_name = os.path.split(file_path)[-1]
                if not os.path.isdir(file_name):
                    if not file_name:
                        log.debug('skipping %s', file_path)
                        continue

                    if 'posters' in file_path:
                        new_file = os.path.join(tmp_dir, 'posters', file_name)
                    else:
                        new_file = os.path.join(tmp_dir, file_name)
                    if file_name.endswith('.conf'):
                        old_config_file = new_file
                    outfile = open(new_file, 'wb')
                    outfile.write(zip_file.read(file_path))
                    outfile.close()
            zip_file.close()

            # restore config file (new one will be created if old config format is detected)
            tmp_config = config.Config(file=os.path.join(tmp_dir, 'griffith.cfg'))
            if old_config_file:
                log.info('Old config file detected. Please note that it will not be used.')
                f = open(old_config_file, 'r')
                old_config_raw_data = f.read()
                f.close()
                if old_config_raw_data.find('griffith.gri') >= -1:
                    tmp_config.set('file', 'griffith.gri', section='database')

            # update filename var. to point to the unpacked database
            filename = os.path.join(tmp_dir, tmp_config.get('name', 'griffith', section='database') + '.db')
        else:  # not a zip file? prepare a fake config file then
            tmp_config = config.Config(file=os.path.join(tmp_dir, 'griffith.cfg'))
            tmp_config.set('type', 'sqlite', section='database')
            tmp_config.set('file', 'griffith.db', section='database')

        # prepare temporary GriffithSQL instance
        locations = {'home': tmp_dir}
        # check if file needs conversion
        if filename.lower().endswith('.gri'):
            from dbupgrade import convert_from_old_db
            tmp_db = convert_from_old_db(tmp_config, filename, os.path.join(tmp_dir, 'griffith.db'), locations)
            if not tmp_db:
                log.info("MERGE: Can't convert database, aborting.")
                return False
        else:
            tmp_db = sql.GriffithSQL(tmp_config, tmp_dir, fallback=False)

        if merge:
            merge_db(tmp_db, self.db)
        else:
            self.db.session.rollback()  # cancel all pending operations
            copy_db(tmp_db.session.bind, self.db.session.bind)
            # update old database section with current config values
            # (important while restoring to external databases)
            for key in ('name', 'passwd', 'host', 'user', 'file', 'type', 'port'):
                tmp_config.set(key, self.config.get(key, section='database'), section='database')
            tmp_config._file = self.config._file
            self.config = tmp_config
            self.config.save()
            dictionaries(self)
            people_treeview(self)
            # let's refresh the treeview
            self.clear_details()
            self.populate_treeview()
        #gutils.info(_("Databases merged!\n\nProcessed movies: %s\nMerged movies: %s"%(movies, merged)), self.widgets['window'])
        gutils.info(_("Backup restored"), self.widgets['window'])
    except:
        log.exception('')
        raise
    finally:
        # disposing the temporary db connection before rmtree and in finally block to avoid locked db file
        if tmp_db:
            tmp_db.dispose()
        log.debug('temporary directory no logger needed, removing %s', tmp_dir)
        rmtree(tmp_dir)
Exemplo n.º 5
0
def merge(self):	# FIXME
	"""
		Merge database from:
		* compressed backup
		* SQLite2 *.gri file
		* SQLite3 *.db file
	"""
	filename = gutils.file_chooser(_("Restore Griffith backup"), \
		action=gtk.FILE_CHOOSER_ACTION_OPEN, buttons= \
		(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, \
		gtk.STOCK_OPEN, gtk.RESPONSE_OK))[0]
	if filename:
		from tempfile import mkdtemp
		from shutil import rmtree, move

		#tmp_config={}
		#tmp_config.get('type', 'sqlite', section='database')

		if filename.lower().endswith('.zip'):
			tmp_dir = mkdtemp()
			try:
				zip = zipfile.ZipFile(filename, 'r')
			except:
				gutils.error(self, _("Can't read backup file"), self.widgets['window'])
				return False
			for each in zip.namelist():
				file_to_restore = os.path.split(each)
				if not os.path.isdir(file_to_restore[1]):
					myfile = os.path.join(tmp_dir, file_to_restore[1])
					outfile = open(myfile, 'wb')
					outfile.write(zip.read(each))
					outfile.flush()
					outfile.close()
			# load stored database filename
			tmp_config = config.Config(file=os.path.join(tmp_dir,'griffith.conf'))
			filename = os.path.join(tmp_dir, tmp_config('file', 'griffith.db', section='database'))
			zip.close()

		# check if file needs conversion
		if filename.lower().endswith(".gri"):
			if os.path.isfile(filename) and  open(filename).readline()[:47] == "** This file contains an SQLite 2.1 database **":
				self.debug.show("MERGE: SQLite2 database format detected. Converting...")
				if not self.db.convert_from_sqlite2(filename, os.path.join(tmp_dir, self.config.get('file', 'griffith.db', section='database'))):
					self.debug.show("MERGE: Can't convert database, aborting.")
					return False
		tmp_dir, tmp_file = os.path.split(filename)
		self.config.get('file', tmp_file, section='database') 

		tmp_db = sql.GriffithSQL(tmp_config, self.debug, tmp_dir)

		merged=0
		movies = tmp_db.Movie.count()
		for movie in tmp_db.Movie.select():
			if self.db.Movie.get_by(o_title=movie.o_title) is not None:
				continue
			t_movies = {}
			for column in movie.mapper.c.keys():
				t_movies[column] = eval("movie.%s"%column)

			# replace number with new one
			t_movies["number"] = gutils.find_next_available(self.db)

			# don't restore volume/collection/tag/language/loan data (it's dangerous)
			t_movies.pop('movie_id')
			t_movies.pop('loaned')
			t_movies.pop('volume_id')
			t_movies.pop('collection_id')

			if self.db.add_movie(t_movies):
				print t_movies

			if movie.image is not None:
				dest_file = os.path.join(self.locations['posters'], movie.image+'.jpg')
				if not os.path.isfile(dest_file):
					src_file = os.path.join(tmp_dir, movie.image+'.jpg')
					if os.path.isfile(src_file):
						move(src_file, dest_file)
			merged+=1
		rmtree(tmp_dir)

		from initialize	import dictionaries, people_treeview
		dictionaries(self)
		people_treeview(self)
		# let's refresh the treeview
		self.clear_details()
		self.populate_treeview(self.db.Movie.select())
		self.total = self.db.Movie.count()
		self.count_statusbar()
Exemplo n.º 6
0
def save_preferences(self):
	w = self.widgets['preferences']
	c = self.config
	global spell_support

	was_false = notes_was_false = plot_was_false = 1	

	if c.get('gtkspell', False, section='spell') == True:
		was_false = 0

	if c.get('notes', False, section='spell') == True:
		notes_was_false = 0

	if c.get('plot', False, section='spell') == True:
		plot_was_false = 0

	# number
	if w['view_number'].get_active():
		c.set('number', 'True', section='mainlist')
	else:
		c.set('number', 'False', section='mainlist')
	# image
	if w['view_image'].get_active():
		c.set('image', 'True', section='mainlist')
	else:
		c.set('image', 'False', section='mainlist')
	# original title
	if w['view_o_title'].get_active():
		c.set('otitle', 'True', section='mainlist')
	else:
		c.set('otitle', 'False', section='mainlist')
	# title
	if w['view_title'].get_active():
		c.set('title', 'True', section='mainlist')
	else:
		c.set('title', 'False', section='mainlist')
	# director
	if w['view_director'].get_active():
		c.set('director', 'True', section='mainlist')
	else:
		c.set('director', 'False', section='mainlist')
	# genre
	if w['view_genre'].get_active():
		c.set('genre', 'True', section='mainlist')
	else:
		c.set('genre', 'False', section='mainlist')
	# seen
	if w['view_seen'].get_active():
		c.set('seen', 'True', section='mainlist')
	else:
		c.set('seen', 'False', section='mainlist')
	# year
	if w['view_year'].get_active():
		c.set('year', 'True', section='mainlist')
	else:
		c.set('year', 'False', section='mainlist')
	# runtime
	if w['view_runtime'].get_active():
		c.set('runtime', 'True', section='mainlist')
	else:
		c.set('runtime', 'False', section='mainlist')
	# rating
	if w['view_rating'].get_active():
		c.set('rating', 'True', section='mainlist')
	else:
		c.set('rating', 'False', section='mainlist')
	
	# sortby
	if w['sortby'].get_active():
		field = self.sort_criteria[w['sortby'].get_active()]
		if field:
			c.set('sortby', field, section='mainlist')
	else:
		c.set('sortby', 'number', section='mainlist')
	c.set('sortby_reverse', w['sortby_reverse'].get_active(), section='mainlist')
	
	c.set('limit', str(int(w['s_limit'].get_value())), section='mainlist')
	

	# pdf font
	if w['font'].get_filename():
		c['font'] = w['font'].get_filename()

	# spellchecker
	if w['spellchecker'].get_active():
		c.set('gtkspell', True, section='spell')
	else:
		c.set('gtkspell', False, section='spell')
	if w['spell_notes'].get_active():
		c.set('notes', True, section='spell')
	else:
		c.set('notes', False, section='spell')
	if w['spell_plot'].get_active():
		c.set('plot', True, section='spell')
	else:
		c.set('plot', False, section='spell')

	# rating image
	c['rating_image'] = str(w['rating_image'].get_active())

	#defaults
	media_id = self.media_ids[w['media'].get_active()]
	if media_id is None:
		media_id = 0
	c.set('media', media_id, section='defaults')
	vcodec_id = self.vcodecs_ids[w['vcodec'].get_active()]
	if vcodec_id is None:
		vcodec_id = 0
	c.set('vcodec', vcodec_id, section='defaults')
	c.set('condition', str(w['condition'].get_active()), section='defaults')
	c.set('region', str(w['region'].get_active()), section='defaults')
	c.set('layers', str(w['layers'].get_active()), section='defaults')
	c.set('color', str(w['color'].get_active()), section='defaults')

	# email reminder
	if w['mail_use_auth'].get_active():
		c.set('use_auth', True, section='mail')
	else:
		c.set('use_auth', False, section='mail')
		
	if w['mail_use_tls'].get_active():
		c.set('mail_use_tls', True, section='mail')
	else:
		c.set('mail_use_tls', False, section='mail')

	c.set('smtp_server', w['mail_smtp_server'].get_text(), section='mail')
	c.set('mail_smtp_port', w['mail_smtp_port'].get_text(), section='mail')

	c.set('username', w['mail_username'].get_text(), section='mail')
	c.set('password', w['mail_password'].get_text(), section='mail')
	c.set('email', w['mail_email'].get_text(), section='mail')

	# default movie plugin
	if w['default_plugin'].get_active():
		c['default_movie_plugin'] = \
			gutils.on_combo_box_entry_changed(w['default_plugin'])
	# search for:
	c.set('s_classification', w['s_classification'].get_active(), section='add')
	c.set('s_country', w['s_country'].get_active(), section='add')
	c.set('s_director', w['s_director'].get_active(), section='add')
	c.set('s_genre', w['s_genre'].get_active(), section='add')
	c.set('s_image', w['s_image'].get_active(), section='add')
	c.set('s_notes', w['s_notes'].get_active(), section='add')
	c.set('s_o_site', w['s_o_site'].get_active(), section='add')
	c.set('s_o_title', w['s_o_title'].get_active(), section='add')
	c.set('s_plot', w['s_plot'].get_active(), section='add')
	c.set('s_rating', w['s_rating'].get_active(), section='add')
	c.set('s_runtime', w['s_runtime'].get_active(), section='add')
	c.set('s_site', w['s_site'].get_active(), section='add')
	c.set('s_studio', w['s_studio'].get_active(), section='add')
	c.set('s_title', w['s_title'].get_active(), section='add')
	c.set('s_trailer', w['s_trailer'].get_active(), section='add')
	c.set('s_cast', w['s_cast'].get_active(), section='add')
	c.set('s_year', w['s_year'].get_active(), section='add')
	
	mcounter = 0
	for p in self.plugins:
		plugin_module = os.path.basename(p).replace('.py','')
		plugin_name = plugin_module.replace('PluginMovie','')
		if gutils.on_combo_box_entry_changed(w['default_plugin']) == plugin_name:
			self.d_plugin = mcounter
		mcounter = mcounter + 1
	self.widgets['add']['source'].set_active(self.d_plugin)

	if self.windows:
		save_reader = ''
	else:
		save_reader = w['epdf_reader'].get_text()

	c.set('lang', w['spell_lang'].get_text(), section='spell')
	c['pdf_reader'] = save_reader

	c.set('amazon_locale', w['amazon_locale'].get_active(), section='add')
	
	if spell_support:
		if c.get('gtkspell', False, section='spell') == False and not was_false:
			self.notes_spell.detach()
			self.plot_spell.detach()
		elif c.get('gtkspell', False, section='spell') == True and was_false:
			initialize.initialize_gtkspell(self)
		else:
			pass

		if c.get('gtkspell', False, section='spell') == True:
			if c.get('plot', True, section='spell') == False and not plot_was_false:
				self.plot_spell.detach()
			elif c.get('plot', True, section='spell') == True and plot_was_false:
				self.plot_spell = gtkspell.Spell(self.widgets['add']['plot'])
				self.plot_spell.set_language(c.get('lang', 'en', section='spell'))
			else:
				pass

			if c.get('notes', True, section='spell') == False and not notes_was_false:
				self.notes_spell.detach()
			elif c.get('notes', True, section='spell') == True and notes_was_false:
				self.notes_spell = gtkspell.Spell(self.widgets['add']['notes'])
				self.notes_spell.set_language(c.get('lang', 'en', section='spell'))
			else:
				pass
	self.pdf_reader = save_reader

	# database
	old = c.toDict(section='database')
	
	c.set('host', w['db_host'].get_text(), section='database')
	c.set('port', int(w['db_port'].get_value()), section='database')
	c.set('name', w['db_name'].get_text(), section='database')
	c.set('user', w['db_user'].get_text(), section='database')
	c.set('passwd', w['db_passwd'].get_text(), section='database')
	db_type = int(w['db_type'].get_active())
	if db_type == 1:
		c.set('type', 'postgres', section='database')
	elif db_type == 2:
		c.set('type', 'mysql', section='database')
	elif db_type == 3:
		c.set('type', 'mssql', section='database')
	else:
		c.set('type', 'sqlite', section='database')

	if old['type'] != c.get('type', section='database') or (old['type']!='sqlite' and (\
			old['host'] != c.get('host', section='database') or \
			old['port'] != c.get('port', section='database') or \
			old['user'] != c.get('user', section='database') or \
			old['passwd'] != c.get('passwd', section='database'))) or \
			old['name'] != c.get('name', section='database'):
		self.debug.show('DATABASE: connecting to new db server...')
		
		# new database connection
		import sql
		self.initialized = False
		self.db.metadata.clear()
		from sqlalchemy.orm import clear_mappers
		from sqlalchemy.exceptions import InvalidRequestError
		clear_mappers()
		try:
			self.db = sql.GriffithSQL(c, self.debug, self.locations['home'])
		except InvalidRequestError, e:
			self.debug.show(str(e))
			c.set('type', 'sqlite', section='database')
			w['db_type'].set_active(0)
			self.db = sql.GriffithSQL(c, self.debug, self.locations['home'])

		self.debug.show("New database Engine: %s" % self.db.metadata.engine.name)
		
		# initialize new database
		self.total = int(self.db.Movie.count())
		self.count_statusbar()
		from initialize	import dictionaries, people_treeview, location_posters
		c['posters'] = None # force update
		location_posters(self.locations, self.config)
		dictionaries(self)
		people_treeview(self, False)
		self.initialized = True
Exemplo n.º 7
0
def restore(self, merge=False):
    """
    Merge database from:
    * compressed backup (*.zip)
    * SQLite2 *.gri file
    * SQLite3 *.db file
    """
    # let user select a backup file
    filename, path = gutils.file_chooser(_("Restore Griffith backup"), \
                action=gtk.FILE_CHOOSER_ACTION_OPEN, backup=True, \
                buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN, gtk.RESPONSE_OK))
    if not filename:
        log.debug('no file selected')
        return False

    try:
        tmp_db = None
        tmp_dir = mkdtemp()
        os.mkdir(os.path.join(tmp_dir, 'posters'))
        print filename
        if filename.lower().endswith('.zip'):
            try:
                zip_file = zipfile.ZipFile(filename, 'r')
            except:
                gutils.error(_("Can't read backup file"), self.widgets['window'])
                return False

            old_config_file = False
            # unpack files to temporary directory
            for file_path in zip_file.namelist():
                file_name = os.path.split(file_path)[-1]
                if not os.path.isdir(file_name):
                    if not file_name:
                        log.debug('skipping %s', file_path)
                        continue

                    if 'posters' in file_path:
                        new_file = os.path.join(tmp_dir, 'posters', file_name)
                    else:
                        new_file = os.path.join(tmp_dir, file_name)
                    if file_name.endswith('.conf'):
                        old_config_file = new_file
                    outfile = open(new_file, 'wb')
                    outfile.write(zip_file.read(file_path))
                    outfile.close()
            zip_file.close()

            # restore config file (new one will be created if old config format is detected)
            tmp_config = config.Config(file=os.path.join(tmp_dir, 'griffith.cfg'))
            if old_config_file:
                log.info('Old config file detected. Please note that it will not be used.')
                f = open(old_config_file, 'r')
                old_config_raw_data = f.read()
                f.close()
                if old_config_raw_data.find('griffith.gri') >= -1:
                    tmp_config.set('file', 'griffith.gri', section='database')

            # update filename var. to point to the unpacked database
            filename = os.path.join(tmp_dir, tmp_config.get('name', 'griffith', section='database') + '.db')
        else:  # not a zip file? prepare a fake config file then
            tmp_config = config.Config(file=os.path.join(tmp_dir, 'griffith.cfg'))
            tmp_config.set('type', 'sqlite', section='database')
            tmp_config.set('file', 'griffith.db', section='database')

        # prepare temporary GriffithSQL instance
        locations = {'home': tmp_dir}
        # check if file needs conversion
        if filename.lower().endswith('.gri'):
            from dbupgrade import convert_from_old_db
            tmp_db = convert_from_old_db(tmp_config, filename, os.path.join(tmp_dir, 'griffith.db'), locations)
            if not tmp_db:
                log.info("MERGE: Can't convert database, aborting.")
                return False
        else:
            tmp_db = sql.GriffithSQL(tmp_config, tmp_dir, fallback=False)

        if merge:
            merge_db(tmp_db, self.db)
        else:
            self.db.session.rollback()  # cancel all pending operations
            copy_db(tmp_db.session.bind, self.db.session.bind)
            # update old database section with current config values
            # (important while restoring to external databases)
            for key in ('name', 'passwd', 'host', 'user', 'file', 'type', 'port'):
                tmp_config.set(key, self.config.get(key, section='database'), section='database')
            tmp_config._file = self.config._file
            self.config = tmp_config
            self.config.save()
            dictionaries(self)
            people_treeview(self)
            # let's refresh the treeview
            self.clear_details()
            self.populate_treeview()
        #gutils.info(_("Databases merged!\n\nProcessed movies: %s\nMerged movies: %s"%(movies, merged)), self.widgets['window'])
        gutils.info(_("Backup restored"), self.widgets['window'])
    except:
        log.exception('')
        raise
    finally:
        # disposing the temporary db connection before rmtree and in finally block to avoid locked db file
        if tmp_db:
            tmp_db.dispose()
        log.debug('temporary directory no logger needed, removing %s', tmp_dir)
        rmtree(tmp_dir)
Exemplo n.º 8
0
def save_preferences(self):
    w = self.widgets['preferences']
    c = self.config
    global spell_support

    was_false = notes_was_false = plot_was_false = 1

    if c.get('gtkspell', False, section='spell') == True:
        was_false = 0

    if c.get('notes', False, section='spell') == True:
        notes_was_false = 0

    if c.get('plot', False, section='spell') == True:
        plot_was_false = 0

    # number
    if w['view_number'].get_active():
        c.set('number', 'True', section='mainlist')
    else:
        c.set('number', 'False', section='mainlist')
    # image
    if w['view_image'].get_active():
        c.set('image', 'True', section='mainlist')
    else:
        c.set('image', 'False', section='mainlist')
    # original title
    if w['view_o_title'].get_active():
        c.set('otitle', 'True', section='mainlist')
    else:
        c.set('otitle', 'False', section='mainlist')
    # title
    if w['view_title'].get_active():
        c.set('title', 'True', section='mainlist')
    else:
        c.set('title', 'False', section='mainlist')
    # director
    if w['view_director'].get_active():
        c.set('director', 'True', section='mainlist')
    else:
        c.set('director', 'False', section='mainlist')
    # genre
    if w['view_genre'].get_active():
        c.set('genre', 'True', section='mainlist')
    else:
        c.set('genre', 'False', section='mainlist')
    # seen
    if w['view_seen'].get_active():
        c.set('seen', 'True', section='mainlist')
    else:
        c.set('seen', 'False', section='mainlist')
    # year
    if w['view_year'].get_active():
        c.set('year', 'True', section='mainlist')
    else:
        c.set('year', 'False', section='mainlist')
    # runtime
    if w['view_runtime'].get_active():
        c.set('runtime', 'True', section='mainlist')
    else:
        c.set('runtime', 'False', section='mainlist')
    # rating
    if w['view_rating'].get_active():
        c.set('rating', 'True', section='mainlist')
    else:
        c.set('rating', 'False', section='mainlist')
    # created
    if w['view_created'].get_active():
        c.set('created', 'True', section='mainlist')
    else:
        c.set('created', 'False', section='mainlist')
    # updated
    if w['view_updated'].get_active():
        c.set('updated', 'True', section='mainlist')
    else:
        c.set('updated', 'False', section='mainlist')

    # sortby
    if w['sortby'].get_active():
        field = self.sort_criteria[w['sortby'].get_active()]
        if field:
            c.set('sortby', field, section='mainlist')
    else:
        c.set('sortby', 'number', section='mainlist')
    c.set('sortby_reverse', w['sortby_reverse'].get_active(), section='mainlist')

    c.set('limit', str(int(w['s_limit'].get_value())), section='mainlist')


    # pdf font
    if w['font'].get_filename():
        c['font'] = w['font'].get_filename()
    c['font_size'] = int(w['font_size'].get_value())

    # pdf elements
    pdf_elements = ''
    for child in w['pdf_elements_table']:
        if child.get_active():
            pdf_elements = pdf_elements + child.get_name()[4:] + ','
    if pdf_elements:
        c.set('pdf_elements', pdf_elements[:-1])
    else:
        c.set('pdf_elements', pdf_elements)

    # spellchecker
    if w['spellchecker'].get_active():
        c.set('gtkspell', True, section='spell')
    else:
        c.set('gtkspell', False, section='spell')
    if w['spell_notes'].get_active():
        c.set('notes', True, section='spell')
    else:
        c.set('notes', False, section='spell')
    if w['spell_plot'].get_active():
        c.set('plot', True, section='spell')
    else:
        c.set('plot', False, section='spell')

    # rating image
    c['rating_image'] = str(w['rating_image'].get_active())

    #defaults
    media_id = self.media_ids[w['media'].get_active()]
    if media_id is None:
        media_id = 0
    c.set('media', media_id, section='defaults')
    vcodec_id = self.vcodecs_ids[w['vcodec'].get_active()]
    if vcodec_id is None:
        vcodec_id = 0
    c.set('vcodec', vcodec_id, section='defaults')
    c.set('condition', str(w['condition'].get_active()), section='defaults')
    c.set('region', str(w['region'].get_active()), section='defaults')
    c.set('layers', str(w['layers'].get_active()), section='defaults')
    c.set('color', str(w['color'].get_active()), section='defaults')

    # email reminder
    if w['mail_use_auth'].get_active():
        c.set('use_auth', True, section='mail')
    else:
        c.set('use_auth', False, section='mail')

    if w['mail_use_tls'].get_active():
        c.set('mail_use_tls', True, section='mail')
    else:
        c.set('mail_use_tls', False, section='mail')

    c.set('smtp_server', w['mail_smtp_server'].get_text(), section='mail')
    c.set('mail_smtp_port', w['mail_smtp_port'].get_text(), section='mail')

    c.set('username', w['mail_username'].get_text(), section='mail')
    c.set('password', w['mail_password'].get_text(), section='mail')
    c.set('email', w['mail_email'].get_text(), section='mail')

    # default movie plugin
    if w['default_plugin'].get_active():
        c['default_movie_plugin'] = \
            gutils.on_combo_box_entry_changed(w['default_plugin'])
    # search for:
    c.set('s_classification', w['s_classification'].get_active(), section='add')
    c.set('s_country', w['s_country'].get_active(), section='add')
    c.set('s_director', w['s_director'].get_active(), section='add')
    c.set('s_genre', w['s_genre'].get_active(), section='add')
    c.set('s_image', w['s_image'].get_active(), section='add')
    c.set('s_notes', w['s_notes'].get_active(), section='add')
    c.set('s_o_site', w['s_o_site'].get_active(), section='add')
    c.set('s_o_title', w['s_o_title'].get_active(), section='add')
    c.set('s_plot', w['s_plot'].get_active(), section='add')
    c.set('s_rating', w['s_rating'].get_active(), section='add')
    c.set('s_runtime', w['s_runtime'].get_active(), section='add')
    c.set('s_site', w['s_site'].get_active(), section='add')
    c.set('s_studio', w['s_studio'].get_active(), section='add')
    c.set('s_title', w['s_title'].get_active(), section='add')
    c.set('s_trailer', w['s_trailer'].get_active(), section='add')
    c.set('s_cast', w['s_cast'].get_active(), section='add')
    c.set('s_year', w['s_year'].get_active(), section='add')
    c.set('s_screenplay', w['s_screenplay'].get_active(), section='add')
    c.set('s_cameraman', w['s_cameraman'].get_active(), section='add')
    c.set('s_resolution', w['s_resolution'].get_active(), section='add')
    c.set('s_barcode', w['s_barcode'].get_active(), section='add')

    mcounter = 0
    for p in self.plugins:
        plugin_module = os.path.basename(p).replace('.py','')
        plugin_name = plugin_module.replace('PluginMovie','')
        if gutils.on_combo_box_entry_changed(w['default_plugin']) == plugin_name:
            break
        mcounter = mcounter + 1
    self.widgets['add']['source'].set_active(mcounter)

    save_reader = w['epdf_reader'].get_text()

    c.set('lang', w['spell_lang'].get_text(), section='spell')
    c['pdf_reader'] = save_reader

    if spell_support:
        if c.get('gtkspell', False, section='spell') == False and not was_false:
            self.notes_spell.detach()
            self.plot_spell.detach()
        elif c.get('gtkspell', False, section='spell') == True and was_false:
            initialize.spellcheck(self)
        else:
            pass

        if c.get('gtkspell', False, section='spell') == True:
            if c.get('plot', True, section='spell') == False and not plot_was_false:
                self.plot_spell.detach()
            elif c.get('plot', True, section='spell') == True and plot_was_false:
                self.plot_spell = gtkspell.Spell(self.widgets['add']['plot'])
                self.plot_spell.set_language(c.get('lang', 'en', section='spell'))
            else:
                pass

            if c.get('notes', True, section='spell') == False and not notes_was_false:
                self.notes_spell.detach()
            elif c.get('notes', True, section='spell') == True and notes_was_false:
                self.notes_spell = gtkspell.Spell(self.widgets['add']['notes'])
                self.notes_spell.set_language(c.get('lang', 'en', section='spell'))
            else:
                pass
    self.pdf_reader = save_reader

    # extensions settings
    for ext_name in plugins.extensions.by_name:
        preferenceswidgets = plugins.extensions.by_name[ext_name].preferenceswidgets
        for prefname in preferenceswidgets:
            widget = preferenceswidgets[prefname]
            if isinstance(widget, gtk.CheckButton):
                value = widget.get_active()
            elif isinstance(widget, gtk.Entry):
                value = widget.get_text()
            elif isinstance(widget, gtk.ComboBox):
                iter = widget.get_active_iter()
                if iter:
                    value = widget.get_model().get_value(iter, 1)
            else:
                log.error('widget type not supported %s', type(widget))
                continue
            c.set("%s_%s" % (ext_name, prefname), value, section='extensions')

    # database
    old = c.to_dict(section='database')

    c.set('host', w['db_host'].get_text(), section='database')
    c.set('port', int(w['db_port'].get_value()), section='database')
    c.set('name', w['db_name'].get_text(), section='database')
    c.set('user', w['db_user'].get_text(), section='database')
    c.set('passwd', w['db_passwd'].get_text(), section='database')
    db_type = int(w['db_type'].get_active())
    if db_type == 1:
        c.set('type', 'postgres', section='database')
    elif db_type == 2:
        c.set('type', 'mysql', section='database')
    elif db_type == 3:
        c.set('type', 'mssql', section='database')
    else:
        c.set('type', 'sqlite', section='database')

    if old['type'] != c.get('type', section='database') or (old['type']!='sqlite' and (\
            old['host'] != c.get('host', section='database') or \
            old['port'] != c.get('port', section='database') or \
            old['user'] != c.get('user', section='database') or \
            old['passwd'] != c.get('passwd', section='database'))) or \
            old['name'] != c.get('name', section='database'):
        log.info('DATABASE: connecting to new db server...')
        import sql
        from sqlalchemy.exceptions import InvalidRequestError
        from initialize import dictionaries, people_treeview

        # new database connection
        self.initialized = False
        if c.has_key('posters'):
            c['posters'] = None # force update
        try:
            self.db.dispose()
            self.db = sql.GriffithSQL(c, self.locations['home'], fallback=True)
        except InvalidRequestError, e:
            log.exception('')
            c.set('type', 'sqlite', section='database')
            w['db_type'].set_active(0)
            self.db = sql.GriffithSQL(c, self.locations['home'])

        log.info("New database Engine: %s" % self.db.session.bind.engine.name)

        # initialize new database
        self.total = int(self.db.session.query(db.Movie).count())
        self.count_statusbar()
        dictionaries(self)
        people_treeview(self, False)
        self.initialized = True
Exemplo n.º 9
0
def restore(self):
    """restores a griffith compressed backup"""
    filename = gutils.file_chooser(_("Restore Griffith backup"), \
        action=gtk.FILE_CHOOSER_ACTION_OPEN, buttons= \
        (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, \
        gtk.STOCK_OPEN, gtk.RESPONSE_OK))
    if filename[0]:
        try:
            zip = zipfile.ZipFile(filename[0], 'r')
        except:
            gutils.error(self, _("Can't read backup file"), self.widgets['window'])
            return False
        mypath = os.path.join(self.locations['posters'])
        old_config_file = False
        for each in zip.namelist():
            file_to_restore = os.path.split(each)
            if not os.path.isdir(file_to_restore[1]):
                if file_to_restore[1] == '':
                    continue
                if file_to_restore[1].endswith('.jpg'):
                    myfile = os.path.join(mypath,file_to_restore[1])
                else:
                    myfile = os.path.join(self.locations['home'],file_to_restore[1])
                if file_to_restore[1].endswith('.conf'):
                    old_config_file = myfile
                outfile = open(myfile, 'wb')
                outfile.write(zip.read(each))
                outfile.flush()
                outfile.close()
        zip.close()

        # restore config file
        self.config = config.Config(file=os.path.join(self.locations['home'],'griffith.cfg'))
        if old_config_file:
            log.info('Old config file detected. Please note that it will not be used.')
            f = open(old_config_file, 'r')
            old_config_raw_data = f.read()
            f.close()
            if old_config_raw_data.find('griffith.gri') >= -1:
                self.config.set('file', 'griffith.gri', section='database')

        filename = os.path.join(self.locations['home'], self.config.get('name', 'griffith', section='database') + '.db')

        self.db.session.bind.engine.dispose() # close DB

        # check if file needs conversion
        if self.config.get('file', 'griffith.db', section='database').lower().endswith('.gri'):
            log.info('Old database format detected. Converting...')
            from dbupgrade  import convert_from_old_db
            if convert_from_old_db(self, filename, os.path.join(self.locations['home'], 'griffith.db')):
                self.config.save()
            else:
                log.error('Cant convert old database, exiting.')
                import sys
                sys.exit(4)

        self.db = sql.GriffithSQL(self.config, self.locations['home'], self.locations)
        from initialize import dictionaries, people_treeview
        dictionaries(self)
        people_treeview(self)
        # let's refresh the treeview
        self.clear_details()
        self.populate_treeview()
        gutils.info(_("Backup restored"), self.widgets['window'])
Exemplo n.º 10
0
def save_preferences(self):
	w = self.widgets['preferences']
	c = self.config
	global spell_support

	was_false = notes_was_false = plot_was_false = 1	

	if c.get('use_gtkspell', 'False') == 'True':
		was_false = 0

	if c.get('spell_notes', 'False') == 'True':
		notes_was_false = 0

	if c.get('spell_plot', 'False') == 'True':
		plot_was_false = 0

	# image
	if w['view_image'].get_active():
		c['view_image'] = 'True'
	else:
		c['view_image'] = 'False'
	# original title
	if w['view_o_title'].get_active():
		c['view_otitle'] = 'True'
	else:
		c['view_otitle'] = 'False'
	# title
	if w['view_title'].get_active():
		c['view_title'] = 'True'
	else:
		c['view_title'] = 'False'
	# director
	if w['view_director'].get_active():
		c['view_director'] = 'True'
	else:
		c['view_director'] = 'False'
	
	# sortby
	if w['sortby'].get_active():
		field = self.sort_criteria[w['sortby'].get_active()]
		if field:
			c['sortby'] = field
	else:
		c['sortby'] = 'number'
	c['sortby_reverse'] = w['sortby_reverse'].get_active()
	

	# pdf font
	if w['font'].get_filename():
		c['font'] = w['font'].get_filename()

	# spellchecker
	if w['spellchecker'].get_active():
		c['use_gtkspell'] = 'True'
	else:
		c['use_gtkspell'] = 'False'		
	if w['spell_notes'].get_active():
		c['spell_notes'] = 'True'
	else:
		c['spell_notes'] = 'False'
	if w['spell_plot'].get_active():
		c['spell_plot'] = 'True'
	else:
		c['spell_plot'] = 'False'

	# rating image
	c['rating_image'] = str(w['rating_image'].get_active())

	#defaults
	c['media'] = self.media_ids[w['media'].get_active()]
	c['vcodec'] = self.vcodecs_ids[w['vcodec'].get_active()]
	c['condition'] = str(w['condition'].get_active())
	c['region'] = str(w['region'].get_active())
	c['layers'] = str(w['layers'].get_active())
	c['color'] = str(w['color'].get_active())

	# email reminder
	if w['mail_use_auth'].get_active():
		c['mail_use_auth'] = 'True'
	else:
		c['mail_use_auth'] = 'False'

	c['mail_smtp_server'] = w['mail_smtp_server'].get_text()
	c['mail_username'] = w['mail_username'].get_text()
	c['mail_password'] = w['mail_password'].get_text()
	c['mail_email'] = w['mail_email'].get_text()

	# default movie plugin
	if w['default_plugin'].get_active():
		c['default_movie_plugin'] = \
			gutils.on_combo_box_entry_changed(w['default_plugin'])
	# search for:
	c['s_classification'] = w['s_classification'].get_active()
	c['s_country'] = w['s_country'].get_active()
	c['s_director'] = w['s_director'].get_active()
	c['s_genre'] = w['s_genre'].get_active()
	c['s_image'] = w['s_image'].get_active()
	c['s_notes'] = w['s_notes'].get_active()
	c['s_o_site'] = w['s_o_site'].get_active()
	c['s_o_title'] = w['s_o_title'].get_active()
	c['s_plot'] = w['s_plot'].get_active()
	c['s_rating'] = w['s_rating'].get_active()
	c['s_runtime'] = w['s_runtime'].get_active()
	c['s_site'] = w['s_site'].get_active()
	c['s_studio'] = w['s_studio'].get_active()
	c['s_title'] = w['s_title'].get_active()
	c['s_trailer'] = w['s_trailer'].get_active()
	c['s_cast'] = w['s_cast'].get_active()
	c['s_year'] = w['s_year'].get_active()
	
	mcounter = 0
	for p in self.plugins:
		plugin_module = os.path.basename(p).replace('.py','')
		plugin_name = plugin_module.replace('PluginMovie','')
		if gutils.on_combo_box_entry_changed(w['default_plugin']) == plugin_name:
			self.d_plugin = mcounter
		mcounter = mcounter + 1
	self.widgets['add']['source'].set_active(self.d_plugin)

	if self.windows:
		save_reader = ''
	else:
		save_reader = w['epdf_reader'].get_text()

	c['spell_lang'] = w['spell_lang'].get_text()
	c['pdf_reader'] = save_reader

	c['amazon_locale'] = w['amazon_locale'].get_active()
	
	if spell_support:
		if c.get('use_gtkspell', 'False') == 'False' and not was_false:
			self.notes_spell.detach()
			self.plot_spell.detach()
		elif c.get('use_gtkspell', 'False') == 'True' and was_false:
			initialize.initialize_gtkspell(self)
		else:
			pass

		if c.get('use_gtkspell', 'False') == 'True':
			if c.get('spell_plot', 'True') == 'False' and not plot_was_false:
				self.plot_spell.detach()
			elif c.get('spell_plot', 'True') == 'True' and plot_was_false:
				self.plot_spell = gtkspell.Spell(self.widgets['add']['plot'])
				self.plot_spell.set_language(c.get('spell_lang', 'en'))
			else:
				pass

			if c.get('spell_notes', 'True') == 'False' and not notes_was_false:
				self.notes_spell.detach()
			elif c.get('spell_notes', 'True') == 'True' and notes_was_false:
				self.notes_spell = gtkspell.Spell(self.widgets['add']['notes'])
				self.notes_spell.set_language(c.get('spell_lang', 'en'))
			else:
				pass
	self.pdf_reader = save_reader

	# database
	old = {
		'db_type':   c['db_type'],
		'db_host':   c['db_host'],
		'db_port':   c['db_port'],
		'db_name':   c['db_name'],
		'db_user':   c['db_user'],
		'db_passwd': c['db_passwd'],
	}
	c['db_host']   = w['db_host'].get_text()
	c['db_port']   = int(w['db_port'].get_value())
	c['db_name']   = w['db_name'].get_text()
	c['db_user']   = w['db_user'].get_text()
	c['db_passwd'] = w['db_passwd'].get_text()
	db_type = int(w['db_type'].get_active())
	if db_type == 1:
		c['db_type'] = 'postgres'
	elif db_type == 2:
		c['db_type'] = 'mysql'
	else:
		c['db_type'] = 'sqlite'

	if old['db_type'] != c['db_type'] or (old['db_type']!='sqlite' and (\
			old['db_host'] != c['db_host'] or \
			old['db_port'] != c['db_port'] or \
			old['db_name'] != c['db_name'] or \
			old['db_user'] != c['db_user'] or \
			old['db_passwd'] != c['db_passwd'])):
		self.debug.show('DATABASE: connecting to new db server...')
		
		# new database connection
		import sql
		self.initialized = False
		self.db.metadata.clear()
		from sqlalchemy.orm import clear_mappers
		clear_mappers()
		self.db = sql.GriffithSQL(c, self.debug, self.locations['home'])
		self.debug.show("New database Engine: %s" % self.db.metadata.engine.name)
		
		# initialize new database
		self.total = int(self.db.Movie.count())
		self.count_statusbar()
		from initialize	import dictionaries, people_treeview, location_posters
		c['posters'] = None # force update
		location_posters(self.locations, self.config)
		dictionaries(self)
		people_treeview(self, False)
		self.initialized = True
	self.clear_details()
	self.populate_treeview()
	self.go_last()
	c.save()
Exemplo n.º 11
0
    def __init__(self, *args, **kwds):
    
        # debug object
        global debug
        debug = self.debug = gdebug.GriffithDebug()

        gconsole.check_args(self)
        initialize.locations(self)
        initialize.i18n(self, self.locations['i18n'])
        self.posix = (os.name == 'posix')
        
        # Configuration
        if self._tmp_config.find('/') >=0 or self._tmp_config.find('\\') >=0:
            configFileName = self._tmp_config
        else:
            configFileName = os.path.join(self.locations['home'], self._tmp_config)
        self.config = config.Config(file=configFileName)
        initialize.location_posters(self.locations, self.config)
        
        # convert old database
        filename = os.path.join(self.locations['home'], self.config.get('file', 'griffith.db', section='database'))
        if self.config.get('file', 'griffith.db', section='database').lower().endswith('.gri'):
            debug.show('Old database format detected. Converting...')
            from dbupgrade import convert_from_old_db
            if convert_from_old_db(self, filename, os.path.join(self.locations['home'], 'griffith.db')):
                self.config.save()
                initialize.location_posters(self.locations, self.config)
            else:
                print 'Cant convert old database, exiting.'
                sys.exit(4)     
        
        # create/connect db
        from sql import GriffithSQL
        self.db = GriffithSQL(self.config, self.debug, self.locations['home'])
        
        # let's check any console arguments to parse
        gconsole.check_args_with_db(self)
        
        self.filter_l = False
        
        # begin wxGlade: MainFrame.__init__
        kwds["style"] = wx.DEFAULT_FRAME_STYLE
        wx.Frame.__init__(self, *args, **kwds)
        self.window_1 = wx.SplitterWindow(self, -1, style=wx.SP_3D|wx.SP_BORDER|wx.SP_LIVE_UPDATE)
        self.window_1_pane_2 = wx.Panel(self.window_1, -1)
        self.notebook_1 = wx.Notebook(self.window_1_pane_2, -1, style=0)
        self.window_1_pane_1 = wx.Panel(self.window_1, -1)
        
        # Menu Bar
        self.main_frame_menubar = wx.MenuBar()
        wxglade_tmp_menu = wx.Menu()
        self.new = wx.MenuItem(wxglade_tmp_menu, 1, _("&New"), _("Start a blank database"), wx.ITEM_NORMAL)
        wxglade_tmp_menu.AppendItem(self.new)
        self.save_as = wx.MenuItem(wxglade_tmp_menu, 2, _("Save as..."), _("Make a backup of the database"), wx.ITEM_NORMAL)
        wxglade_tmp_menu.AppendItem(self.save_as)
        self.revert = wx.MenuItem(wxglade_tmp_menu, 3, _("Revert"), _("Revert to a previous database backup"), wx.ITEM_NORMAL)
        wxglade_tmp_menu.AppendItem(self.revert)
        wxglade_tmp_menu.AppendSeparator()
        self.import_data = wx.MenuItem(wxglade_tmp_menu, 4, _("Import"), "", wx.ITEM_NORMAL)
        wxglade_tmp_menu.AppendItem(self.import_data)
        self.export_data = wx.MenuItem(wxglade_tmp_menu, 5, _("Export"), "", wx.ITEM_NORMAL)
        wxglade_tmp_menu.AppendItem(self.export_data)
        wxglade_tmp_menu.AppendSeparator()
        self._print = wx.MenuItem(wxglade_tmp_menu, 6, _("Print"), "", wx.ITEM_NORMAL)
        wxglade_tmp_menu.AppendItem(self._print)
        wxglade_tmp_menu.AppendSeparator()
        self.exit = wx.MenuItem(wxglade_tmp_menu, wx.ID_EXIT, _("Exit"), _("Terminate the program"), wx.ITEM_NORMAL)
        wxglade_tmp_menu.AppendItem(self.exit)
        self.main_frame_menubar.Append(wxglade_tmp_menu, _("File"))
        wxglade_tmp_menu = wx.Menu()
        self.add = wx.MenuItem(wxglade_tmp_menu, 7, _("Add"), _("Add a new record"), wx.ITEM_NORMAL)
        wxglade_tmp_menu.AppendItem(self.add)
        self.delete = wx.MenuItem(wxglade_tmp_menu, 8, _("Delete"), _("Deletes a record"), wx.ITEM_NORMAL)
        wxglade_tmp_menu.AppendItem(self.delete)
        self.edit = wx.MenuItem(wxglade_tmp_menu, 9, _("Edit"), _("Edit a record"), wx.ITEM_NORMAL)
        wxglade_tmp_menu.AppendItem(self.edit)
        self.duplicate = wx.MenuItem(wxglade_tmp_menu, 10, _("Duplicate"), _("Duplicates a record"), wx.ITEM_NORMAL)
        wxglade_tmp_menu.AppendItem(self.duplicate)
        wxglade_tmp_menu.AppendSeparator()
        wxglade_tmp_menu_sub = wx.Menu()
        self.open = wx.MenuItem(wxglade_tmp_menu_sub, 11, _("Open"), _("Opens the poster viewer"), wx.ITEM_NORMAL)
        wxglade_tmp_menu_sub.AppendItem(self.open)
        self.fetch = wx.MenuItem(wxglade_tmp_menu_sub, 12, _("Fetch from Amazon"), _("Fetches a poster using Amazon service"), wx.ITEM_NORMAL)
        wxglade_tmp_menu_sub.AppendItem(self.fetch)
        self.erase = wx.MenuItem(wxglade_tmp_menu_sub, 13, _("Erase"), _("Erase the current poster"), wx.ITEM_NORMAL)
        wxglade_tmp_menu_sub.AppendItem(self.erase)
        wxglade_tmp_menu.AppendMenu(wx.NewId(), _("Poster image"), wxglade_tmp_menu_sub, "")
        self.main_frame_menubar.Append(wxglade_tmp_menu, _("Edit"))
        wxglade_tmp_menu = wx.Menu()
        self.view_toolbar = wx.MenuItem(wxglade_tmp_menu, 14, _("Toolbar"), _("Toggles toolbar visibility"), wx.ITEM_CHECK)
        wxglade_tmp_menu.AppendItem(self.view_toolbar)
        wxglade_tmp_menu.AppendSeparator()
        self.view_not_seen = wx.MenuItem(wxglade_tmp_menu, 15, _("Not seen"), _("View only not seen"), wx.ITEM_RADIO)
        wxglade_tmp_menu.AppendItem(self.view_not_seen)
        self.view_loaned = wx.MenuItem(wxglade_tmp_menu, 16, _("Loaned"), _("View only loaned"), wx.ITEM_RADIO)
        wxglade_tmp_menu.AppendItem(self.view_loaned)
        self.view_all = wx.MenuItem(wxglade_tmp_menu, 17, _("All"), _("View all records"), wx.ITEM_RADIO)
        wxglade_tmp_menu.AppendItem(self.view_all)
        self.main_frame_menubar.Append(wxglade_tmp_menu, _("View"))
        wxglade_tmp_menu = wx.Menu()
        self.suggest = wx.MenuItem(wxglade_tmp_menu, 18, _("Suggest"), _("Suggest an unseen film"), wx.ITEM_NORMAL)
        wxglade_tmp_menu.AppendItem(self.suggest)
        wxglade_tmp_menu_sub = wx.Menu()
        self.print_cover_builtin = wx.MenuItem(wxglade_tmp_menu_sub, 19, _("Built-in"), _("Prints a cover with record data"), wx.ITEM_NORMAL)
        wxglade_tmp_menu_sub.AppendItem(self.print_cover_builtin)
        self.prints_cover_custom = wx.MenuItem(wxglade_tmp_menu_sub, 20, _("Custom"), _("Prints a cover with a custom image"), wx.ITEM_NORMAL)
        wxglade_tmp_menu_sub.AppendItem(self.prints_cover_custom)
        wxglade_tmp_menu.AppendMenu(wx.NewId(), _("Print cover"), wxglade_tmp_menu_sub, "")
        wxglade_tmp_menu.AppendSeparator()
        self.preferences = wx.MenuItem(wxglade_tmp_menu, wx.ID_PREFERENCES, _("Preferences"), _("Define the preferences"), wx.ITEM_NORMAL)
        wxglade_tmp_menu.AppendItem(self.preferences)
        self.main_frame_menubar.Append(wxglade_tmp_menu, _("Tools"))
        wxglade_tmp_menu = wx.Menu()
        self.loan_film = wx.MenuItem(wxglade_tmp_menu, 22, _("Loan"), _("Loans a film"), wx.ITEM_NORMAL)
        wxglade_tmp_menu.AppendItem(self.loan_film)
        self.return_film = wx.MenuItem(wxglade_tmp_menu, 23, _("Return"), _("Returns a previously loaned film"), wx.ITEM_NORMAL)
        wxglade_tmp_menu.AppendItem(self.return_film)
        self.email_reminder = wx.MenuItem(wxglade_tmp_menu, 24, _("E-mail reminder"), _("Sends an automatic loan reminder e-mail message "), wx.ITEM_NORMAL)
        wxglade_tmp_menu.AppendItem(self.email_reminder)
        wxglade_tmp_menu.AppendSeparator()
        self.people = wx.MenuItem(wxglade_tmp_menu, 25, _("People"), _("Manages people information"), wx.ITEM_NORMAL)
        wxglade_tmp_menu.AppendItem(self.people)
        self.main_frame_menubar.Append(wxglade_tmp_menu, _("Loans"))
        wxglade_tmp_menu = wx.Menu()
        self.homepage = wx.MenuItem(wxglade_tmp_menu, 26, _("Homepage"), _("Visit Griffith's homepage"), wx.ITEM_NORMAL)
        wxglade_tmp_menu.AppendItem(self.homepage)
        self.forum = wx.MenuItem(wxglade_tmp_menu, 27, _("Forum"), _("Visit Griffith's community forum"), wx.ITEM_NORMAL)
        wxglade_tmp_menu.AppendItem(self.forum)
        self.reportbug = wx.MenuItem(wxglade_tmp_menu, 28, _("Reportbug"), _("Report a new bug"), wx.ITEM_NORMAL)
        wxglade_tmp_menu.AppendItem(self.reportbug)
        wxglade_tmp_menu.AppendSeparator()
        self.about = wx.MenuItem(wxglade_tmp_menu, wx.ID_ABOUT, _("About"), _("Display information about this program"), wx.ITEM_NORMAL)
        wxglade_tmp_menu.AppendItem(self.about)
        self.main_frame_menubar.Append(wxglade_tmp_menu, _("Help"))
        self.SetMenuBar(self.main_frame_menubar)
        # Menu Bar end
        self.main_frame_statusbar = self.CreateStatusBar(1, 0)
        
        # Tool Bar
        self.main_frame_toolbar = wx.ToolBar(self, -1, style=wx.TB_HORIZONTAL|wx.TB_DOCKABLE|wx.TB_TEXT)
        self.SetToolBar(self.main_frame_toolbar)
        self.main_frame_toolbar.AddLabelTool(1004, _("First"), wx.Bitmap("images/go-first.png", wx.BITMAP_TYPE_ANY), wx.NullBitmap, wx.ITEM_NORMAL, "", "")
        self.main_frame_toolbar.AddLabelTool(1003, _("Previous"), wx.Bitmap("images/go-previous.png", wx.BITMAP_TYPE_ANY), wx.NullBitmap, wx.ITEM_NORMAL, "", "")
        self.main_frame_toolbar.AddLabelTool(1004, _("Next"), wx.Bitmap("images/go-next.png", wx.BITMAP_TYPE_ANY), wx.NullBitmap, wx.ITEM_NORMAL, "", "")
        self.main_frame_toolbar.AddLabelTool(1005, _("Last"), wx.Bitmap("images/go-last.png", wx.BITMAP_TYPE_ANY), wx.NullBitmap, wx.ITEM_NORMAL, "", "")
        self.main_frame_toolbar.AddSeparator()
        self.main_frame_toolbar.AddLabelTool(1006, _("Add"), wx.Bitmap("images/document-new.png", wx.BITMAP_TYPE_ANY), wx.NullBitmap, wx.ITEM_NORMAL, _("Add a new film"), _("Add a new film to the collection"))
        self.main_frame_toolbar.AddLabelTool(1008, _("Delete"), wx.Bitmap("images/user-trash.png", wx.BITMAP_TYPE_ANY), wx.NullBitmap, wx.ITEM_NORMAL, _("Delete this film"), _("Deletes this film from collection"))
        self.main_frame_toolbar.AddLabelTool(1009, _("Edit"), wx.Bitmap("images/edit-select-all.png", wx.BITMAP_TYPE_ANY), wx.NullBitmap, wx.ITEM_NORMAL, _("Edit film details"), _("Edit film details"))
        self.main_frame_toolbar.AddSeparator()
        self.main_frame_toolbar.AddLabelTool(1010, _("Webpage"), wx.Bitmap("images/applications-internet.png", wx.BITMAP_TYPE_ANY), wx.NullBitmap, wx.ITEM_NORMAL, _("Go to the film webpage"), _("Go to the film webpage"))
        self.main_frame_toolbar.AddSeparator()
        self.main_frame_toolbar.AddLabelTool(1013, _("Amazon Poster"), wx.Bitmap("images/applications-graphics.png", wx.BITMAP_TYPE_ANY), wx.NullBitmap, wx.ITEM_NORMAL, _("Add Poster From Amazon"), _("Try to find a poster using the Amazon Services on the web"))
        self.main_frame_toolbar.AddSeparator()
        self.main_frame_toolbar.AddLabelTool(1014, _("People"), wx.Bitmap("images/system-users.png", wx.BITMAP_TYPE_ANY), wx.NullBitmap, wx.ITEM_NORMAL, "", "")
        # Tool Bar end
        self.label_1 = wx.StaticText(self, -1, _("Filter"))
        self.tc_filter = wx.TextCtrl(self, -1, "")
        self.bt_clear_filter = wx.Button(self, -1, _("clear"))
        self.cb_criteria = wx.ComboBox(self, -1, choices=[], style=wx.CB_DROPDOWN)
        self.main_listcontrol = wx.ListCtrl(self.window_1_pane_1, -1, style=wx.LC_REPORT|wx.SUNKEN_BORDER)
        self.number = wx.StaticText(self.window_1_pane_2, -1, _("label_2"))
        self.o_title = wx.StaticText(self.window_1_pane_2, -1, _("label_2"))
        self.title = wx.StaticText(self.window_1_pane_2, -1, _("label_2"))
        self.poster = wx.BitmapButton(self.window_1_pane_2, -1, wx.NullBitmap, style=wx.BU_AUTODRAW)
        self.plot = wx.TextCtrl(self.notebook_1, -1, "", style=wx.TE_MULTILINE|wx.TE_READONLY|wx.TE_RICH2|wx.TE_AUTO_URL|wx.TE_LINEWRAP|wx.TE_WORDWRAP)
        self.cast = wx.TextCtrl(self.notebook_1, -1, "", style=wx.TE_MULTILINE|wx.TE_READONLY|wx.TE_RICH2|wx.TE_AUTO_URL|wx.TE_LINEWRAP|wx.TE_WORDWRAP)
        self.notes = wx.TextCtrl(self.notebook_1, -1, "", style=wx.TE_MULTILINE|wx.TE_READONLY|wx.TE_RICH2|wx.TE_AUTO_URL|wx.TE_LINEWRAP|wx.TE_WORDWRAP)

        self.__set_properties()
        self.__do_layout()

        self.Bind(wx.EVT_MENU, self.OnNew, self.new)
        self.Bind(wx.EVT_MENU, self.OnSaveAs, self.save_as)
        self.Bind(wx.EVT_MENU, self.OnRevert, self.revert)
        self.Bind(wx.EVT_MENU, self.OnImport, self.import_data)
        self.Bind(wx.EVT_MENU, self.OnExport, self.export_data)
        self.Bind(wx.EVT_MENU, self.OnPrint, self._print)
        self.Bind(wx.EVT_MENU, self.OnExit, self.exit)
        self.Bind(wx.EVT_MENU, self.OnAdd, self.add)
        self.Bind(wx.EVT_MENU, self.OnDelete, self.delete)
        self.Bind(wx.EVT_MENU, self.OnEdit, self.edit)
        self.Bind(wx.EVT_MENU, self.onDuplicate, self.duplicate)
        self.Bind(wx.EVT_MENU, self.OnPosterOpen, self.open)
        self.Bind(wx.EVT_MENU, self.OnPosterFromAmazon, self.fetch)
        self.Bind(wx.EVT_MENU, self.OnPosterErase, self.erase)
        self.Bind(wx.EVT_MENU, self.OnViewToolbar, self.view_toolbar)
        self.Bind(wx.EVT_MENU, self.OnViewNotSeen, self.view_not_seen)
        self.Bind(wx.EVT_MENU, self.OnViewLoaned, self.view_loaned)
        self.Bind(wx.EVT_MENU, self.OnViewAll, self.view_all)
        self.Bind(wx.EVT_MENU, self.OnSuggest, self.suggest)
        self.Bind(wx.EVT_MENU, self.OnPrintCoverBuiltin, self.print_cover_builtin)
        self.Bind(wx.EVT_MENU, self.OnPrintCoverCustom, self.prints_cover_custom)
        self.Bind(wx.EVT_MENU, self.OnPreferences, self.preferences)
        self.Bind(wx.EVT_MENU, self.OnLoanFilm, self.loan_film)
        self.Bind(wx.EVT_MENU, self.OnReturnFilm, self.return_film)
        self.Bind(wx.EVT_MENU, self.OnEmailReminder, self.email_reminder)
        self.Bind(wx.EVT_MENU, self.OnPeople, self.people)
        self.Bind(wx.EVT_MENU, self.OnHomepage, self.homepage)
        self.Bind(wx.EVT_MENU, self.OnForum, self.forum)
        self.Bind(wx.EVT_MENU, self.OnReportBug, self.reportbug)
        self.Bind(wx.EVT_MENU, self.OnAbout, self.about)
        self.Bind(wx.EVT_TOOL, self.OnFirst, id=1004)
        self.Bind(wx.EVT_TOOL, self.OnPrevious, id=1003)
        self.Bind(wx.EVT_TOOL, self.OnNext, id=1004)
        self.Bind(wx.EVT_TOOL, self.OnLast, id=1005)
        self.Bind(wx.EVT_TOOL, self.OnAdd, id=1006)
        self.Bind(wx.EVT_TOOL, self.OnDelete, id=1008)
        self.Bind(wx.EVT_TOOL, self.OnEdit, id=1009)
        self.Bind(wx.EVT_TOOL, self.OnWebpage, id=1010)
        self.Bind(wx.EVT_TOOL, self.OnAddAmazonPoster, id=1013)
        self.Bind(wx.EVT_TOOL, self.OnPeople, id=1014)
        self.Bind(wx.EVT_TEXT, self.OnFilterChange, self.tc_filter)
        self.Bind(wx.EVT_BUTTON, self.OnClearFilter, self.bt_clear_filter)
        self.Bind(wx.EVT_TEXT, self.OnChangeCriteria, self.cb_criteria)
        self.Bind(wx.EVT_LIST_DELETE_ITEM, self.OnMainListDelete, self.main_listcontrol)
        self.Bind(wx.EVT_LIST_ITEM_SELECTED, self.OnMainListSelected, self.main_listcontrol)
        self.Bind(wx.EVT_LIST_COL_CLICK, self.OnMainLColumnClicked, self.main_listcontrol)
        self.Bind(wx.EVT_BUTTON, self.OnPosterClick, self.poster)
        # end wxGlade
        
        initialize.locations_misc(self)
        #initialize.toolbar(self)
        initialize.treeview(self)
        #initialize.loans_treeview(self)
        #initialize.lang_treeview(self)
        initialize.dictionaries(self)
        initialize.combos(self)
        #initialize.preferences(self)
        #initialize.movie_plugins(self)
        #initialize.export_plugins(self)
        #initialize.people_treeview(self)
        #initialize.web_results(self)
        self.initialized = True
        #self.restore_state()
        #self.clear_details()
        self.populate_treeview()
Exemplo n.º 12
0
def save_preferences(self):
    w = self.widgets['preferences']
    c = self.config
    global spell_support

    was_false = notes_was_false = plot_was_false = 1

    if c.get('gtkspell', False, section='spell') == True:
        was_false = 0

    if c.get('notes', False, section='spell') == True:
        notes_was_false = 0

    if c.get('plot', False, section='spell') == True:
        plot_was_false = 0

    # number
    if w['view_number'].get_active():
        c.set('number', 'True', section='mainlist')
    else:
        c.set('number', 'False', section='mainlist')
    # image
    if w['view_image'].get_active():
        c.set('image', 'True', section='mainlist')
    else:
        c.set('image', 'False', section='mainlist')
    # original title
    if w['view_o_title'].get_active():
        c.set('otitle', 'True', section='mainlist')
    else:
        c.set('otitle', 'False', section='mainlist')
    # title
    if w['view_title'].get_active():
        c.set('title', 'True', section='mainlist')
    else:
        c.set('title', 'False', section='mainlist')
    # director
    if w['view_director'].get_active():
        c.set('director', 'True', section='mainlist')
    else:
        c.set('director', 'False', section='mainlist')
    # genre
    if w['view_genre'].get_active():
        c.set('genre', 'True', section='mainlist')
    else:
        c.set('genre', 'False', section='mainlist')
    # seen
    if w['view_seen'].get_active():
        c.set('seen', 'True', section='mainlist')
    else:
        c.set('seen', 'False', section='mainlist')
    # year
    if w['view_year'].get_active():
        c.set('year', 'True', section='mainlist')
    else:
        c.set('year', 'False', section='mainlist')
    # runtime
    if w['view_runtime'].get_active():
        c.set('runtime', 'True', section='mainlist')
    else:
        c.set('runtime', 'False', section='mainlist')
    # rating
    if w['view_rating'].get_active():
        c.set('rating', 'True', section='mainlist')
    else:
        c.set('rating', 'False', section='mainlist')
    # created
    if w['view_created'].get_active():
        c.set('created', 'True', section='mainlist')
    else:
        c.set('created', 'False', section='mainlist')
    # updated
    if w['view_updated'].get_active():
        c.set('updated', 'True', section='mainlist')
    else:
        c.set('updated', 'False', section='mainlist')

    # sortby
    if w['sortby'].get_active():
        field = self.sort_criteria[w['sortby'].get_active()]
        if field:
            c.set('sortby', field, section='mainlist')
    else:
        c.set('sortby', 'number', section='mainlist')
    c.set('sortby_reverse',
          w['sortby_reverse'].get_active(),
          section='mainlist')

    c.set('limit', str(int(w['s_limit'].get_value())), section='mainlist')

    # pdf font
    if w['font'].get_filename():
        c['font'] = w['font'].get_filename()
    c['font_size'] = int(w['font_size'].get_value())

    # pdf elements
    pdf_elements = ''
    for child in w['pdf_elements_table']:
        if child.get_active():
            pdf_elements = pdf_elements + child.get_name()[4:] + ','
    if pdf_elements:
        c.set('pdf_elements', pdf_elements[:-1])
    else:
        c.set('pdf_elements', pdf_elements)

    # spellchecker
    if w['spellchecker'].get_active():
        c.set('gtkspell', True, section='spell')
    else:
        c.set('gtkspell', False, section='spell')
    if w['spell_notes'].get_active():
        c.set('notes', True, section='spell')
    else:
        c.set('notes', False, section='spell')
    if w['spell_plot'].get_active():
        c.set('plot', True, section='spell')
    else:
        c.set('plot', False, section='spell')

    # rating image
    c['rating_image'] = str(w['rating_image'].get_active())

    #defaults
    media_id = self.media_ids[w['media'].get_active()]
    if media_id is None:
        media_id = 0
    c.set('media', media_id, section='defaults')
    vcodec_id = self.vcodecs_ids[w['vcodec'].get_active()]
    if vcodec_id is None:
        vcodec_id = 0
    c.set('vcodec', vcodec_id, section='defaults')
    c.set('condition', str(w['condition'].get_active()), section='defaults')
    c.set('region', str(w['region'].get_active()), section='defaults')
    c.set('layers', str(w['layers'].get_active()), section='defaults')
    c.set('color', str(w['color'].get_active()), section='defaults')
    c.set('seen', str(w['seen'].get_active()), section='defaults')

    # email reminder
    if w['mail_use_auth'].get_active():
        c.set('use_auth', True, section='mail')
    else:
        c.set('use_auth', False, section='mail')

    if w['mail_use_tls'].get_active():
        c.set('mail_use_tls', True, section='mail')
    else:
        c.set('mail_use_tls', False, section='mail')

    c.set('smtp_server', w['mail_smtp_server'].get_text(), section='mail')
    c.set('mail_smtp_port', w['mail_smtp_port'].get_text(), section='mail')

    c.set('username', w['mail_username'].get_text(), section='mail')
    c.set('password', w['mail_password'].get_text(), section='mail')
    c.set('email', w['mail_email'].get_text(), section='mail')

    # default movie plugin
    if w['default_plugin'].get_active():
        c['default_movie_plugin'] = \
            gutils.on_combo_box_entry_changed(w['default_plugin'])
    # search for:
    c.set('s_classification',
          w['s_classification'].get_active(),
          section='add')
    c.set('s_country', w['s_country'].get_active(), section='add')
    c.set('s_director', w['s_director'].get_active(), section='add')
    c.set('s_genre', w['s_genre'].get_active(), section='add')
    c.set('s_image', w['s_image'].get_active(), section='add')
    c.set('s_notes', w['s_notes'].get_active(), section='add')
    c.set('s_o_site', w['s_o_site'].get_active(), section='add')
    c.set('s_o_title', w['s_o_title'].get_active(), section='add')
    c.set('s_plot', w['s_plot'].get_active(), section='add')
    c.set('s_rating', w['s_rating'].get_active(), section='add')
    c.set('s_runtime', w['s_runtime'].get_active(), section='add')
    c.set('s_site', w['s_site'].get_active(), section='add')
    c.set('s_studio', w['s_studio'].get_active(), section='add')
    c.set('s_title', w['s_title'].get_active(), section='add')
    c.set('s_trailer', w['s_trailer'].get_active(), section='add')
    c.set('s_cast', w['s_cast'].get_active(), section='add')
    c.set('s_year', w['s_year'].get_active(), section='add')
    c.set('s_screenplay', w['s_screenplay'].get_active(), section='add')
    c.set('s_cameraman', w['s_cameraman'].get_active(), section='add')
    c.set('s_resolution', w['s_resolution'].get_active(), section='add')
    c.set('s_barcode', w['s_barcode'].get_active(), section='add')

    mcounter = 0
    for p in self.plugins:
        plugin_module = os.path.basename(p).replace('.py', '')
        plugin_name = plugin_module.replace('PluginMovie', '')
        if gutils.on_combo_box_entry_changed(
                w['default_plugin']) == plugin_name:
            break
        mcounter = mcounter + 1
    self.widgets['add']['source'].set_active(mcounter)

    save_reader = w['epdf_reader'].get_text()

    c.set('lang', w['spell_lang'].get_text(), section='spell')
    c['pdf_reader'] = save_reader

    if spell_support:
        if c.get('gtkspell', False,
                 section='spell') == False and not was_false:
            self.notes_spell.detach()
            self.plot_spell.detach()
        elif c.get('gtkspell', False, section='spell') == True and was_false:
            initialize.spellcheck(self)
        else:
            pass

        if c.get('gtkspell', False, section='spell') == True:
            if c.get('plot', True,
                     section='spell') == False and not plot_was_false:
                self.plot_spell.detach()
            elif c.get('plot', True,
                       section='spell') == True and plot_was_false:
                self.plot_spell = gtkspell.Spell(self.widgets['add']['plot'])
                self.plot_spell.set_language(
                    c.get('lang', 'en', section='spell'))
            else:
                pass

            if c.get('notes', True,
                     section='spell') == False and not notes_was_false:
                self.notes_spell.detach()
            elif c.get('notes', True,
                       section='spell') == True and notes_was_false:
                self.notes_spell = gtkspell.Spell(self.widgets['add']['notes'])
                self.notes_spell.set_language(
                    c.get('lang', 'en', section='spell'))
            else:
                pass
    self.pdf_reader = save_reader

    # extensions settings
    for ext_name in plugins.extensions.by_name:
        preferenceswidgets = plugins.extensions.by_name[
            ext_name].preferenceswidgets
        for prefname in preferenceswidgets:
            widget = preferenceswidgets[prefname]
            if isinstance(widget, gtk.CheckButton):
                value = widget.get_active()
            elif isinstance(widget, gtk.Entry):
                value = widget.get_text()
            elif isinstance(widget, gtk.ComboBox):
                iter = widget.get_active_iter()
                if iter:
                    value = widget.get_model().get_value(iter, 1)
            else:
                log.error('widget type not supported %s', type(widget))
                continue
            c.set("%s_%s" % (ext_name, prefname), value, section='extensions')

    # database
    old = c.to_dict(section='database')

    c.set('host', w['db_host'].get_text(), section='database')
    c.set('port', int(w['db_port'].get_value()), section='database')
    c.set('name', w['db_name'].get_text(), section='database')
    c.set('user', w['db_user'].get_text(), section='database')
    c.set('passwd', w['db_passwd'].get_text(), section='database')
    db_type = int(w['db_type'].get_active())
    if db_type == 1:
        c.set('type', 'postgres', section='database')
    elif db_type == 2:
        c.set('type', 'mysql', section='database')
    elif db_type == 3:
        c.set('type', 'mssql', section='database')
    else:
        c.set('type', 'sqlite', section='database')

    if old['type'] != c.get('type', section='database') or (old['type']!='sqlite' and (\
            old['host'] != c.get('host', section='database') or \
            old['port'] != c.get('port', section='database') or \
            old['user'] != c.get('user', section='database') or \
            old['passwd'] != c.get('passwd', section='database'))) or \
            old['name'] != c.get('name', section='database'):
        log.info('DATABASE: connecting to new db server...')
        import sql
        from sqlalchemy.exc import InvalidRequestError
        from initialize import dictionaries, people_treeview

        # new database connection
        self.initialized = False
        if c.has_key('posters'):
            c['posters'] = None  # force update
        try:
            self.db.dispose()
            self.db = sql.GriffithSQL(c, self.locations['home'], fallback=True)
        except InvalidRequestError, e:
            log.exception('')
            c.set('type', 'sqlite', section='database')
            w['db_type'].set_active(0)
            self.db = sql.GriffithSQL(c, self.locations['home'])

        log.info("New database Engine: %s" % self.db.session.bind.engine.name)

        # initialize new database
        self.total = int(self.db.session.query(db.Movie).count())
        self.count_statusbar()
        dictionaries(self)
        people_treeview(self, False)
        self.initialized = True