Exemplo n.º 1
0
def add_chapter(request, episode):
    e_state = episode.get_user_state(request.user)

    podcast = Podcast.get(episode.podcast)

    try:
        start = parse_time(request.POST.get('start', '0'))

        if request.POST.get('end', '0'):
            end = parse_time(request.POST.get('end', '0'))
        else:
            end = start

        adv = 'advertisement' in request.POST
        label = request.POST.get('label')

    except Exception as e:
        # FIXME: when using Django's messaging system, set error message

        return HttpResponseRedirect(get_episode_link_target(episode, podcast))


    chapter = Chapter()
    chapter.start = start
    chapter.end = end
    chapter.advertisement = adv
    chapter.label = label

    e_state.update_chapters(add=[chapter])

    return HttpResponseRedirect(get_episode_link_target(episode, podcast))
Exemplo n.º 2
0
def add_action(request, episode):

    device = request.user.get_device(request.POST.get('device'))

    action_str = request.POST.get('action')
    timestamp = request.POST.get('timestamp', '')

    if timestamp:
        try:
            timestamp = dateutil.parser.parse(timestamp)
        except:
            timestamp = datetime.utcnow()
    else:
        timestamp = datetime.utcnow()

    action = EpisodeAction()
    action.timestamp = timestamp
    action.device = device.id if device else None
    action.action = action_str

    state = episode.get_user_state(request.user)

    @repeat_on_conflict(['action'])
    def _add_action(action):
        state.add_actions([action])
        state.save()

    _add_action(action=action)

    podcast = Podcast.get(episode.podcast)

    return HttpResponseRedirect(get_episode_link_target(episode, podcast))
Exemplo n.º 3
0
def add_action(request, episode):

    device = request.user.get_device(request.POST.get('device'))

    action_str = request.POST.get('action')
    timestamp = request.POST.get('timestamp', '')

    if timestamp:
        try:
            timestamp = dateutil.parser.parse(timestamp)
        except (ValueError, AttributeError):
            timestamp = datetime.utcnow()
    else:
        timestamp = datetime.utcnow()

    action = EpisodeAction()
    action.timestamp = timestamp
    action.upload_timestamp = get_timestamp(datetime.utcnow())
    action.device = device.id if device else None
    action.action = action_str

    state = episode_state_for_user_episode(request.user, episode)
    add_episode_actions(state, [action])

    podcast = podcast_by_id(episode.podcast)
    return HttpResponseRedirect(get_episode_link_target(episode, podcast))
Exemplo n.º 4
0
Arquivo: views.py Projeto: fk-lx/mygpo
def update_episode_slug(request, episode):
    """ sets a new "main" slug, and moves the existing to the merged slugs """

    new_slug = request.POST.get('slug')
    podcast = podcast_by_id(episode.podcast)

    if new_slug:
        # remove the new slug from other episodes (of the same podcast)
        other_episodes = episodes_for_slug(podcast.get_id(), new_slug)

        for other_episode in other_episodes:

            if other_episode == episode:
                continue

            remove_episode_slug(other_episode, new_slug)
            messages.warning(request,
                _(u'Removed slug {slug} from {episode}'.format(
                    slug=new_slug, episode=other_episode.title))
            )

    set_episode_slug(episode, new_slug)

    # TODO: we should use better cache invalidation
    cache.clear()

    return HttpResponseRedirect(
        get_episode_link_target(episode, podcast, 'episode-publisher-detail')
    )
Exemplo n.º 5
0
    def _decorator(request, p_slug, e_slug, *args, **kwargs):

        pquery = Podcast.objects.filter(
            slugs__slug=p_slug,
            slugs__scope='',
        )

        try:
            podcast = pquery.prefetch_related('slugs').get()
        except Podcast.DoesNotExist:
            raise Http404

        equery = Episode.objects.filter(
            podcast = podcast,
            slugs__slug=e_slug,
            slugs__scope=podcast.id.hex,
        )

        try:
            episode = equery.prefetch_related('urls', 'slugs').get()

            # set previously fetched podcast, to avoid additional query
            episode.podcast = podcast

        except Episode.DoesNotExist:
            raise Http404

        # redirect when Id or a merged (non-cannonical) slug is used
        if episode.slug and episode.slug != e_slug:
            return HttpResponseRedirect(
                    get_episode_link_target(episode, podcast))

        return f(request, episode, *args, **kwargs)
Exemplo n.º 6
0
    def _decorator(request, p_slug, e_slug, *args, **kwargs):

        pquery = Podcast.objects.filter(slugs__slug=p_slug, slugs__scope='')

        try:
            podcast = pquery.prefetch_related('slugs').get()
        except Podcast.DoesNotExist:
            raise Http404

        equery = Episode.objects.filter(podcast=podcast,
                                        slugs__slug=e_slug,
                                        slugs__scope=podcast.id.hex)

        try:
            episode = equery.prefetch_related('urls', 'slugs').get()

            # set previously fetched podcast, to avoid additional query
            episode.podcast = podcast

        except Episode.DoesNotExist:
            raise Http404

        # redirect when Id or a merged (non-cannonical) slug is used
        if episode.slug and episode.slug != e_slug:
            return HttpResponseRedirect(
                get_episode_link_target(episode, podcast))

        return f(request, episode, *args, **kwargs)
Exemplo n.º 7
0
def update_episode_slug(request, episode):
    """ sets a new "main" slug, and moves the existing to the merged slugs """

    new_slug = request.POST.get('slug')
    podcast = episode.podcast

    if new_slug:
        # remove the new slug from other episodes (of the same podcast)
        other_episodes = Episode.objects.filter(
            podcast=podcast,
            slugs__slug=new_slug,
            slugs__content_type=ContentType.objects.get_for_model(Episode),
        )

        for other_episode in other_episodes:

            if other_episode == episode:
                continue

            other_episode.remove_slug(new_slug)
            messages.warning(request,
                _(u'Removed slug {slug} from {episode}'.format(
                    slug=new_slug, episode=other_episode.title))
            )

    episode.set_slug(new_slug)

    # TODO: we should use better cache invalidation
    cache.clear()

    return HttpResponseRedirect(
        get_episode_link_target(episode, podcast, 'episode-publisher-detail')
    )
Exemplo n.º 8
0
def episode_data(episode, domain, podcast=None):

    podcast = podcast or episode.podcast

    data = {
        "title":
        episode.title,
        "url":
        episode.url,
        "podcast_title":
        podcast.title if podcast else '',
        "podcast_url":
        podcast.url if podcast else '',
        "description":
        episode.description,
        "website":
        episode.link,
        "mygpo_link":
        'http://%(domain)s%(res)s' %
        dict(domain=domain, res=get_episode_link_target(episode, podcast))
        if podcast else '',
    }

    if episode.released:
        data['released'] = episode.released.strftime('%Y-%m-%dT%H:%M:%S')
    else:
        data['released'] = ''

    return data
Exemplo n.º 9
0
def update_episode_slug(request, episode):
    """ sets a new "main" slug, and moves the existing to the merged slugs """

    new_slug = request.POST.get('slug')
    podcast = episode.podcast

    if new_slug:
        # remove the new slug from other episodes (of the same podcast)
        other_episodes = Episode.objects.filter(
            podcast=podcast,
            slugs__slug=new_slug,
            slugs__content_type=ContentType.objects.get_for_model(Episode),
        )

        for other_episode in other_episodes:

            if other_episode == episode:
                continue

            other_episode.remove_slug(new_slug)
            messages.warning(
                request,
                _('Removed slug {slug} from {episode}'.format(
                    slug=new_slug, episode=other_episode.title)),
            )

    episode.set_slug(new_slug)

    # TODO: we should use better cache invalidation
    cache.clear()

    return HttpResponseRedirect(
        get_episode_link_target(episode, podcast, 'episode-publisher-detail'))
Exemplo n.º 10
0
    def _decorator(request, id, *args, **kwargs):
        episode = episode_for_oldid(id)

        if episode is None:
            raise Http404

        # redirect to Id or slug URL
        podcast = podcast_by_id(episode.podcast)
        return HttpResponseRedirect(get_episode_link_target(episode, podcast))
Exemplo n.º 11
0
def remove_chapter(request, episode, start, end):
    e_state = episode.get_user_state(request.user)

    remove = (int(start), int(end))
    e_state.update_chapters(rem=[remove])

    podcast = Podcast.get(episode.podcast)

    return HttpResponseRedirect(get_episode_link_target(episode, podcast))
Exemplo n.º 12
0
def toggle_favorite(request, episode):
    episode_state = episode_state_for_user_episode(request.user, episode)

    is_fav = episode_state.is_favorite()
    set_episode_favorite(episode_state, not is_fav)

    podcast = podcast_by_id(episode.podcast)

    return HttpResponseRedirect(get_episode_link_target(episode, podcast))
Exemplo n.º 13
0
def episode_link(episode, podcast, title=None):
    """ Returns the link for a single Episode """

    title = title or getattr(episode, 'display_title', None) or \
            episode.title or _('Unknown Episode')

    title = strip_tags(title)

    return '<a href="%(target)s" title="%(title)s">%(title)s</a>' % \
        dict(target=get_episode_link_target(episode, podcast), title=title)
Exemplo n.º 14
0
def opengraph_episode(episode, podcast):
    s = OPENGRAPH_STR % dict(
        title     = episode.title,
        type      = 'episode',
        image     = 'http://gpodder.net%s' % podcast.get_logo_url(PODCAST_LOGO_BIG_SIZE),
        url       = 'http://gpodder.net%s' % get_episode_link_target(episode, podcast),
        site_name = 'gpodder.net',
        admins    = '0'
    )
    return s
Exemplo n.º 15
0
def opengraph_episode(episode, podcast):
    s = OPENGRAPH_STR % dict(
        title=episode.title,
        type='episode',
        image='http://gpodder.net%s' %
        get_logo_url(podcast, PODCAST_LOGO_BIG_SIZE),
        url='http://gpodder.net%s' % get_episode_link_target(episode, podcast),
        site_name='gpodder.net',
        admins='0')
    return s
Exemplo n.º 16
0
def toggle_favorite(request, episode):
    episode_state = episode.get_user_state(request.user)
    is_fav = episode_state.is_favorite()
    episode_state.set_favorite(not is_fav)

    episode_state.save()

    podcast = Podcast.get(episode.podcast)

    return HttpResponseRedirect(get_episode_link_target(episode, podcast))
Exemplo n.º 17
0
def opengraph_episode(episode, podcast):
    s = OPENGRAPH_STR % dict(
        title=episode.title,
        type="episode",
        image="http://gpodder.net%s" %
        get_logo_url(podcast, PODCAST_LOGO_BIG_SIZE),
        url="http://gpodder.net%s" % get_episode_link_target(episode, podcast),
        site_name="gpodder.net",
        admins="0",
    )
    return s
Exemplo n.º 18
0
def toggle_favorite(request, episode):
    user = request.user

    fav, created = FavoriteEpisode.objects.get_or_create(user=user, episode=episode)

    # if the episode was already a favorite, remove it
    if not created:
        fav.delete()

    podcast = episode.podcast
    return HttpResponseRedirect(get_episode_link_target(episode, podcast))
Exemplo n.º 19
0
def toggle_favorite(request, episode):
    user = request.user

    fav, created = FavoriteEpisode.objects.get_or_create(user=user, episode=episode)

    # if the episode was already a favorite, remove it
    if not created:
        fav.delete()

    podcast = episode.podcast
    return HttpResponseRedirect(get_episode_link_target(episode, podcast))
Exemplo n.º 20
0
def episode_link(episode, podcast, title=None):
    """ Returns the link for a single Episode """

    title = title or getattr(episode, 'display_title', None) or \
            episode.get_short_title(podcast.common_episode_title) or \
            episode.title or \
            _('Unknown Episode')

    title = strip_tags(title)

    return '<a href="%(target)s" title="%(title)s">%(title)s</a>' % \
        dict(target=get_episode_link_target(episode, podcast), title=title)
Exemplo n.º 21
0
def episode_link(episode, podcast, title=None):
    """ Returns the link for a single Episode """

    title = title or getattr(episode, 'display_title', None) or \
            episode.get_short_title(podcast.common_episode_title) or \
            episode.title or \
            _('Unknown Episode')

    title = strip_tags(title)

    return format_html('<a href="{target}" title="{title}">{title}</a>',
                       target=get_episode_link_target(episode, podcast),
                       title=title)
Exemplo n.º 22
0
    def _decorator(request, p_slug_id, e_slug_id, *args, **kwargs):
        episode = episode_for_slug_id(p_slug_id, e_slug_id)

        if episode is None:
            raise Http404

        # redirect when Id or a merged (non-cannonical) slug is used
        if episode.slug and episode.slug != e_slug_id:
            podcast = podcast_by_id(episode.podcast)
            return HttpResponseRedirect(
                    get_episode_link_target(episode, podcast))

        return f(request, episode, *args, **kwargs)
Exemplo n.º 23
0
def episode_link(episode, podcast, title=None):
    """ Returns the link for a single Episode """

    title = title or getattr(episode, 'display_title', None) or \
            episode.get_short_title(podcast.common_episode_title) or \
            episode.title or \
            _('Unknown Episode')

    title = strip_tags(title)

    return format_html('<a href="{target}" title="{title}">{title}</a>',
                       target=get_episode_link_target(episode, podcast),
                       title=title)
Exemplo n.º 24
0
    def _decorator(request, p_id, e_id, *args, **kwargs):

        try:
            query = Episode.objects.filter(id=e_id, podcast_id=p_id)
            episode = query.select_related("podcast").get()

        except Episode.DoesNotExist:
            raise Http404

        # redirect when Id or a merged (non-cannonical) slug is used
        if episode.slug and episode.slug != e_id:
            podcast = episode.podcast
            return HttpResponseRedirect(get_episode_link_target(episode, podcast))

        return f(request, episode, *args, **kwargs)
Exemplo n.º 25
0
    def _decorator(request, p_id, e_id, *args, **kwargs):

        try:
            query = Episode.objects.filter(id=e_id, podcast_id=p_id)
            episode = query.select_related('podcast').get()

        except Episode.DoesNotExist:
            raise Http404

        # redirect when Id or a merged (non-cannonical) slug is used
        if episode.slug and episode.slug != e_id:
            podcast = episode.podcast
            return HttpResponseRedirect(get_episode_link_target(episode, podcast))

        return f(request, episode, *args, **kwargs)
Exemplo n.º 26
0
def flattr_episode(request, episode):
    """ Flattrs an episode, records an event and redirects to the episode """

    user = request.user
    site = RequestSite(request)

    # Flattr via the tasks queue, but wait for the result
    task = flattr_thing.delay(user.pk, episode._id, site.domain,
            request.is_secure(), 'Episode')
    success, msg = task.get()

    if success:
        messages.success(request, _("Flattr\'d"))

    else:
        messages.error(request, msg)

    podcast = episode.podcast
    return HttpResponseRedirect(get_episode_link_target(episode, podcast))
Exemplo n.º 27
0
def add_action(request, episode):

    user = request.user
    client = user.client_set.get(id=request.POST.get('device'))

    action_str = request.POST.get('action')
    timestamp = request.POST.get('timestamp', '')

    if timestamp:
        try:
            timestamp = dateutil.parser.parse(timestamp)
        except (ValueError, AttributeError, TypeError):
            timestamp = datetime.utcnow()
    else:
        timestamp = datetime.utcnow()

    EpisodeHistoryEntry.create_entry(user, episode, action_str, client, timestamp)
    podcast = episode.podcast
    return HttpResponseRedirect(get_episode_link_target(episode, podcast))
Exemplo n.º 28
0
def flattr_episode(request, episode):
    """ Flattrs an episode, records an event and redirects to the episode """

    user = request.user
    site = RequestSite(request)

    # Flattr via the tasks queue, but wait for the result
    task = flattr_thing.delay(user.pk, episode._id, site.domain,
                              request.is_secure(), 'Episode')
    success, msg = task.get()

    if success:
        messages.success(request, _("Flattr\'d"))

    else:
        messages.error(request, msg)

    podcast = episode.podcast
    return HttpResponseRedirect(get_episode_link_target(episode, podcast))
Exemplo n.º 29
0
def episode_data(episode, domain, podcast=None):

    podcast = podcast or podcast_by_id(episode.podcast)

    data = {
        "title": episode.title,
        "url": episode.url,
        "podcast_title": podcast.title if podcast else '',
        "podcast_url": podcast.url if podcast else '',
        "description": episode.description,
        "website": episode.link,
        "mygpo_link": 'http://%(domain)s%(res)s' % dict(domain=domain,
            res=get_episode_link_target(episode, podcast)) if podcast else ''
        }

    if episode.released:
        data['released'] = episode.released.strftime('%Y-%m-%dT%H:%M:%S')

    return data
Exemplo n.º 30
0
def add_action(request, episode):

    user = request.user
    client = user.client_set.get(id=request.POST.get("device"))

    action_str = request.POST.get("action")
    timestamp = request.POST.get("timestamp", "")

    if timestamp:
        try:
            timestamp = dateutil.parser.parse(timestamp)
        except (ValueError, AttributeError, TypeError):
            timestamp = datetime.utcnow()
    else:
        timestamp = datetime.utcnow()

    EpisodeHistoryEntry.create_entry(user, episode, action_str, client, timestamp)
    podcast = episode.podcast
    return HttpResponseRedirect(get_episode_link_target(episode, podcast))
Exemplo n.º 31
0
def flattr_episode(request, episode):
    """ Flattrs an episode, records an event and redirects to the episode """

    user = request.user
    site = RequestSite(request)

    # Flattr via the tasks queue, but wait for the result
    task = flattr_thing.delay(user, episode._id, site.domain,
            request.is_secure(), 'Episode')
    success, msg = task.get()

    if success:
        action = EpisodeAction()
        action.action = 'flattr'
        action.upload_timestamp = get_timestamp(datetime.utcnow())
        state = episode_state_for_user_episode(request.user, episode)
        add_episode_actions(state, [action])
        messages.success(request, _("Flattr\'d"))

    else:
        messages.error(request, msg)

    podcast = podcast_by_id(episode.podcast)
    return HttpResponseRedirect(get_episode_link_target(episode, podcast))
Exemplo n.º 32
0
 def render(self, context):
     episode = self.episode.resolve(context)
     podcast = self.podcast.resolve(context)
     add_args = [arg.resolve(context) for arg in self.add_args]
     return get_episode_link_target(episode, podcast, self.view_name, add_args)
Exemplo n.º 33
0
 def render(self, context):
     episode = self.episode.resolve(context)
     podcast = self.podcast.resolve(context)
     add_args = [arg.resolve(context) for arg in self.add_args]
     return get_episode_link_target(episode, podcast, self.view_name,
                                    add_args)
Exemplo n.º 34
0
def fb_like_episode(episode, podcast):
    url = "http://gpodder.net/%s" % get_episode_link_target(episode, podcast)
    s = LIKE_BUTTON_STR % dict(url=url)
    return s
Exemplo n.º 35
0
def fb_like_episode(episode, podcast):
    url = 'http://gpodder.net/%s' % get_episode_link_target(episode, podcast)
    s = LIKE_BUTTON_STR % dict(url=url)
    return mark_safe(s)