예제 #1
0
	def add_language(self, name):
		if name == None or name == '':
			self.debug.show("You didn't write name for new language")
			return False
		name = gutils.gescape(name)
		# check if language already exists
		for language in self.get_all_data("languages", what="name"):
			if name == language['name']:
				self.debug.show("Language '%s' already exists"%name)
				return False
		self.debug.show("Adding '%s' language to database..."%name)
		try:
			self.cursor.execute("INSERT INTO 'languages'('id', 'name') VALUES (Null,'"+
				gutils.gescape(name)+"');")
		except:
			return False
		return True
예제 #2
0
	def add_collection(self, name):
		# check if volume already exists
		for collection in self.get_all_data("collections", what="name"):
			if name == collection['name']:
				self.debug.show("Collection '%s' already exists"%name)
				return False
		self.debug.show("Adding '%s' collection to database..."%name)
		try:
			self.cursor.execute("INSERT INTO 'collections'('id', 'name', 'loaned') VALUES (Null,'"+
				gutils.gescape(name)+"','0');")
		except:
			return False
		return True
예제 #3
0
def change_filter(self):
	self.all_movies.set_active(2)
	collection_id = self.collection_combo_ids[self.f_col.get_active()]
	where_clause = ''
	text = gutils.gescape(self.e_filter.get_text())
	if(len(text)==0):
		if collection_id != 0:
			where_clause = " collection_id = '%s'" % collection_id
		data = self.db.get_all_data(where=where_clause, order_by="number ASC")
	else:
		text = gutils.gescape(text)
		criteria = self.sort_criteria[self.filter_criteria.get_active()]
		if {"year":None, "runtime":None, "num_media":None, "rating":None}.has_key(criteria):
			where_clause = criteria + " = '"+text+"'"
		else:
			where_clause = criteria + " LIKE '%" + text + "%'"
		if collection_id != 0:
			where_clause += " AND collection_id = '%s'" % collection_id
		data = self.db.get_all_data(where=where_clause, order_by="number ASC")
	self.total_filter = len(data)
	self.populate_treeview(data)
	self.go_last()
예제 #4
0
def change_filter(self):
    x = 0
    text = gutils.gescape(self.tc_filter.GetValue())

    from sqlalchemy import select

    statement = select(self.db.Movie.c)

    if text:
        criteria = self.search_criteria[self.cb_criteria.GetSelection()]
        if criteria in ("year", "runtime", "media_num", "rating"):
            statement.append_whereclause(self.db.Movie.c[criteria] == text)
        else:
            statement.append_whereclause(self.db.Movie.c[criteria].like("%" + text + "%"))

    self.populate_treeview(statement)
예제 #5
0
	def add_tag(self, name):
		if name == None or name == '':
			self.debug.show("You didn't write name for new tag")
			return False
		# check if tag already exists
		for tag in self.get_all_data("tags", what="name"):
			if name == tag['name']:
				self.debug.show("Tag '%s' already exists"%name)
				return False
		self.debug.show("Adding '%s' tag to database..."%name)
		try:
			self.cursor.execute("INSERT INTO 'tags'('id', 'name') VALUES (Null,'"+
				gutils.gescape(name)+"');")
		except:
			return False
		return True
예제 #6
0
def change_filter(self):
	x = 0
	text = gutils.gescape(self.widgets['filter']['text'].get_text())
	
	from sqlalchemy import select
	statement = select(self.db.Movie.c)
	
	if text:
		criteria = self.search_criteria[self.widgets['filter']['criteria'].get_active()]
		if criteria in ('year', 'runtime', 'media_num', 'rating'):
			statement.append_whereclause(self.db.Movie.c[criteria]==text)
		else:
			statement.append_whereclause(self.db.Movie.c[criteria].like('%'+text+'%'))
	if self.widgets['filter']['text'].is_focus():
		if len(text)<4: # filter mode
			limit = int(self.config.get('limit', 0, section='mainlist'))
			if limit > 0:
				statement.limit = limit
	self.populate_treeview(statement)
예제 #7
0
def change_filter_update_whereclause(self, statement):
    from sqlalchemy import or_
    text = gutils.gescape(self.widgets['filter']['text'].get_text().decode('utf-8'))
    if text:
        (criterianame, criteria) = self.search_criteria_sorted[self.widgets['filter']['criteria'].get_active()]
        if criteria in ('year', 'runtime', 'media_num', 'rating'):
            statement.append_whereclause(db.tables.movies.c[criteria]==text)
        elif criteria == 'any':
            crits = [ ]
            for crit in ( 'director', 'title', 'o_title', 'cameraman', 'cast', 'year', 'screenplay', 'genre', 'studio', 'classification', 'country' ):
                crits.append(db.tables.movies.c[crit].like('%'+text+'%'))
            statement.append_whereclause(or_(*crits))
        else:
            statement.append_whereclause(db.tables.movies.c[criteria].like('%'+text+'%'))
    if self.widgets['filter']['text'].is_focus():
        if len(text)<4: # filter mode
            limit = int(self.config.get('limit', 0, section='mainlist'))
            if limit > 0:
                statement.limit = limit
예제 #8
0
def change_filter(self):
	x = 0
	text = gutils.gescape(self.widgets['filter']['text'].get_text())
	
	from sqlalchemy import select
	statement = select(self.db.Movie.c)
	
	if text:
		criteria = self.search_criteria[self.widgets['filter']['criteria'].get_active()]
		if {'year':None, 'runtime':None, 'media_num':None, 'rating':None}.has_key(criteria):
			statement.append_whereclause(self.db.Movie.c[criteria]==text)
		else:
			statement.append_whereclause(self.db.Movie.c[criteria].like('%'+text+'%'))
	if len(text)>0: # filter mode
		limit = int(self.config.get('s_limit', 0))
		if limit > 0:
			statement.limit = limit
	self.populate_treeview(statement)
	self.go_last()
예제 #9
0
def change_filter(self):
    x = 0
    text = gutils.gescape(self.widgets['filter']['text'].get_text().decode('utf-8'))
    
    from sqlalchemy import select
    from sqlalchemy.orm.util import class_mapper, object_mapper
    statement = select(db.movies_table.columns, bind=self.db.session.bind)
    
    if text:
        criteria = self.search_criteria[self.widgets['filter']['criteria'].get_active()]
        if criteria in ('year', 'runtime', 'media_num', 'rating'):
            statement.append_whereclause(db.movies_table.c[criteria]==text)
        else:
            statement.append_whereclause(db.movies_table.c[criteria].like('%'+text+'%'))
    if self.widgets['filter']['text'].is_focus():
        if len(text)<4: # filter mode
            limit = int(self.config.get('limit', 0, section='mainlist'))
            if limit > 0:
                statement.limit = limit
    self.populate_treeview(statement)
예제 #10
0
	def remove_collection(self, id=None, name=None):
		if id != None:
			name = self.get_value(field="name", table="collections", where="id = '%s'" % id)
		elif name != None and name != '' and id == None:
			name =	gutils.gescape(name)
			id = self.get_value(field="id", table="collections", where="name = '%s'" % name)
			id = str(int(id))
		if str(id) == '0' or id == None:
			self.debug.show("You have to select collection first")
			return False
		movies = int(self.get_value(field="count(id)", table="movies", where="collection_id = '%s'" % id))
		if movies > 0:
			gutils.warning(self, msg="%s movie(s) in this collection.\nRemoval is possible only if there is no movie assigned to collection"%str(movies))
			return False
		self.debug.show("Removing '%s' collection (id=%s) from database..."%(name, id))
		try:
			self.cursor.execute("DELETE FROM collections WHERE id = '%s'" % id)
		except:
				return False
		return True
예제 #11
0
	def remove_tag(self, id=None, name=None):
		if id != None:
			name = self.get_value(field="name", table="tags", where="id = '%s'"%id)
		elif name != None and name != '' and id == None:
			name =	gutils.gescape(name)
			id = self.get_value(field="id", table="tags", where="name = '%s'"%name)
			id = str(int(id))
		if str(id) == '0' or id == None:
			self.debug.show("You have to select tag first")
			return False

		movies = int(self.get_value(field="count(movie_id)", table="movie_tag", where="tag_id = '%s'" % id))
		if movies > 0:
			gutils.warning(self, msg="%s movie(s) are assigned to this tag.\nChange movie details first!"%str(movies))
			return False

		self.debug.show("Removing '%s' tag (id=%s) from database..."%(name, id))
		try:
			self.cursor.execute("DELETE FROM tags WHERE id = '%s'" % id)
		except:
				return False
		return True
예제 #12
0
def change_filter_update_whereclause(self, statement):
    from sqlalchemy import or_
    text = gutils.gescape(
        self.widgets['filter']['text'].get_text().decode('utf-8'))
    if text:
        (criterianame, criteria) = self.search_criteria_sorted[
            self.widgets['filter']['criteria'].get_active()]
        if criteria in ('year', 'runtime', 'media_num', 'rating'):
            statement.append_whereclause(db.tables.movies.c[criteria] == text)
        elif criteria == 'any':
            crits = []
            for crit in ('director', 'title', 'o_title', 'cameraman', 'cast',
                         'year', 'screenplay', 'genre', 'studio',
                         'classification', 'country'):
                crits.append(db.tables.movies.c[crit].like('%' + text + '%'))
            statement.append_whereclause(or_(*crits))
        else:
            statement.append_whereclause(
                db.tables.movies.c[criteria].like('%' + text + '%'))
    if self.widgets['filter']['text'].is_focus():
        if len(text) < 4:  # filter mode
            limit = int(self.config.get('limit', 0, section='mainlist'))
            if limit > 0:
                statement.limit = limit
예제 #13
0
def update(self):
	id = self.e_movie_id.get_text()
	if self.db.get_value(field="id", table="movies", where="id='%s'"%str(id)) == None:
		self.debug.show("Trying to update not existing movie. Aborting")
		return False

	number = self.e_number.get_text()
	self.db.cursor.execute("SELECT id, title FROM movies WHERE number='%s'" % number)
	tmp = self.db.cursor.fetchall()
	if len(tmp) > 0:
		if (int(tmp[0]['id']) != int(id)):
			gutils.error(self, msg=_("This number is already assigned to:\n %s!") % tmp[0]['title'])
			return False
	
	self.db.cursor.execute("SELECT loaned, volume_id, collection_id FROM movies WHERE id='%s'" % id)
	loaned, volume_id, collection_id = self.db.cursor.fetchall()[0]
	new_volume_id = self.volume_combo_ids[self.e_volume_combo.get_active()]
	new_collection_id = self.collection_combo_ids[self.e_collection_combo.get_active()]
	if loaned:
		if collection_id>0 and collection_id != new_collection_id:
			gutils.error(self, msg=_("You can't change collection while it is loaned!"))
			return False
		if volume_id>0 and volume_id != new_volume_id:
			gutils.error(self, msg=_("You can't change volume while it is loaned!"))
			return False
	plot_buffer = self.e_plot.get_buffer()
	with_buffer = self.e_with.get_buffer()
	obs_buffer = self.e_obs.get_buffer()
	seen = '0'
	if self.e_seen.get_active():
		seen = '1'
	if (self.e_original_title.get_text()<>''):
		self.db.cursor.execute(
			"UPDATE movies SET original_title = '"
			+gutils.gescape(self.e_original_title.get_text())+"', title ='"
			+gutils.gescape(self.e_title.get_text())+"', director='"
			+gutils.gescape(self.e_director.get_text())+"', plot ='"
			+gutils.gescape(plot_buffer.get_text(plot_buffer.get_start_iter(),plot_buffer.get_end_iter()))+"', year='"
			+self.e_year.get_text()+"', runtime ='"
			+self.e_runtime.get_text()+"',actors = '"
			+gutils.gescape(with_buffer.get_text(with_buffer.get_start_iter(),with_buffer.get_end_iter()))+"', country='"
			+self.e_country.get_text()+"', genre ='"
			+self.e_genre.get_text()+"', rating ='"
			+str(int(self.rating_slider.get_value()))+"', classification ='"
			+self.e_classification.get_text()+"', studio = '"
			+self.e_studio.get_text()+"', site ='"
			+self.e_site.get_text()+"', condition ="
		
			+str(self.e_condition.get_active())+", color ="
			+str(self.e_color.get_active())+", region ="
			+str(self.e_region.get_active())+", layers ="
			+str(self.e_layers.get_active())+", imdb ='"
			
			+self.e_imdb.get_text()+"', seen ='"
			+seen+"', obs ='"
			+gutils.gescape(obs_buffer.get_text(obs_buffer.get_start_iter(),obs_buffer.get_end_iter()))+"', trailer='"
			+self.e_trailer.get_text()
			+"', media ='" + str(self.e_media.get_active())
			+"', num_media ='" + self.e_discs.get_text()
			+"', volume_id='" + str(new_volume_id)
			+"', collection_id='" + str(new_collection_id)
			+"', number = '" + number
			+"' WHERE id = '" + id +"'"
		)

		# languages
		selected = {}
		self.db.cursor.execute("DELETE FROM movie_lang WHERE movie_id = '%s';" % id)	# remove old data
		for i in self.e_languages:
			if i['id'].get_active() > 0:
				lang_id = self.languages_ids[i['id'].get_active()]
				type = i['type'].get_active()
				if not selected.has_key(lang_id):
					selected[lang_id] = {}
				selected[lang_id][type] = True
		for lang in selected.keys():
			for type in selected[lang].keys():
				self.db.cursor.execute("INSERT INTO movie_lang(movie_id, lang_id, type) VALUES ('%s', '%s', '%s');" % (id, lang, type) )

		# tags
		selected = {}
		self.db.cursor.execute("DELETE FROM movie_tag WHERE movie_id = '%s';" % id)
		for i in self.tags_ids:
			if self.e_tags[i].get_active() == True:
				selected[self.tags_ids[i]] = 1
		for i in selected.keys():
			self.db.cursor.execute("INSERT INTO movie_tag(movie_id, tag_id) VALUES ('%s', '%s');" % (id, i) )

		self.update_statusbar(_("Movie information has been updated"))
		# update main treelist
		treeselection = self.main_treeview.get_selection()
		(tmp_model, tmp_iter) = treeselection.get_selected()
		tmp_model.set_value(tmp_iter,3,self.e_original_title.get_text())
		tmp_model.set_value(tmp_iter,4,self.e_title.get_text())
		tmp_model.set_value(tmp_iter,5,self.e_director.get_text())
		tmp_model.set_value(tmp_iter,5,self.e_director.get_text())
		tmp_model.set_value(tmp_iter,1,'%004d' % int(number))
		
		# update volume/collection combo
		self.e_volume_combo.set_active(int(new_volume_id))
		self.e_collection_combo.set_active(int(new_collection_id))
		self.e_volume_id.set_text(str(new_volume_id))
		self.e_collection_id.set_text(str(new_collection_id))
		self.e_volume_id.hide()
		self.e_collection_id.hide()

		# refresh winbdow
		self.treeview_clicked() 
	else:
		gutils.error(self.w_results,_("You should fill the original title"))
예제 #14
0
def clone_movie(self):
	treeselection = self.main_treeview.get_selection()
	(tmp_model, tmp_iter) = treeselection.get_selected()	
	m_id = tmp_model.get_value(tmp_iter, 1)
	movie_id = self.db.get_value(field="id", table="movies", where="number='%s'"%m_id)
	
	if movie_id == None:
		return false
		
	row = self.db.select_movie_by_num(m_id)[0]
	next_number = gutils.find_next_available(self)
	new_image = str(row['image']) + '_' + str(next_number)
	self.db.cursor.execute(
		"""INSERT INTO 'movies' ('id','original_title','title','director','plot','image',
			'year','runtime','actors','country','genre','media','classification','studio',
			'site','color','region','layers','condition','imdb','trailer','obs','num_media',
			'rating','loaned','seen','number')
		VALUES (Null,'%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s',
			'%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','0','%s','%s')""" % \
		(gutils.gescape(str(row['original_title'])), \
		gutils.gescape(str(row['title'])), \
		gutils.gescape(str(row['director'])), \
		gutils.gescape(str(row['plot'])), \
		gutils.gescape(new_image), \
		gutils.gescape(str(row['year'])), \
		gutils.gescape(str(row['runtime'])), \
		gutils.gescape(str(row['actors'])), \
		gutils.gescape(str(row['country'])), \
		gutils.gescape(str(row['genre'])), \
		gutils.gescape(str(row['media'])), \
		gutils.gescape(str(row['classification'])), \
		gutils.gescape(str(row['studio'])), \
		gutils.gescape(str(row['site'])), \
		gutils.gescape(str(row['color'])), \
		gutils.gescape(str(row['region'])), \
		gutils.gescape(str(row['layers'])), \
		gutils.gescape(str(row['condition'])), \
		gutils.gescape(str(row['imdb'])), \
		gutils.gescape(str(row['trailer'])), \
		gutils.gescape(str(row['obs'])), \
		str(row['num_media']), \
		str(row['rating']), \
		str(row['seen']), \
		str(next_number) )\
	) # dont copy volume/collection data (loan problems)
	next_movie_id = self.db.get_value(field="id", table="movies", where="number='%s'"%next_number)
	# tags
	for item in self.db.get_all_data(table_name="movie_tag",what="tag_id", where="movie_id='%s'"%movie_id):
		self.db.cursor.execute("""
			INSERT INTO movie_tag('movie_id','tag_id') VALUES('%s','%s')""" % \
				(next_movie_id, item['tag_id']))
	# languages
	for item in self.db.get_all_data(table_name="movie_lang",what="lang_id, type", where="movie_id='%s'"%movie_id):
		self.db.cursor.execute("""
			INSERT INTO movie_lang('movie_id','lang_id', 'type')
				VALUES('%s','%s', '%s')""" % \
			(next_movie_id, item['lang_id'], item['type']))
	tmp_dest = os.path.join(self.griffith_dir, "posters")
	if str(str(row['image'])) != '':
		image_path = os.path.join(tmp_dest, str(row['image'])+".jpg")
		clone_path = os.path.join(tmp_dest, new_image+".jpg")
		# clone image
		shutil.copyfile(image_path, clone_path)
		image_path = clone_path
	else:
		if self.windows:
			image_path = "images/default.png"
		else:
			image_path = os.path.join(self.locations['images'], "default.png")
	handler = self.Image.set_from_file(image_path)
		
	#update statusbar
	self.total = self.total + 1
	self.total_filter = self.total
	self.count_statusbar()
	self.populate_treeview(self.db.get_all_data(order_by="number ASC"))
	self.main_treeview.set_cursor(next_number-1)
	self.treeview_clicked()
예제 #15
0
	def add_movie(self, data):
		# TODO: make use of parent data {{{
		i = 0
		languages_ids = {}
		for item in self.get_all_data("languages", what="id"):
			languages_ids[i] = item['id']
			i = i+1
		i = 0
		volume_combo_ids = {}
		for item in self.get_all_data("volumes", what="id"):
			volume_combo_ids[i] = item['id']
			i = i+1
		i = 0
		collection_combo_ids = {}
		for item in self.get_all_data("collections", what="id"):
			collection_combo_ids[i] = item['id']
			i = i+1
		i = 0
		tags_ids = {}
		for item in self.get_all_data("tags", what="id"):
			tags_ids[i] = item['id']
			i = i+1
		#}}}

		plot_buffer = data.am_plot.get_buffer()
		with_buffer = data.am_with.get_buffer()
		obs_buffer = data.am_obs.get_buffer()
		number = data.am_number.get_text()
		(filepath, filename) = os.path.split(data.am_picture_name.get_text())
		query = """
			INSERT INTO 'movies' ('id', 'original_title', 'title', 'director', 'plot', 'image', 'year',
			'runtime', 'actors', 'country', 'genre', 'media', 'classification', 'studio', 'site', 'color',
			'region', 'layers', 'condition', 'imdb', 'trailer', 'obs', 'num_media', 'loaned', 'rating', 'seen',
			'number', 'volume_id', 'collection_id')
			VALUES (Null,'""" + gutils.gescape(data.am_original_title.get_text()) + "','" +\
			gutils.gescape(data.am_title.get_text())+"','" +\
			gutils.gescape(data.am_director.get_text())+"','" +\
			gutils.gescape(plot_buffer.get_text(plot_buffer.get_start_iter(), plot_buffer.get_end_iter()))+"','" +\
			filename+"','" +\
			data.am_year.get_text()+"','" +\
			data.am_runtime.get_text()+"','" +\
			gutils.gescape(with_buffer.get_text(with_buffer.get_start_iter(), with_buffer.get_end_iter()))+"','" +\
			gutils.gescape(data.am_country.get_text())+"','" +\
			gutils.gescape(data.am_genre.get_text())+"','" +\
			str(data.am_media.get_active())+"','" +\
			gutils.gescape(data.am_classification.get_text())+"','" +\
			gutils.gescape(data.am_studio.get_text())+"','" +\
			data.am_site.get_text()+"','" +\
			str(int(data.am_color.get_active()))+"','" +\
			str(int(data.am_region.get_active()))+"','" +\
			str(int(data.am_layers.get_active()))+"','" +\
			str(int(data.am_condition.get_active()))+"','" +\
			data.am_imdb.get_text()+"','" +\
			data.am_trailer.get_text()+"','" +\
			gutils.gescape(obs_buffer.get_text(obs_buffer.get_start_iter(), obs_buffer.get_end_iter()))+"','" +\
			data.am_discs.get_text()+"','0','" +\
			str(int(data.rating_slider_add.get_value()))+"','" +\
			str(int(data.am_seen.get_active()))+"','" +\
			number+"', '" +\
			str(volume_combo_ids[data.am_volume_combo.get_active()]) + "', '"+\
			str(collection_combo_ids[data.am_collection_combo.get_active()]) + "')"
		self.cursor.execute(query)

		id = self.get_value(field="id", table="movies", where="number = '%s'" % number)

		# languages
		selected = {}
		for i in data.am_languages:
			if i['id'].get_active() > 0:
				lang_id = languages_ids[i['id'].get_active()]
				type = i['type'].get_active()
				if not selected.has_key(lang_id):
					selected[lang_id] = {}
				selected[lang_id][type] = True
		for lang in selected.keys():
			for type in selected[lang].keys():
				self.cursor.execute("INSERT INTO movie_lang(movie_id, lang_id, type) VALUES ('%s', '%s', '%s');" % (id, lang, type) )

		# tags 
		selected = {}
		for i in tags_ids:
			if data.am_tags[i].get_active() == True:
				selected[tags_ids[i]] = 1
		for i in selected.keys():
			self.cursor.execute("INSERT INTO movie_tag(movie_id, tag_id) VALUES ('%s', '%s');" % (id, i) )