示例#1
0
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)
示例#2
0
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))