Example #1
0
def _wrap_podcast_group(res):
    if res['doc']['doc_type'] == 'Podcast':
        return Podcast.wrap(res['doc'])
    else:
        pg = PodcastGroup.wrap(res['doc'])
        id = res['key']
        return pg.get_podcast_by_id(id)
Example #2
0
File: views.py Project: Mic92/mygpo
    def _decorator(request, slug_id, *args, **kwargs):
        group = PodcastGroup.for_slug_id(slug_id)

        if podcast is None:
            raise Http404

        return f(request, group, *args, **kwargs)
Example #3
0
def search_wrapper(result):
    doc = result['doc']
    if doc['doc_type'] == 'Podcast':
        p = Podcast.wrap(doc)
    elif doc['doc_type'] == 'PodcastGroup':
        p = PodcastGroup.wrap(doc)
    p._id = result['id']
    return p
Example #4
0
def show(request, podcast):

    episodes = episode_list(podcast, request.user)

    max_listeners = max([e.listeners for e in episodes] + [0])

    if podcast.group:
        group = PodcastGroup.get(podcast.group)
        rel_podcasts = filter(lambda x: x != podcast, group.podcasts)
    else:
        rel_podcasts = []

    tags = get_tags(podcast, request.user)

    if request.user.is_authenticated():

        request.user.sync_all()

        state = podcast.get_user_state(request.user)
        subscribed_devices = state.get_subscribed_device_ids()
        subscribed_devices = [request.user.get_device(x) for x in subscribed_devices]

        subscribe_targets = podcast.subscribe_targets(request.user)

        history = list(state.actions)
        def _set_objects(h):
            #TODO: optimize by indexing devices by id
            dev = request.user.get_device(h.device)
            return proxy_object(h, device=dev)
        history = map(_set_objects, history)

        is_public = state.settings.get('public_subscription', True)

        subscribe_form = SyncForm()
        subscribe_form.set_targets(subscribe_targets, '')

        return render(request, 'podcast.html', {
            'tags': tags,
            'history': history,
            'podcast': podcast,
            'is_public': is_public,
            'devices': subscribed_devices,
            'related_podcasts': rel_podcasts,
            'can_subscribe': len(subscribe_targets) > 0,
            'subscribe_form': subscribe_form,
            'episodes': episodes,
            'max_listeners': max_listeners,
        })
    else:
        current_site = RequestSite(request)
        return render(request, 'podcast.html', {
            'podcast': podcast,
            'related_podcasts': rel_podcasts,
            'tags': tags,
            'url': current_site,
            'episodes': episodes,
            'max_listeners': max_listeners,
        })
Example #5
0
File: merge.py Project: Mic92/mygpo
def podcast_url_wrapper(r):
    url = r['key']
    doc = r['doc']
    if doc['doc_type'] == 'Podcast':
        obj = Podcast.wrap(doc)
    elif doc['doc_type'] == 'PodcastGroup':
        obj = PodcastGroup.wrap(doc)

    return obj.get_podcast_by_url(url)
Example #6
0
def _wrap_podcast_group_key1(res):
    obj = res['doc']
    if obj['doc_type'] == 'Podcast':
        return Podcast.wrap(obj)

    else:
        pid = res[u'key'][1]
        pg = PodcastGroup.wrap(obj)
        podcast = pg.get_podcast_by_id(pid)
        return podcast
Example #7
0
File: slugs.py Project: Mic92/mygpo
    def _podcast_wrapper(r):
        from mygpo.core.models import Podcast, PodcastGroup

        doc = r["doc"]

        if doc["doc_type"] == "Podcast":
            return Podcast.wrap(doc)
        else:
            pid = r["key"][2]
            pg = PodcastGroup.wrap(doc)
            return pg.get_podcast_by_id(pid)
Example #8
0
def podcastgroup_by_id(group_id):

    if not group_id:
        raise QueryParameterMissing('group_id')

    pg = PodcastGroup.get(group_id)

    if pg.needs_update:
        incomplete_obj.send_robust(sender=pg)

    return pg
Example #9
0
File: slugs.py Project: fk-lx/mygpo
    def _podcast_wrapper(r):
        from mygpo.core.models import Podcast, PodcastGroup

        doc = r['doc']

        if doc['doc_type'] == 'Podcast':
            return Podcast.wrap(doc)
        else:
            pid = r['key'][2]
            pg = PodcastGroup.wrap(doc)
            return pg.get_podcast_by_id(pid)
Example #10
0
def podcastgroup_for_slug_id(slug_id):
    """ Returns the Podcast for either an CouchDB-ID for a Slug """

    if not slug_id:
        raise QueryParameterMissing('slug_id')

    if is_couchdb_id(slug_id):
        return podcastgroup_by_id(slug_id)

    else:
        #TODO: implement
        return PodcastGroup.for_slug(slug_id)
Example #11
0
File: views.py Project: Mic92/mygpo
    def _decorator(request, pid, *args, **kwargs):
        try:
            pid = int(pid)
        except (TypeError, ValueError):
            raise Http404

        group = PodcastGroup.for_oldid(pid)

        if not podcast:
            raise Http404

        return f(request, group, *args, **kwargs)
Example #12
0
def _wrap_pg(doc):

    doc = doc['doc']

    if not doc:
        return None

    if doc['doc_type'] == 'Podcast':
        return Podcast.wrap(doc)

    elif doc['doc_type'] == 'PodcastGroup':
        return PodcastGroup.wrap(doc)

    else:
        logger.error('received unknown doc_type "%s"', doc['doc_type'])
Example #13
0
def all_podcasts():
    from mygpo.db.couchdb.utils import multi_request_view
    res = multi_request_view(Podcast,'podcasts/by_id',
            wrap         = False,
            include_docs = True,
            stale        = 'update_after',
        )

    # TODO: this method is only used for maintenance purposes; should we
    #       really send 'incomplete_obj' signals here?

    for r in res:
        obj = r['doc']
        if obj['doc_type'] == 'Podcast':
            yield Podcast.wrap(obj)
        else:
            pid = r[u'key']
            pg = PodcastGroup.wrap(obj)
            podcast = pg.get_podcast_by_id(pid)
            yield podcast
Example #14
0
File: views.py Project: Mic92/mygpo
def podcast(request, podcast):

    if not check_publisher_permission(request.user, podcast):
        return HttpResponseForbidden()

    timeline_data = listener_data([podcast])
    subscription_data = subscriber_data([podcast])[-20:]

    if podcast.group:
        group = PodcastGroup.get(podcast.group)
    else:
        group = None

#    if request.method == 'POST':
#        form = NonePodcastForm(request.POST, instance=p)
#        if form.is_valid():
#            form.save()

#    elif request.method == 'GET':
#        form = PodcastForm(instance=p)

    if 'new_token' in request.GET:
        request.user.create_new_token('publisher_update_token')
        request.user.save()

    update_token = request.user.publisher_update_token

    heatmap = EpisodeHeatmap(podcast.get_id())

    site = RequestSite(request)

    return render(request, 'publisher/podcast.html', {
        'site': site,
        'podcast': podcast,
        'group': group,
        'form': None,
        'timeline_data': timeline_data,
        'subscriber_data': subscription_data,
        'update_token': update_token,
        'heatmap': heatmap,
        })
Example #15
0
File: slugs.py Project: Mic92/mygpo
    def _group_wrapper(doc):
        from mygpo.core.models import PodcastGroup

        return PodcastGroup.wrap(doc)
Example #16
0
def show(request, podcast):
    """ Shows a podcast detail page """

    podcast = check_restrictions(podcast)

    current_site = RequestSite(request)
    num_episodes = 20
    episodes = episode_list(podcast, request.user, limit=num_episodes)
    user = request.user

    max_listeners = max([e.listeners for e in episodes] + [0])

    episode = None

    if episodes:
        episode = episodes[0]
        episodes = episodes[1:]

    if podcast.group:
        group = PodcastGroup.get(podcast.group)
        rel_podcasts = filter(lambda x: x != podcast, group.podcasts)
    else:
        rel_podcasts = []

    tags, has_tagged = get_tags(podcast, user)

    if user.is_authenticated():
        state = podcast_state_for_user_podcast(user, podcast)
        subscribed_devices = state.get_subscribed_device_ids()
        subscribed_devices = user.get_devices(subscribed_devices)

        subscribe_targets = podcast.subscribe_targets(user)

        has_history = bool(state.actions)
        is_public = state.settings.get('public_subscription', True)
        can_flattr = request.user.get_wksetting(FLATTR_TOKEN) and podcast.flattr_url

    else:
        has_history = False
        is_public = False
        subscribed_devices = []
        subscribe_targets = []
        can_flattr = False

    is_publisher = check_publisher_permission(user, podcast)

    episodes_total = podcast.episode_count or 0
    num_pages = episodes_total / num_episodes
    page_list = get_page_list(1, num_pages, 1, 15)

    return render(request, 'podcast.html', {
        'tags': tags,
        'has_tagged': has_tagged,
        'url': current_site,
        'has_history': has_history,
        'podcast': podcast,
        'is_public': is_public,
        'devices': subscribed_devices,
        'related_podcasts': rel_podcasts,
        'can_subscribe': len(subscribe_targets) > 0,
        'subscribe_targets': subscribe_targets,
        'episode': episode,
        'episodes': episodes,
        'max_listeners': max_listeners,
        'can_flattr': can_flattr,
        'is_publisher': is_publisher,
        'page_list': page_list,
        'current_page': 1,
    })