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
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
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()
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)
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
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)
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
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()
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)
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
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
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
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"))
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()
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) )