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))
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))
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))
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') )
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)
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)
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') )
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
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'))
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))
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))
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))
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)
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
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
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))
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
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))
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))
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)
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)
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)
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)
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)
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)
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))
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))
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))
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
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))
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))
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)
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)
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
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)