fix(campaigns): Scrape campaigns for suspended/unretrievable accounts

Merge refreshed accounts with db accounts that have campaign URLs,
ensuring campaigns are still scraped using cached URLs even when
account profiles cannot be retrieved.

In that case, use the latest cached campaign URL.
This commit is contained in:
Fabio Manganiello 2026-03-17 02:13:56 +01:00
commit f0f4b0b049
Signed by: blacklight
GPG key ID: D90FBA7F76362774

View file

@ -111,7 +111,15 @@ class Loop(Thread):
return accounts
def refresh_campaigns(self, accounts: list[Account]) -> list[Campaign]:
campaigns = self.client.refresh_campaigns(accounts)
# Merge refreshed accounts with DB accounts that have campaign URLs.
# This ensures campaigns are still scraped for suspended/unretrievable
# accounts using their cached campaign URLs.
accounts_by_url = {account.url: account for account in accounts}
for db_account in self.db.get_accounts().values():
if db_account.campaign_url and db_account.url not in accounts_by_url:
accounts_by_url[db_account.url] = db_account
campaigns = self.client.refresh_campaigns(list(accounts_by_url.values()))
self.db.save_campaigns(campaigns)
return campaigns