def update_movie(self): session = self.db.Session() if self._am_movie_id is not None: movie = session.query(db.Movie).filter_by(movie_id=self._am_movie_id).one() else: movie = session.query(db.Movie).filter_by(movie_id=self._movie_id).one() if movie is None: # movie was deleted in the meantime return add_movie_db(self, True) details = get_details(self) old_poster_md5 = movie.poster_md5 new_poster_md5 = None if details['image'] and old_poster_md5 != details['image']: # details["image"] can contain MD5 or file path new_image_path = os.path.join(self.locations['temp'], "poster_%s.jpg" % details['image']) if not os.path.isfile(new_image_path): log.warn("cannot read temporary file: %s", new_image_path) else: new_poster_md5 = gutils.md5sum(file(new_image_path, 'rb')) if session.query(db.Poster).filter_by(md5sum=new_poster_md5).count() == 0: try: data = file(new_image_path, 'rb').read() except Exception, e: log.warning("cannot read poster data") else: poster = db.Poster(md5sum=new_poster_md5, data=data) del details["image"] details['poster_md5'] = new_poster_md5 session.add(poster) # delete old image import delete old_poster = session.query(db.Poster).filter_by(md5sum=old_poster_md5).first() if old_poster and len(old_poster.movies) == 1: # other movies are not using the same poster session.delete(old_poster) delete.delete_poster_from_cache(old_poster_md5, self.locations['posters']) else: details['poster_md5'] = new_poster_md5
else: details['poster_md5'] = None update_movie_instance(movie, details, session) session.add(movie) # delete old image if old_poster_md5 and old_poster_md5 != new_poster_md5: import delete old_poster = session.query( db.Poster).filter_by(md5sum=old_poster_md5).first() if old_poster and len( old_poster.movies ) == 1: # other movies are not using the same poster session.delete(old_poster) delete.delete_poster_from_cache(old_poster_md5, self.locations['posters']) if commit(session): main_treeview.setmovie(self, movie, self.selected_iter_edit[0], self.treemodel) # close add window self.widgets['add']['window'].hide() # refresh self.treeview_clicked() self.update_statusbar(_('Movie information has been updated')) def change_rating_from_slider(self): rating = int(self.widgets['add']['rating_slider'].get_value()) self.widgets['add']['image_rating'].show()
session.add(poster) else: details['poster_md5'] = new_poster_md5 else: details['poster_md5'] = None update_movie_instance(movie, details, session) session.add(movie) # delete old image if old_poster_md5 and old_poster_md5 != new_poster_md5: import delete old_poster = session.query(db.Poster).filter_by(md5sum=old_poster_md5).first() if old_poster and len(old_poster.movies) == 1: # other movies are not using the same poster session.delete(old_poster) delete.delete_poster_from_cache(old_poster_md5, self.locations['posters']) if commit(session): main_treeview.setmovie(self, movie, self.selected_iter_edit[0], self.treemodel) # close add window self.widgets['add']['window'].hide() # refresh self.treeview_clicked() self.update_statusbar(_('Movie information has been updated')) def change_rating_from_slider(self): rating = int(self.widgets['add']['rating_slider'].get_value()) self.widgets['add']['image_rating'].show() try: