From 5919082a23fb3b11bf679f46253700dc8238b26f Mon Sep 17 00:00:00 2001 From: =?utf8?q?Stefan=20K=C3=B6gl?= Date: Mon, 20 May 2013 15:14:23 +0200 Subject: [PATCH] fix missing podcasts in podcast lists Thanks for user Alexander_Wilms for reporting the bug! --- mygpo/db/couchdb/podcast.py | 35 +++++++++++++++++++++++++++++++++++ mygpo/share/views.py | 6 +++--- 2 files changed, 38 insertions(+), 3 deletions(-) diff --git a/mygpo/db/couchdb/podcast.py b/mygpo/db/couchdb/podcast.py index 59a6c034..6284deea 100644 --- a/mygpo/db/couchdb/podcast.py +++ b/mygpo/db/couchdb/podcast.py @@ -208,6 +208,41 @@ def podcasts_by_id(ids): return podcasts +def podcasts_groups_by_id(ids): + """ gets podcast groups and top-level podcasts for the given ids """ + + if ids is None: + raise QueryParameterMissing('ids') + + if not ids: + return + + db = get_main_database() + res = db.view('_all_docs', + keys = ids, + include_docs = True, + classes = [Podcast, PodcastGroup], + ) + + for r in res: + doc = r['doc'] + if doc['doc_type'] == 'Podcast': + obj = Podcast.wrap(doc) + + elif doc['doc_type'] == 'PodcastGroup': + obj = PodcastGroup.wrap(doc) + + else: + logger.error('podcasts_groups_by_id retrieved unknown doc_type ' + '"%s" for params %s', doc['doc_type'], res.params) + continue + + if obj.needs_update: + incomplete_obj.send_robust(sender=obj) + + yield obj + + @cache_result(timeout=60*60) def podcast_for_oldid(oldid): diff --git a/mygpo/share/views.py b/mygpo/share/views.py index 264fdc56..38620d4b 100644 --- a/mygpo/share/views.py +++ b/mygpo/share/views.py @@ -23,7 +23,7 @@ from mygpo.directory.views import search as directory_search from mygpo.decorators import repeat_on_conflict from mygpo.flattr import Flattr from mygpo.userfeeds.feeds import FavoriteFeed -from mygpo.db.couchdb.podcast import podcasts_by_id, podcast_for_url +from mygpo.db.couchdb.podcast import podcasts_groups_by_id, podcast_for_url from mygpo.db.couchdb.podcastlist import podcastlist_for_user_slug, \ podcastlists_for_user from mygpo.data.feeddownloader import PodcastUpdater @@ -92,7 +92,7 @@ def list_show(request, plist, owner): plist = proxy_object(plist) - podcasts = podcasts_by_id(plist.podcasts) + podcasts = list(podcasts_groups_by_id(plist.podcasts)) plist.podcasts = podcasts max_subscribers = max([p.subscriber_count() for p in podcasts] + [0]) @@ -113,7 +113,7 @@ def list_show(request, plist, owner): @list_decorator(must_own=False) def list_opml(request, plist, owner): - podcasts = podcasts_by_id(plist.podcasts) + podcasts = podcasts_groups_by_id(plist.podcasts) return format_podcast_list(podcasts, 'opml', plist.title) -- 2.11.4.GIT