mirror of
https://github.com/viq/NewsBlur.git
synced 2025-09-18 21:43:31 +00:00
Collecting orphaned feeds for users. These somehow got lost, and I'm not sure how. Eventually I'd like to run this on every user account.
This commit is contained in:
parent
3a87a7c418
commit
46c294f298
1 changed files with 30 additions and 0 deletions
|
@ -360,7 +360,37 @@ class UserSubscription(models.Model):
|
|||
switch_feed_for_classifier(MClassifierAuthor)
|
||||
switch_feed_for_classifier(MClassifierFeed)
|
||||
switch_feed_for_classifier(MClassifierTag)
|
||||
|
||||
@classmethod
|
||||
def collect_orphan_feeds(cls, user):
|
||||
us = cls.objects.filter(user=user)
|
||||
usf = UserSubscriptionFolders.objects.get(user=user)
|
||||
us_feed_ids = set([sub.feed_id for sub in us])
|
||||
folders = json.decode(usf.folders)
|
||||
|
||||
def collect_ids(folders, found_ids):
|
||||
for item in folders:
|
||||
# print ' --> %s' % item
|
||||
if isinstance(item, int):
|
||||
# print ' --> Adding feed: %s' % item
|
||||
found_ids.add(item)
|
||||
elif isinstance(item, dict):
|
||||
# print ' --> Descending folder dict: %s' % item.values()
|
||||
found_ids.update(collect_ids(item.values(), found_ids))
|
||||
elif isinstance(item, list):
|
||||
# print ' --> Descending folder list: %s' % len(item)
|
||||
found_ids.update(collect_ids(item, found_ids))
|
||||
# print ' --> Returning: %s' % found_ids
|
||||
return found_ids
|
||||
found_ids = collect_ids(folders, set())
|
||||
|
||||
logging.info(" ---> Collecting orphans. %s feeds with %s orphans" % (len(us_feed_ids), len(us_feed_ids) - len(found_ids)))
|
||||
|
||||
orphan_ids = us_feed_ids - found_ids
|
||||
folders.extend(list(orphan_ids))
|
||||
usf.folders = json.encode(folders)
|
||||
usf.save()
|
||||
|
||||
class Meta:
|
||||
unique_together = ("user", "feed")
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue