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 parse_episode_action(action, user, update_urls, now, ua_string): action_str = action.get('action', None) if not valid_episodeaction(action_str): raise Exception('invalid action %s' % action_str) new_action = EpisodeAction() new_action.action = action['action'] if action.get('device', False): device = get_device(user, action['device'], ua_string) new_action.device = device.id if action.get('timestamp', False): new_action.timestamp = dateutil.parser.parse(action['timestamp']) else: new_action.timestamp = now new_action.timestamp = new_action.timestamp.replace(microsecond=0) new_action.upload_timestamp = get_timestamp(now) new_action.started = action.get('started', None) new_action.playmark = action.get('position', None) new_action.total = action.get('total', None) return new_action
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))