def test_multiple_tasks(self): self.assertEquals(self.c.active_tasks, []) self.assertNotEqual(self.c.source, "") t1 = Task("src", "desc", controller = self.c) self.assertEquals(self.c.source, "src") self.assertEquals(self.c.active_tasks, [t1]) t1.update(0.5) self.assertEquals(self.c.frac, 0.5) t2 = Task("src2", "desc2", controller = self.c) self.assertEquals(self.c.source, _("Active tasks")) self.assertEquals(self.c.frac, 0.25) Task("src3", "desc3", controller = self.c, known_length=False) self.assertAlmostEqual(self.c.frac, 0.5/3) t1.finish() t2.finish() self.assertEquals(self.c.desc, "desc3") self.assertEquals(self.c.frac, None)
def test_multiple_tasks(self): self.assertEquals(self.c.active_tasks, []) self.assertNotEqual(self.c.source, "") t1 = Task("src", "desc", controller=self.c) self.assertEquals(self.c.source, "src") self.assertEquals(self.c.active_tasks, [t1]) t1.update(0.5) self.assertEquals(self.c.frac, 0.5) t2 = Task("src2", "desc2", controller=self.c) self.assertEquals(self.c.source, _("Active tasks")) self.assertEquals(self.c.frac, 0.25) Task("src3", "desc3", controller=self.c, known_length=False) self.assertAlmostEqual(self.c.frac, 0.5 / 3) t1.finish() t2.finish() self.assertEquals(self.c.desc, "desc3") self.assertEquals(self.c.frac, None)
def __add_songs(self, task: Task, songs: Collection[AudioFile], spl: DidlPlaylistContainer): """Generator for copool to add songs to the temp playlist""" assert self.device task_total = float(len(songs)) print_d("Adding %d song(s) to Sonos playlist. " "This might take a while..." % task_total) for i, song in enumerate(songs): if self.__cancel: print_d("Cancelled Sonos export") return lib = self.device.music_library # Exact title gets the best results it seems; some problems with ’ search_term = song("title") assert search_term results = lib.get_tracks(search_term=search_term, max_items=self.MAX_RESULTS_PER_SEARCH) yield total = len(results) if total == 1: track = results[0] elif total > 1: desc = song("~~people~album~title") candidates = [(self._score(t, song), t) for t in results] in_order = sorted(candidates, reverse=True, key=lambda x: x[0]) track = in_order[0][1] print_d(f"From {len(results)} choice(s) for {desc!r}, " f"chose {self.uri_for(track)}") else: print_w("No results for \"%s\"" % search_term) track = None if track: try: self.device.add_item_to_sonos_playlist(track, spl) except SoCoException as e: print_w(f"Couldn't add {track} ({e}, skipping") task.update(float(i) / task_total) yield task.update((task_total - 2) / task_total) yield task.finish() print_d(f"Finished export to {spl.title!r}")