00068 :
00069 print self, "propagate_entity", entity
00070
00071 def _update_series( series ) :
00072 modified = True
00073 if isinstance(entity, Series) and series == entity :
00074 series = entity
00075 elif isinstance(entity, Collection) and series.collection == entity :
00076 series.collection = entity
00077 elif isinstance(entity, Editor) and series.collection.editor == entity :
00078 series.collection.editor = entity
00079 else :
00080 modified = False
00081 return series, modified
00082
00083 def _update_album( album ) :
00084 modified = True
00085 if isinstance(entity, Album) and album == entity :
00086 return entity, modified
00087 elif isinstance(entity, Author) :
00088 if entity.qoid in album.authors + album.drawers :
00089 modified = True
00090 album.rebuild_all_strs()
00091 album.save()
00092 else :
00093 series, modified = _update_series(album.series)
00094 if modified :
00095 album.series = series
00096 return album, modified
00097
00098
00099 for page in gui.main_window.instance.tabs.itervalues() :
00100 if page.album_file :
00101 album, modified = _update_album(page.album_file.album)
00102 if modified :
00103 page.album_file.reload()
00104
00105 if isinstance(entity, (Album, Series, Author)) :
00106
00107 items = set()
00108 series_items = set()
00109 for model in self.childs :
00110 if isinstance(entity, Album) :
00111 if 'by-album' in model and entity.qoid in model['by-album'] :
00112 items.update(model['by-album'][entity.qoid])
00113 else :
00114 model.register_if_matches(entity)
00115 if isinstance(entity, Series) :
00116 if 'by-series' in model and entity.qoid in model['by-series'] :
00117 items.update(model['by-series'][entity.qoid])
00118 if 'toplevel-series' in model and entity.qoid in model['toplevel-series'] :
00119 series_items.add(model['toplevel-series'][entity.qoid])
00120
00121 if isinstance(entity, Author) :
00122 for a in entity.albums :
00123 print a
00124 for model in self.childs :
00125 if 'by-album' in model :
00126 if a.qoid in model['by-album'] :
00127 items.update(model['by-album'][a.qoid])
00128 for item in items :
00129 album, modified = _update_album(item.album)
00130 if modified :
00131 item.setup(album)
00132 for item in series_items :
00133 series, modified = _update_series(item.series)
00134 if modified :
00135 item.setup(series)
00136
def propagate_album_status( self, album ) :