Ejemplo n.º 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)
Ejemplo n.º 2
0
def manage_stream(request, username, streamname):
    if request.user.username == username:
        
        stream = get_object_or_404(lifestream.models.Stream, user=request.user, name=streamname)
        stream_config = StreamConfig(stream.config)        
        feed_rows = stream.feed_set.all()
        stream_config.ensureFeedsConfig(feed_rows)
        feed_id_to_feed = {}
        for row in feed_rows:
            feed_id_to_feed[row.pk] = row
        feeds = []
        for feed in stream_config.config['feeds']:
            feed_row = feed_id_to_feed[feed['url_hash']]
            feeds.append({'url': feed_row.url,
                          'title': feed_row.title,
                          'pk': feed_row.pk,
                          'entries_visible_default': feed['entries_visible_default']})
        
        raw_entries = (lifestream.models.Entry.objects.order_by('-last_published_date')
                      .filter(feed__user=request.user,
                              feed__streams__name__exact = streamname))[:150]
        plugins = [StreamEditorPlugin(log)]
        entry_pair = zip(raw_entries, render_entries(request, raw_entries, plugins))        
        feed_model = lifestream.models.FeedForm()
                
        stream.url = "/u/%s/s/%s" % (username, stream.name)
            
        preferences = patchouli_auth.preferences.getPreferences(request.user)
        template_data = { 'feeds': feeds,
                                'entry_pair': entry_pair,
                                'unused_feeds': [],
                                'form': feed_model,
                                'request': request,
                                'stream': stream,
                                'stream_config': stream_config,
                                'username': request.user.username,
                                'preferences': preferences}
        [template_data.update(plugin.template_variables(template_data)) for plugin in plugins]
        return render_to_response('stream_editor.html',
                              template_data,
                              context_instance=django.template.RequestContext(request))
    else:
        return django.http.HttpResponse(HACKING_MESSAGE, status=400)
Ejemplo n.º 3
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))
Ejemplo n.º 4
0
def manage_page(request, username, page_name):
    if request.user.username == username:
        log.info("Grabbing webpage")
        webpage = get_object_or_404(lifestream.models.Webpage, user=request.user, name=page_name)
        webpage_properties = patchouli_auth.preferences.getPageProperties(webpage)
        streams = []
        for stream_id in webpage_properties['stream_ids']:
            stream = get_object_or_404(lifestream.models.Stream, user=request.user, id=stream_id)
            streams.append(stream)
            stream_config = StreamConfig(stream.config)
            feed_rows = stream.feed_set.all()
            stream_config.ensureFeedsConfig(feed_rows)
            feed_id_to_feed = {}
            for row in feed_rows:
                feed_id_to_feed[row.pk] = row
            stream.feeds = []
            for feed in stream_config.config['feeds']:
                feed_row = feed_id_to_feed[feed['url_hash']]
                stream.feeds.append({'url': feed_row.url,
                              'title': feed_row.title,
                              'pk': feed_row.pk,
                              'enabled': feed_row.enabled,
                              'disabled_reason': feed_row.disabled_reason,
                              'entries_visible_default': feed['entries_visible_default']})
            plugins = [StreamEditorPlugin(log)]
            entries = lifestream.models.recent_entries(request.user, stream, 150, False)
            stream.entry_pair = entry_pair_for_entries(request, entries, plugins)
            for entry, entry_html in stream.entry_pair:
                log.info(entry.stream_entry)
            feed_model = lifestream.models.FeedForm()
                
            stream.url = "/u/%s/s/%s" % (username, stream.name)
        
        gravatarHash = hashlib.md5(
            django.utils.encoding.smart_str(request.user.email)).hexdigest()
        gravatar = "http://www.gravatar.com/avatar/%s.jpg?d=monsterid&s=80" % gravatarHash
            
        preferences = patchouli_auth.preferences.getPreferences(request.user)
        
        if webpage_properties['css_type'] == 'css_raw':
            css_raw_default = webpage_properties['css_value']
        else:
            css_raw_default = ''
        if webpage_properties['css_type'] == 'css_url':
            css_url_default = webpage_properties['css_value']
        else:
            css_url_default = 'http://'
            
        if webpage_properties['js_type'] == 'js_raw':
            js_raw_default = webpage_properties['js_value']
        else:
            js_raw_default = ''
        if webpage_properties['js_type'] == 'js_url':
            js_url_default = webpage_properties['js_value']
        else:
            js_url_default = 'http://'
        
        template_data = { #'feeds': feeds,
                          'css_raw_default': css_raw_default,
                          'css_url_default': css_url_default,
                          'page_props_s': str(webpage_properties),

                          'unused_feeds': [],
                          'form': feed_model,
                          'gravatar': gravatar,
                          'js_raw_default': js_raw_default,
                          'js_url_default': js_url_default,
                          
                          # Common 
                          'lang_dir': 'LTR',
                          'page_lang': 'en',
                          
                          
                          'page_langs': lang.HTML_LANG,
                          'page_lang_desc': lang.HTML_LANG[webpage_properties['page_lang']],
                          'page_lang_dirs': lang.DIR_CHOICES,
                          'page_name': page_name,
                          'request': request,
                          'streams': streams,
                          'stream_id': stream.id,
                          'stream_config': stream_config,
                          'username': request.user.username,
                          'page_props': webpage_properties,
                          'preferences': preferences}
        if streams:
            template_data['first_stream'] = streams[0]
        [template_data.update(plugin.template_variables()) for plugin in plugins]
        return render_to_response('stream_editor.html',
                              template_data,
                              context_instance=django.template.RequestContext(request))
    else:
        return django.http.HttpResponse(HACKING_MESSAGE, status=400)