Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class CollectionModel(GObject.GObject, Gtk.TreeModel):
- NUM_COL = 4
- (ROWREF_ARTIST, ROWREF_ALBUM, ROWREF_DISC, ROWREF_SONG) = (1,2,3,4)
- COL_TYPES = (GObject.TYPE_STRING,
- GObject.TYPE_STRING,
- GObject.TYPE_STRING,
- GObject.TYPE_STRING)
- COL_NAMES = ("name",
- "file",
- "icon",
- "sort")
- # rowrefs are tuples with 2 elements:
- # 1 = type (Artist, Album, Disc, Song)
- # 2 = ID (if type is ROWREF_DISC, ID is a tuple of albumid and discid)
- def __init__(self, db):
- GObject.GObject.__init__(self)
- self.db = db
- def append(self, treeiter, data):
- # I don't need append()
- pass
- def do_get_column_names(self):
- return self.COL_NAMES[:]
- def do_get_flags(self):
- return 0
- def do_get_n_columns(self):
- return len(self.COL_TYPES)
- def do_get_column_type(self, n):
- return CollectionModel.COL_TYPES[n]
- def do_get_iter(self, path):
- path = path.get_indices()
- rowrefid = self.db.get_id_by_path(path)
- if not path or isinstance(path,int) or len(path) == 1:
- return (CollectionModel.ROWREF_ARTIST, rowrefid)
- elif len(path) == 2:
- return (CollectionModel.ROWREF_ALBUM, rowrefid)
- elif len(path) == 3:
- if isinstance(rowref,tuple):
- return (CollectionModel.ROWREF_DISC, rowrefid)
- else:
- return (CollectionModel.ROWREF_SONG, rowrefid)
- elif len(path) == 4:
- return (CollectionModel.ROWREF_SONG, rowrefid)
- return 0
- def do_get_path(self, rowref):
- if not rowref:
- return ()
- elif rowref[0] == CollectionModel.ROWREF_ARTIST:
- artistpos = self.db.get_artist_position_by_id(rowref[1])
- if artistpos:
- return (artistpos,)
- elif rowref[0] == CollectionModel.ROWREF_ALBUM:
- albumpos = self.db.get_albuetm_position_by_id(rowref[1])
- if albumpos:
- artistpos = self.db.get_artist_position_by_album_id(rowref[1])
- if artistpos:
- return (artistpos, albumpos)
- elif rowref[0] == CollectionModel.ROWREF_DISC:
- discpos = (rowref[1][1]-1)
- if discpos:
- albumpos = self.db.get_album_position_by_id(rowref[1][1])
- if albumpos:
- artistpos = self.db.get_artist_position_by_album_id(rowref[1])
- if artistpos:
- return (artistpos, albumpos, discpos)
- elif rowref[0] == CollectionModel.ROWREF_SONG:
- songpos = self.db.get_song_position_by_id(rowref[1])
- if songpos:
- discid = self.db.get_disc_by_song_id(rowref[1])
- albumpos = self.db.get_album_position_by_song_id(rowref[1])
- if albumpos:
- artistpos = self.db.get_artist_song_by_id(rowref[1])
- if artistpos:
- if discid:
- return (artistpos, albumpos, (discpos-1), songpos)
- else:
- return (artistpos, albumpos, songpos)
- return ()
- def do_get_value(self, rowref, column):
- print("do_get_value",rowref)
- if not rowref or not rowref:
- print("Damn it, something went wrong!")
- pass # This should NEVER happen
- elif rowref[0] == CollectionModel.ROWREF_ARTIST:
- if column == 0:
- return self.db.get_artist_name_by_id(rowref[1])
- elif column == 1:
- return ""
- elif column == 2:
- return str(Gtk.STOCK_ORIENTATION_PORTRAIT)
- elif column == 2:
- return ""
- elif rowref[0] == CollectionModel.ROWREF_ALBUM:
- if column == 0:
- return self.db.get_album_name_by_id(rowref[1])
- elif column == 1:
- return ""
- elif column == 2:
- return str(Gtk.STOCK_CDROM)
- elif column == 2:
- return ""
- elif rowref[0] == CollectionModel.ROWREF_DISC:
- if column == 0:
- return "CD %s" % str(rowref[1][1])
- elif column == 1:
- return ""
- elif column == 2:
- return ""
- elif column == 2:
- return ""
- elif rowref[0] == CollectionModel.ROWREF_SONG:
- if column == 0:
- return self.db.get_song_name_by_id(rowref[1])
- elif column == 1:
- return self.db.get_song_filename_by_id(rowref[1])
- elif column == 2:
- return ""
- elif column == 3:
- return ""
- raise InvalidColumnError(column)
- return "FUCK"
- def do_iter_next(self, rowref):
- if not rowref:
- return None
- return (rowref[0], self.db.get_next(rowref))
- def do_iter_children(self, rowref):
- """if not rowref or not rowref:
- return self.db.get_nth_artist(0)
- elif rowref[0] == CollectionModel.ROWREF_ARTIST:
- albumid = self.db.get_nth_album_by_artist_id(rowref[1])
- if albumid:
- return (CollectionModel.ROWREF_ALBUM, albumid)
- elif rowref[0] == CollectionModel.ROWREF_ALBUM:
- discid = self.db.get_nth_disc_by_album_id(rowref[1])
- if discid:
- return (CollectionModel.ROWREF_DISC, discid)
- else:
- songid = self.db.get_nth_song_by_album_id(rowref[1])
- if songid:
- return (CollectionModel.ROWREF_SONG, songid)
- elif rowref[0] == CollectionModel.ROWREF_DISC:
- songid = self.db.get_nth_song_by_album_id(rowref[1][0], rowref[1][1])
- if songid:
- return (CollectionModel.ROWREF_SONG, songid)
- return None"""
- return self.do_iter_nth_child(self, rowref, 0)
- def do_iter_has_child(self, rowref):
- if not rowref:
- return True
- elif rowref[0] == CollectionModel.ROWREF_SONG:
- return False
- else:
- return True
- def do_iter_n_children(self, rowref):
- if not rowref:
- return self.db.get_artist_number()
- elif rowref[0] == CollectionModel.ROWREF_ARTIST:
- return self.db.get_album_number_by_artist_id(rowref[1])
- elif rowref[0] == CollectionModel.ROWREF_ALBUM:
- discnumber = self.db.get_disc_number_by_album_id(rowref[1])
- if discnumber:
- return discnumber
- else:
- return self.db.get_song_number_by_album_id(rowref[1])
- elif rowref[0] == CollectionModel.ROWREF_DISC:
- return self.db.get_song_number_by_album_id(rowref[1][0], rowref[1][1])
- return 0
- def do_iter_nth_child(self, rowref, n):
- if not rowref or not rowref:
- artistid = self.db.get_nth_artist(n)
- if artistid:
- return (CollectionModel.ROWREF_ARTIST, artistid)
- elif rowref[0] == CollectionModel.ROWREF_ARTIST:
- albumid = self.db.get_nth_album_by_artist_id(n, rowref[1])
- if albumid:
- return (CollectionModel.ROWREF_ALBUM, albumid)
- elif rowref[0] == CollectionModel.ROWREF_ALBUM:
- discid = self.db.get_nth_disc_by_album_id(n, rowref[1])
- if discid:
- return (CollectionModel.ROWREF_DISC, (albumid, discid))
- else:
- songid = self.db.get_nth_song_by_album_id(n, rowref[1])
- if songid:
- return (CollectionModel.ROWREF_SONG, songid)
- elif rowref[0] == CollectionModel.ROWREF_DISC:
- songid = self.db.get_nth_song_by_album_id(n, rowref[1][0], rowref[1][1])
- if songid:
- return (CollectionModel.ROWREF_SONG, songid)
- return None
- def do_iter_parent(self, rowref):
- if not rowref:
- return None
- if rowref[0] == CollectionModel.ROWREF_SONG:
- albumid = self.db.get_album_by_song_id(rowref[1])
- discid = self.db.get_disc_by_song_id(rowref[1])
- if discid:
- return (CollectionModel.ROWREF_DISC, (albumid, discid))
- else:
- return (CollectionModel.ROWREF_ALBUM, albumid)
- elif rowref[0] == CollectionModel.ROWREF_ALBUM:
- return (CollectionModel.ROWREF_ARTIST, self.db.get_artist_by_album_id(rowref[1]))
- elif rowref[0] == CollectionModel.ROWREF_DISC:
- return (CollectionModel.ROWREF_ALBUM, rowref[1][0])
- return None
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement