Example #1
0
 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)
Example #2
0
 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)
Example #3
0
    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}")