Пример #1
0
def item(request, id):
    item = get_object_or_404(Item.objects.select_related(), pk=id)
    if item.date is None:
        previousSet = Item.objects.filter(channel=item.channel,
                                          pk__lt=item.pk).order_by('-pk')
        nextSet = Item.objects.filter(channel=item.channel,
                                      pk__gt=item.pk).order_by('pk')
    else:
        previousSet = Item.objects.filter(channel=item.channel,
                                          date__lt=item.date).order_by('-date')
        nextSet = Item.objects.filter(channel=item.channel,
                                      date__gt=item.date).order_by('date')

    try:
        previous = previousSet[0]
    except IndexError:
        previous = None

    index = nextSet.count()

    if index:
        next = nextSet[0]
    else:
        next = None

    default_page = (index // 10) + 1
    paginator = Paginator(item.channel.items.all(), 10)
    try:
        page = paginator.page(request.GET.get('page', default_page))
    except InvalidPage:
        raise Http404
    for i in page.object_list:
        i.channel = item.channel

    share_url = urlparse.urljoin(
        settings.BASE_URL_FULL,
        '/items/%s' % id)
    share_links = util.get_share_links(share_url, item.name)

    context = {'item': item,
               'channel': item.channel,
               'audio': item.channel.state == item.channel.AUDIO,
               'bittorrent': item.mime_type == 'application/x-bittorrent',
               'previous': previous,
               'next': next,
               'page': page,
               'share_url': share_url,
               'hide_share': request.GET.get('share') != 'true',
               'share_type': 'item',
               'share_links': share_links,
               'feed_url': item.channel.url,
               'item_name': item.name,
               'file_url': item.url
               }

    if share_url:
        context['google_analytics_ua'] = None

    return render_to_response('channels/playback.html', context,
                              context_instance=RequestContext(request))
Пример #2
0
def share_feed(request):
    try:
        feed_url = request.GET['feed_url'].encode('utf8')
    except KeyError:
        return HttpResponse("you must supply a feed_url")

    try:
        channel, items = get_channels_and_items(feed_url)
    except FeedFetchingError:
        return HttpResponse("This feed appears to be dead.")

    if isinstance(channel, Channel):
        return util.redirect(channel.get_absolute_url(), {'share': 'true'})

    share_url = urlparse.urljoin(
        settings.BASE_URL_FULL,
        '/share/feed/?feed_url=%s&share=false' % urllib.quote(feed_url))

    share_links = None
    share_button_url = None
    if request.GET.get('share') == 'false':
        share_button_url = urlparse.urljoin(
            settings.BASE_URL_FULL,
            '/share/feed/?feed_url=%s' % urllib.quote(feed_url))
    else:
        share_links = util.get_share_links(share_url, channel.name)

    if items:
        item_paginator = Paginator(items[:10], 10)
        item_page = item_paginator.page(1)
    else:
        item_page = None
    return render_to_response('channels/show-channel.html', {
        'channel': channel,
        'item_page': item_page,
        'feed_url': feed_url,
        'share_url': share_url,
        'share_button_url': share_button_url,
        'share_type': 'feed',
        'google_analytics_ua': None,
        'share_links': share_links
    },
                              context_instance=RequestContext(request))
Пример #3
0
def share_feed(request):
    try:
        feed_url = request.GET['feed_url'].encode('utf8')
    except KeyError:
        return HttpResponse("you must supply a feed_url")

    try:
        channel, items = get_channels_and_items(feed_url)
    except FeedFetchingError:
        return HttpResponse("This feed appears to be dead.")

    if isinstance(channel, Channel):
        return util.redirect(channel.get_absolute_url(), {'share': 'true'})

    share_url = urlparse.urljoin(
        settings.BASE_URL_FULL,
        '/share/feed/?feed_url=%s&share=false' % urllib.quote(feed_url))

    share_links = None
    share_button_url = None
    if request.GET.get('share') == 'false':
        share_button_url = urlparse.urljoin(
            settings.BASE_URL_FULL,
            '/share/feed/?feed_url=%s' % urllib.quote(feed_url))
    else:
        share_links = util.get_share_links(share_url, channel.name)

    if items:
        item_paginator = Paginator(items[:10], 10)
        item_page = item_paginator.page(1)
    else:
        item_page = None
    return render_to_response('channels/show-channel.html',
                              {'channel': channel,
                               'item_page': item_page,
                               'feed_url': feed_url,
                               'share_url': share_url,
                               'share_button_url': share_button_url,
                               'share_type': 'feed',
                               'google_analytics_ua': None,
                               'share_links': share_links
                               }, context_instance=RequestContext(request))
Пример #4
0
def share_item(request):
    # check to see if we have that item in our database...
    # If so
    #   use that item
    # else
    #   let's create a "fake" item to preview
    # render that item preview
    try:
        file_url = request.GET['file_url'].encode('utf8')
    except KeyError:
        return HttpResponse("you must supply a file_url")

    feed_url = request.GET.get('feed_url')
    webpage_url = request.GET.get('webpage_url')
    item_name = request.GET.get('item_name')

    channel = None
    item = None
    next = None
    previous = None

    if webpage_url:
        webpage_url = webpage_url.encode('utf8')

    if feed_url:
        feed_url = feed_url.encode('utf8')
        try:
            channel, channel_items = get_channels_and_items(feed_url)
        except FeedFetchingError:
            channel = None
            feed_url = None
    if channel is None:
        channel_items = []

    previous, item, next = get_item(file_url, channel, channel_items,
                                    item_name)

    if isinstance(item, Item):
        return util.redirect(item.get_absolute_url(), {'share': 'true'})

    # get the sharing info
    get_params = {'file_url': file_url, 'share': 'false'}
    if feed_url:
        get_params['feed_url'] = feed_url
    if webpage_url:
        get_params['webpage_url'] = webpage_url
    if item_name:
        get_params['item_name'] = feed_url

    share_url = urlparse.urljoin(
        settings.BASE_URL_FULL,
        '/share/item/?%s' % urllib.urlencode(get_params))

    share_links = None
    share_button_url = None
    if request.GET.get('share') == 'false':
        get_params.pop('share')
        share_button_url = urlparse.urljoin(
            settings.BASE_URL_FULL,
            '/share/item/?%s' % urllib.urlencode(get_params))
    else:
        share_links = util.get_share_links(share_url, item.name)

    # render the page
    return render_to_response('channels/playback.html', {
        'item': item,
        'channel': channel,
        'audio': False,
        'previous': previous,
        'next': next,
        'feed_url': feed_url,
        'webpage_url': webpage_url,
        'item_name': item_name,
        'file_url': file_url,
        'share_url': share_url,
        'share_button_url': share_button_url,
        'share_type': 'item',
        'google_analytics_ua': None,
        'share_links': share_links
    },
                              context_instance=RequestContext(request))
Пример #5
0
def show(request, id, featured_form=None):
    c = get_object_or_404(Channel, pk=id)
    try:
        c.rating
    except GeneratedRatings.DoesNotExist:
        c.rating = GeneratedRatings.objects.create(channel=c)
    # redirect old URLs to canonical ones
    if request.path != c.get_url():
        return util.redirect(c.get_absolute_url(), request.GET)

    item_paginator = Paginator(c.items.all(), 10)
    try:
        item_page = item_paginator.page(request.GET.get('page', 1))
    except InvalidPage:
        raise Http404
    for i in item_page.object_list:
        i.channel = c

    is_miro = bool(util.get_miro_version(request.META.get('HTTP_USER_AGENT')))

    share_links = share_url = None
    if request.GET.get('share') == 'true':
        share_url = urlparse.urljoin(settings.BASE_URL_FULL, '/feeds/%s' % id)
        share_links = util.get_share_links(share_url, c.name)

    country = country_code(request)
    context = {
        'channel': c,
        'item_page': item_page,
        'is_miro': is_miro,
        'show_edit_button': c.can_edit(request.user),
        'show_extra_info': c.can_edit(request.user),
        'link_to_channel': True,
        'BASE_URL': settings.BASE_URL,
        'feed_url': c.url,
        'share_url': share_url,
        'share_type': 'feed',
        'share_links': share_links,
        'country': country,
        'audio': c.state == c.AUDIO
    }

    if share_url:
        context['google_analytics_ua'] = None

    if country and c.geoip and country not in c.geoip.split(','):
        # restricted channel
        request.add_notification(
            None,
            _('This show may not be available to you, '
              'as it is restricted to certain countries.'))

    if request.user.has_perm('featured.change_featuredqueue'):
        try:
            featured_queue = c.featured_queue
        except FeaturedQueue.DoesNotExist:
            pass
        else:
            if featured_queue.state in (FeaturedQueue.IN_QUEUE,
                                        FeaturedQueue.CURRENT):
                c.featured = True
            if c.featured_emails.count():
                last_featured_email = c.featured_emails.all()[0]
            else:
                last_featured_email = None
            if featured_form is None:
                featured_form = FeaturedEmailForm(request, c)
            context['featured_email_form'] = featured_form
            context['last_featured_email'] = last_featured_email
    return render_to_response('channels/show-channel.html',
                              context,
                              context_instance=RequestContext(request))
Пример #6
0
def share_item(request):
    # check to see if we have that item in our database...
    # If so
    #   use that item
    # else
    #   let's create a "fake" item to preview
    # render that item preview
    try:
        file_url = request.GET['file_url'].encode('utf8')
    except KeyError:
        return HttpResponse("you must supply a file_url")

    feed_url = request.GET.get('feed_url')
    webpage_url = request.GET.get('webpage_url')
    item_name = request.GET.get('item_name')

    channel = None
    item = None
    next = None
    previous = None

    if webpage_url:
        webpage_url = webpage_url.encode('utf8')

    if feed_url:
        feed_url = feed_url.encode('utf8')
        try:
            channel, channel_items = get_channels_and_items(feed_url)
        except FeedFetchingError:
            channel = None
            feed_url = None
    if channel is None:
        channel_items = []

    previous, item, next = get_item(file_url, channel,
                                    channel_items, item_name)

    if isinstance(item, Item):
        return util.redirect(item.get_absolute_url(), {'share': 'true'})

    # get the sharing info
    get_params = {'file_url': file_url, 'share': 'false'}
    if feed_url:
        get_params['feed_url'] = feed_url
    if webpage_url:
        get_params['webpage_url'] = webpage_url
    if item_name:
        get_params['item_name'] = feed_url

    share_url = urlparse.urljoin(
        settings.BASE_URL_FULL,
        '/share/item/?%s' % urllib.urlencode(get_params))

    share_links = None
    share_button_url = None
    if request.GET.get('share') == 'false':
        get_params.pop('share')
        share_button_url = urlparse.urljoin(
            settings.BASE_URL_FULL,
            '/share/item/?%s' % urllib.urlencode(get_params))
    else:
        share_links = util.get_share_links(share_url, item.name)

    # render the page
    return render_to_response(
        'channels/playback.html',
        {'item': item,
         'channel': channel,
         'audio': False,
         'previous': previous,
         'next': next,
         'feed_url': feed_url,
         'webpage_url': webpage_url,
         'item_name': item_name,
         'file_url': file_url,
         'share_url': share_url,
         'share_button_url': share_button_url,
         'share_type': 'item',
         'google_analytics_ua': None,
         'share_links': share_links},
        context_instance=RequestContext(request))
Пример #7
0
def show(request, id, featured_form=None):
    c = get_object_or_404(Channel, pk=id)
    try:
        c.rating
    except GeneratedRatings.DoesNotExist:
        c.rating = GeneratedRatings.objects.create(channel=c)
    # redirect old URLs to canonical ones
    if request.path != c.get_url():
        return util.redirect(c.get_absolute_url(), request.GET)

    item_paginator = Paginator(c.items.all(), 10)
    try:
        item_page = item_paginator.page(request.GET.get('page', 1))
    except InvalidPage:
        raise Http404
    for i in item_page.object_list:
        i.channel = c

    is_miro = bool(util.get_miro_version(request.META.get('HTTP_USER_AGENT')))

    share_links = share_url = None
    if request.GET.get('share') == 'true':
        share_url = urlparse.urljoin(
            settings.BASE_URL_FULL,
            '/feeds/%s' % id)
        share_links = util.get_share_links(share_url, c.name)

    country = country_code(request)
    context = {
        'channel': c,
        'item_page': item_page,
        'is_miro': is_miro,
        'show_edit_button': c.can_edit(request.user),
        'show_extra_info': c.can_edit(request.user),
        'link_to_channel': True,
        'BASE_URL': settings.BASE_URL,
        'feed_url': c.url,
        'share_url': share_url,
        'share_type': 'feed',
        'share_links': share_links,
        'country': country,
        'audio': c.state == c.AUDIO}

    if share_url:
        context['google_analytics_ua'] = None

    if country and c.geoip and country not in c.geoip.split(','):
        # restricted channel
        request.add_notification(None, _('This show may not be available to you, '
                                   'as it is restricted to certain countries.'))

    if request.user.has_perm('featured.change_featuredqueue'):
        try:
            featured_queue = c.featured_queue
        except FeaturedQueue.DoesNotExist:
            pass
        else:
            if featured_queue.state in (
                FeaturedQueue.IN_QUEUE, FeaturedQueue.CURRENT):
                c.featured = True
            if c.featured_emails.count():
                last_featured_email = c.featured_emails.all()[0]
            else:
                last_featured_email = None
            if featured_form is None:
                featured_form = FeaturedEmailForm(request, c)
            context['featured_email_form'] = featured_form
            context['last_featured_email'] = last_featured_email
    return render_to_response('channels/show-channel.html', context,
                              context_instance=RequestContext(request))