2021-06-21 12:36:46 -04:00
|
|
|
# Copyright 2021 (c) Anna Schumaker.
|
2021-06-28 11:12:14 -04:00
|
|
|
from . import publisher
|
2021-06-21 13:42:00 -04:00
|
|
|
import threading
|
2021-06-21 12:36:46 -04:00
|
|
|
|
|
|
|
class Tag:
|
|
|
|
def __init__(self, name):
|
|
|
|
self.name = name
|
|
|
|
self.tracks = [ ]
|
|
|
|
self.widgets = None
|
2021-06-21 13:42:00 -04:00
|
|
|
self.lock = threading.Lock()
|
2021-06-28 11:12:14 -04:00
|
|
|
self.TrackAdded = publisher.Publisher()
|
|
|
|
self.TrackRemoved = publisher.Publisher()
|
2021-06-21 12:36:46 -04:00
|
|
|
|
2021-06-21 13:38:22 -04:00
|
|
|
def __getstate__(self):
|
2021-06-21 13:42:00 -04:00
|
|
|
with self.lock:
|
|
|
|
return { "name" : self.name,
|
2021-06-23 11:08:35 -04:00
|
|
|
"tracks" : [ t.trackid for t in self.tracks ] }
|
2021-06-21 13:38:22 -04:00
|
|
|
|
2021-06-21 12:36:46 -04:00
|
|
|
def __len__(self):
|
2021-06-21 13:42:00 -04:00
|
|
|
with self.lock:
|
|
|
|
return len(self.tracks)
|
2021-06-21 12:36:46 -04:00
|
|
|
|
|
|
|
def __lt__(self, rhs):
|
|
|
|
return self.name < rhs.name
|
|
|
|
|
2021-06-21 13:38:22 -04:00
|
|
|
def __setstate__(self, state):
|
|
|
|
self.name = state["name"]
|
|
|
|
self.tracks = state["tracks"]
|
|
|
|
self.widgets = None
|
2021-06-21 13:42:00 -04:00
|
|
|
self.lock = threading.Lock()
|
2021-06-28 11:12:14 -04:00
|
|
|
self.TrackAdded = publisher.Publisher()
|
|
|
|
self.TrackRemoved = publisher.Publisher()
|
2021-06-21 13:38:22 -04:00
|
|
|
|
2021-06-21 14:57:01 -04:00
|
|
|
def __str__(self):
|
|
|
|
return self.name
|
|
|
|
|
2021-06-21 12:36:46 -04:00
|
|
|
def add_track(self, track):
|
2021-06-21 13:42:00 -04:00
|
|
|
with self.lock:
|
|
|
|
self.tracks.append(track)
|
2021-06-28 11:12:14 -04:00
|
|
|
self.TrackAdded.publish(self, track)
|
2021-06-21 12:36:46 -04:00
|
|
|
|
2021-06-23 11:08:35 -04:00
|
|
|
def init_track(self, track):
|
|
|
|
with self.lock:
|
|
|
|
try:
|
|
|
|
i = self.tracks.index(track.trackid)
|
|
|
|
self.tracks[i] = track
|
|
|
|
except Exception as e:
|
|
|
|
pass
|
|
|
|
|
2021-06-21 12:36:46 -04:00
|
|
|
def remove_track(self, track):
|
2021-06-21 13:42:00 -04:00
|
|
|
with self.lock:
|
|
|
|
self.tracks.remove(track)
|
2021-06-28 11:12:14 -04:00
|
|
|
self.TrackRemoved.publish(self, track)
|
2021-06-23 15:14:51 -04:00
|
|
|
|
|
|
|
|
|
|
|
class SuperTag(Tag):
|
|
|
|
def __init__(self, parent, name):
|
|
|
|
Tag.__init__(self, name)
|
|
|
|
self.parent = parent
|
|
|
|
|
|
|
|
def __getstate__(self):
|
|
|
|
with self.lock:
|
|
|
|
return { "name" : self.name,
|
|
|
|
"tracks" : [ t.trackid for t in self.tracks ],
|
|
|
|
"parent" : self.parent }
|
|
|
|
|
|
|
|
def __setstate__(self, state):
|
|
|
|
Tag.__setstate__(self, state)
|
|
|
|
self.parent = state["parent"]
|