Example #1
0
def new_podcast(req):
    uset = UserSettings.get_from_user(req.user)
    if payment_plans.has_reached_podcast_limit(uset):
        return _pmrender(req, 'dashboard/podcast/page_new_upgrade.html')

    ctx = {'PODCAST_CATEGORIES': json.dumps(list(CATEGORIES))}

    if not req.POST:
        return _pmrender(req, 'dashboard/podcast/page_new.html', ctx)

    try:
        pod = Podcast(
            slug=req.POST.get('slug'),
            name=req.POST.get('name'),
            subtitle=req.POST.get('subtitle'),
            cover_image=signer.unsign(req.POST.get('image-url')),
            description=req.POST.get('description'),
            is_explicit=req.POST.get('is_explicit', 'false') == 'true',
            homepage=req.POST.get('homepage'),
            language=req.POST.get('language'),
            copyright=req.POST.get('copyright'),
            author_name=req.POST.get('author_name'),
            owner=req.user)
        pod.save()
        # TODO: The following line can throw an exception and create a
        # duplicate podcast if something has gone really wrong
        pod.set_category_list(req.POST.get('categories'))
    except Exception as e:
        ctx.update(default=req.POST, error=True)
        return _pmrender(req, 'dashboard/podcast/page_new.html', ctx)
    return redirect('podcast_dashboard', podcast_slug=pod.slug)
Example #2
0
def new_podcast(req):
    uset = UserSettings.get_from_user(req.user)
    if payment_plans.has_reached_podcast_limit(uset):
        return _pmrender(req, 'dashboard/podcast/page_new_upgrade.html')

    ctx = {
        'LOCALES': constants.locales,
        'PODCAST_CATEGORIES': json.dumps(list(CATEGORIES)),

        'reached_podcast_limit': payment_plans.has_reached_podcast_limit(uset)
    }

    if not req.POST:
        return _pmrender(req, 'dashboard/podcast/page_new.html', ctx)

    # Basic validation
    if (not req.POST.get('slug') or not req.POST.get('name')):
        ctx.update(default=req.POST, error=True)
        return _pmrender(req, 'dashboard/podcast/page_new.html', ctx)

    try:
        pod = Podcast(
            slug=req.POST.get('slug'),
            name=req.POST.get('name'),
            subtitle=req.POST.get('subtitle'),
            cover_image=signer.unsign(req.POST.get('image-url')),
            description=req.POST.get('description'),
            is_explicit=req.POST.get('is_explicit', 'false') == 'true',
            homepage=req.POST.get('homepage'),
            language=req.POST.get('language'),
            copyright=req.POST.get('copyright'),
            author_name=req.POST.get('author_name'),
            owner=req.user)
        pod.clean()
        pod.save()
    except Exception as e:
        ctx.update(default=req.POST, error=True)
        return _pmrender(req, 'dashboard/podcast/page_new.html', ctx)

    try:
        pod.set_category_list(req.POST.get('categories'))
    except Exception:
        pass

    return redirect('podcast_dashboard', podcast_slug=pod.slug)
Example #3
0
def start_import(req):
    try:
        parsed_items = json.loads(req.POST.get('items'))
    except Exception:
        return {'error': ugettext('Invalid JSON')}


    asset_requests = []

    show_image_url = req.POST.get('cover_image')
    try:
        p = Podcast(
            owner=req.user,
            slug=req.POST.get('slug'),
            name=req.POST.get('name'),
            homepage=req.POST.get('homepage'),
            description=req.POST.get('description'),
            language=req.POST.get('language'),
            copyright=req.POST.get('copyright'),
            subtitle=req.POST.get('subtitle'),
            author_name=req.POST.get('author_name'),
            is_explicit=req.POST.get('is_explicit', 'false') == 'true',

            # This is just temporary for the feed, just so it's usable in the interim
            cover_image=show_image_url,
        )
        p.save()
        p.set_category_list(req.POST.get('categories'))

        imp_req = AssetImportRequest.create(
            podcast=p,
            expiration=datetime.datetime.now() + datetime.timedelta(hours=1),
            image_source_url=p.cover_image)
        asset_requests.append(imp_req)
    except Exception as e:
        if p:
            try:
                p.delete()
            except Exception:
                pass
        return {'error': ugettext('There was a problem saving the podcast: %s') % str(e)}

    created_items = []
    try:
        for item in parsed_items:
            i = PodcastEpisode(
                podcast=p,
                title=item['title'],
                subtitle=item['subtitle'],
                publish=datetime.datetime.fromtimestamp(time.mktime(item['publish'])),
                description=item['description'],
                duration=int(item['duration']),
                audio_url=item['audio_url'],
                audio_size=int(item['audio_size']),
                audio_type=item['audio_type'],
                image_url=item['image_url'] or show_image_url,
                copyright=item['copyright'],
                license=item['license'],
                awaiting_import=True)
            i.save()
            created_items.append(i)

            # Audio import request
            imp_req = AssetImportRequest.create(
                episode=i,
                expiration=datetime.datetime.now() + datetime.timedelta(hours=3),
                audio_source_url=i.audio_url)
            asset_requests.append(imp_req)


            if i.image_url == p.cover_image: continue

            # Image import request
            imp_req = AssetImportRequest.create(
                episode=i,
                expiration=datetime.datetime.now() + datetime.timedelta(hours=3),
                image_source_url=i.image_url)
            asset_requests.append(imp_req)

    except Exception as e:
        p.delete()
        for i in created_items:
            try:
                i.delete()
            except Exception:
                pass
        return {'error': ugettext('There was a problem saving the podcast items: %s') % str(e)}

    for ir in asset_requests:
        ir.save()

    payloads = (x.get_payload() for x in asset_requests)
    payloads = importer_worker.prep_payloads(payloads)
    importer_worker.push_batch(settings.SNS_IMPORT_BUS, payloads)

    return {'error': False, 'ids': [x.id for x in asset_requests]}
Example #4
0
def get_search_results(request, api=False):
    # get q
    q = request.GET.get("q", None)
    if q:
        q = q.strip().lower()
        if len(q) > 30:
            q = q[:30]

    # get genre
    genre = request.GET.get("genre", None)
    if genre:
        try:
            genre = Genre.objects.get(name=genre)
        except Genre.DoesNotExist:
            genre = None

    # get lang
    language = request.GET.get("language", None)
    if language:
        try:
            language = Language.objects.get(name=language)
        except Language.DoesNotExist:
            language = None

    # get order
    order = request.GET.get("order", None)

    if api:
        view = None
        page = None
        show = request.GET.get("show", None)
        try:
            show = int(show)
            if show > 200:
                show = 200
            elif show < 1:
                raise ValueError()
        except (TypeError, ValueError):
            show = 50
    else:
        # get view
        view = request.GET.get("view", "grid")

        # page
        page = request.GET.get("page", None)
        try:
            page = int(page)
            if page < 1:
                raise ValueError()
        except (TypeError, ValueError):
            page = 1

        # get show
        show = None

    # get url
    url = request.get_full_path()

    results = Podcast.search(
        url=url,
        q=q,
        genre=genre,
        language=language,
        show=show,
        page=page,
        order=order,
        view=view,
        api=api,
    )
    return results