~comcloudway/melon

6ba8a31a7f3653ddc08cc889f14f8ac6af68d6be — Jakob Meier 6 months ago 75e6147
acctually fix the home feed duplicate error

caused by the worker pool not being cleared properly
3 files changed, 5 insertions(+), 13 deletions(-)

M melon/models/__init__.py
M melon/servers/invidious/__init__.py
M melon/servers/utils.py
M melon/models/__init__.py => melon/models/__init__.py +0 -1
@@ 434,7 434,6 @@ def ensure_video(vid):
    """,
    (vid.server, vid.id, vid.url, vid.title, vid.description, vid.thumbnail, vid.channel[1], vid.channel[0]))
def add_videos(vids:list[Video]):
    # TODO deduplicate entries
    conn = connect_to_db()
    execute_sql(
        conn,

M melon/servers/invidious/__init__.py => melon/servers/invidious/__init__.py +0 -1
@@ 297,7 297,6 @@ class Invidious(Server):
            for src in video.find_all("source"):
                try:
                    rel = src["src"]
                    print(rel)
                    stream_url = f"{instance}{rel}"
                    results.append(Stream(stream_url, src["label"]))
                except:

M melon/servers/utils.py => melon/servers/utils.py +5 -11
@@ 53,6 53,8 @@ class NewsWorkerPool:
    tasks=[]
    results=[]
    def __init__(self, size, tasks):
        self.results=[]
        self.threads=[]
        self.tasks = tasks
        for i in range(size):
            thread = threading.Thread(target=self.run, name=str(i))


@@ 61,23 63,16 @@ class NewsWorkerPool:
            self.threads.append(thread)
    def run(self):
        name = threading.currentThread().getName()
        try:
            task = self.tasks.pop()
        while self.tasks:
            task = self.tasks.pop(0)
            instance = task[0]
            channel = task[1]
            print(f"{name} obtained task")
            dts = instance.get_timeline(channel.id)
            for entry in dts:
                self.results.append(entry)
            self.run()
        except Exception as e:
            print(f"{name} done")
            print(e)
            return
    def wait(self):
        for thread in self.threads:
            thread.join()
        print("all done")

def fetch_home_feed() -> list[Resource]:
    subs = get_subscribed_channels()


@@ 97,11 92,10 @@ def fetch_home_feed() -> list[Resource]:
        instance = get_server_instance(server)
        channels = db[server["id"]]
        tasks = tasks + [ (instance, channel) for channel in channels ]
    pool = NewsWorkerPool(10, tasks)
    pool = NewsWorkerPool(6, tasks)
    pool.wait()
    feed = pool.results
    feed.sort(key=lambda dts: dts[1])
    print("returning")
    return feed
def group_by_date(dataset):
    db = {}