def save_feeds(request, username): new_feeds_to_save = [] params = request.POST.copy() log.info("Saving for stream with an id of") log.info(params['streams[]']) stream = get_object_or_404(lifestream.models.Stream, user=request.user, id=params['streams[]']) feed_url = request.POST['url'] possible_feed = is_possible_feed(feed_url) if possible_feed: new_feeds_to_save.append(possible_feed) else: pq = PyQuery(feed_url) pq('link[rel=alternate]').each( lambda link_el: append_if_dict(new_feeds_to_save, make_possible_feed(link_el))) new_feeds = [] forms = [] something_saved = False for new_feed_to_save in new_feeds_to_save: # This might have been 1 URL posted that turned into multiple embeded Feed links params['url'] = new_feed_to_save['feed_url'] feed_url_hash = hashcompat.md5_constructor( django.utils.encoding.smart_str(new_feed_to_save['feed_url'])).hexdigest() a_feed = lifestream.models.Feed(url_hash = feed_url_hash, title=new_feed_to_save['feed_title'], url = new_feed_to_save['feed_url'], etag='', last_modified=datetime.datetime(1975, 1, 10), enabled=True, disabled_reason='', fetch_error_count=0, user=request.user, created_date=datetime.datetime.today()) a_feed.streams.add(stream) form = lifestream.models.FeedForm(params, instance=a_feed) forms.append(form) if form.is_valid(): form.save() db_feed = lifestream.models.Feed.objects.get(pk=feed_url_hash) new_feeds.append(db_feed.to_primitives()) something_saved = True else: log.info("Error, couldn't save %s" % feed_url_hash) pass # Keep trying other feeds if something_saved: stream_config = StreamConfig(stream.config) stream_config.ensureFeedsConfig(stream.feed_set.all()) stream.config = stream_config.__unicode__() stream.save() return (True, new_feeds, forms) else: return (False, [], forms)
def edit_feed_update(request, username, stream_id, feed_id): stream = get_object_or_404(lifestream.models.Stream, id=stream_id) stream_config = StreamConfig(stream.config) stream_config.ensureFeedsConfig(stream.feed_set.all()) feed_config = feed_config_from_stream(stream_config, feed_id) # TODO hmmm this code sucks because I'm writing directly to the confic Dict # instead of an Abstract Data Type... fixme params = request.POST.copy() # TODO use per-stream feed title in editor and lifestream views if 'title' in params: feed_config['feed_title'] = params['title'] if 'entries_visible_default' in params: if 'True' == params['entries_visible_default']: feed_config['entries_visible_default'] = True else: feed_config['entries_visible_default'] = False if 'enable_num_entries_shown' in params and 'True' == params['enable_num_entries_shown']: feed_config['enable_num_entries_shown'] = True try: num_entries = int(params['num_entries_shown']) if num_entries > 50: num_entries = 50 if num_entries < 0: #WTF? num_entries = 5 feed_config['num_entries_shown'] = num_entries except ValueError: log.info("Unable to parse int out of %s" % params['num_entries_shown']) feed_config['num_entries_shown'] = 5 else: feed_config['enable_num_entries_shown'] = False stream_config.update_feed_config(feed_config) stream.config = stream_config.__unicode__() stream.save() return django.http.HttpResponseRedirect("/manage/account/%s/stream/%s/feed/%s" % (username, stream_id, feed_id))