Example #1
0
def add_feed(request):
    add_form = forms.AddFeedForm(request.GET)

    if not add_form.is_valid():
        return HttpResponseBadRequest(
            add_form['feed_url'].errors.as_text())

    feed_url = add_form.cleaned_data['feed_url']
    parsed_feed = add_form.cleaned_data['parsed_feed']

    title = getattr(parsed_feed.feed, 'title', '') or feed_url
    for regexp in VIDEO_SERVICE_TITLES:
        match = regexp.match(title)
        if match:
            title = match.group(1)
            break

    defaults = {
        'name': title,
        'feed_url': feed_url,
        'webpage': parsed_feed.feed.get('link', ''),
        'description': parsed_feed.feed.get('summary', ''),
        'when_submitted': datetime.datetime.now(),
        'last_updated': datetime.datetime.now(),
        'status': models.FEED_STATUS_UNAPPROVED,
        'user': request.user,
        'etag': '',
        'auto_approve': bool(request.POST.get('auto_approve', False))}

    video_count = bulk_import.video_count(feed_url, parsed_feed)

    if request.method == 'POST':
        if 'cancel' in request.POST:
            return HttpResponseRedirect(reverse('localtv_admin_manage_page'))

        form = forms.SourceForm(request.POST, instance=models.Feed(**defaults))
        if form.is_valid():
            feed, created = models.Feed.objects.get_or_create(
                feed_url=defaults['feed_url'],
                site=request.sitelocation.site,
                defaults=defaults)

            if not created:
                for key, value in defaults.items():
                    setattr(feed, key, value)

            for key, value in form.cleaned_data.items():
                setattr(feed, key, value)

            thumbnail_url = util.get_thumbnail_url(parsed_feed.feed)
            if thumbnail_url:
                try:
                    thumbnail_file = ContentFile(
                        urllib2.urlopen(
                            util.quote_unicode_url(thumbnail_url)).read())
                except IOError: # couldn't get the thumbnail
                    pass
                else:
                    feed.save_thumbnail_from_file(thumbnail_file)
            if feed.video_service():
                user, created = User.objects.get_or_create(
                    username=feed.name[:30],
                    defaults={'email': ''})
                if created:
                    user.set_unusable_password()
                    Profile.objects.create(
                        user=user,
                        website=defaults['webpage'])
                    user.save()
                feed.auto_authors.add(user)
            feed.save()

            return HttpResponseRedirect(reverse('localtv_admin_feed_add_done',
                                                args=[feed.pk]))

    else:
        form = forms.SourceForm(instance=models.Feed(**defaults))
    return render_to_response('localtv/admin/add_feed.html',
                              {'form': form,
                               'video_count': video_count},
                              context_instance=RequestContext(request))
Example #2
0
def add_feed(request):
    add_form = forms.AddFeedForm(request.GET)

    if not add_form.is_valid():
        return HttpResponseBadRequest(add_form['feed_url'].errors.as_text())

    feed_url = add_form.cleaned_data['feed_url']
    parsed_feed = add_form.cleaned_data['parsed_feed']

    title = getattr(parsed_feed.feed, 'title', '') or feed_url
    for regexp in VIDEO_SERVICE_TITLES:
        match = regexp.match(title)
        if match:
            title = match.group(1)
            break

    defaults = {
        'name': title,
        'feed_url': feed_url,
        'webpage': parsed_feed.feed.get('link', ''),
        'description': parsed_feed.feed.get('summary', ''),
        'when_submitted': datetime.datetime.now(),
        'last_updated': datetime.datetime.now(),
        'status': models.FEED_STATUS_UNAPPROVED,
        'user': request.user,
        'etag': '',
        'auto_approve': bool(request.POST.get('auto_approve', False))
    }

    video_count = bulk_import.video_count(feed_url, parsed_feed)

    if request.method == 'POST':
        if 'cancel' in request.POST:
            return HttpResponseRedirect(reverse('localtv_admin_manage_page'))

        form = forms.SourceForm(request.POST, instance=models.Feed(**defaults))
        if form.is_valid():
            feed, created = models.Feed.objects.get_or_create(
                feed_url=defaults['feed_url'],
                site=request.sitelocation().site,
                defaults=defaults)

            if not created:
                for key, value in defaults.items():
                    setattr(feed, key, value)

            for key, value in form.cleaned_data.items():
                setattr(feed, key, value)

            thumbnail_url = util.get_thumbnail_url(parsed_feed.feed)
            if thumbnail_url:
                try:
                    thumbnail_file = ContentFile(
                        urllib2.urlopen(
                            util.quote_unicode_url(thumbnail_url)).read())
                except IOError:  # couldn't get the thumbnail
                    pass
                else:
                    feed.save_thumbnail_from_file(thumbnail_file)
            if feed.video_service():
                user, created = User.objects.get_or_create(
                    username=feed.name[:30], defaults={'email': ''})
                if created:
                    user.set_unusable_password()
                    Profile.objects.create(user=user,
                                           website=defaults['webpage'])
                    user.save()
                feed.auto_authors.add(user)
            feed.save()

            return HttpResponseRedirect(
                reverse('localtv_admin_feed_add_done', args=[feed.pk]))

    else:
        form = forms.SourceForm(instance=models.Feed(**defaults))
    return render_to_response('localtv/admin/add_feed.html', {
        'form': form,
        'video_count': video_count
    },
                              context_instance=RequestContext(request))