<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>templates/error.html</filename>
    </added>
    <added>
      <filename>templates/list.html</filename>
    </added>
    <added>
      <filename>templates/lists.html</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -468,6 +468,64 @@ def room(request, nickname):
         return atom(entries)
     return render_to_response('room.html', extra_context, context_instance=RequestContext(request))
 
+def list(request, nickname):
+    '''Render a list feed.
+
+    Authentication is required.
+    '''
+    if not request.session.get('nickname', None):
+        return HttpResponseRedirect(reverse('login'))
+    f = friendfeed.FriendFeed(request.session['nickname'],
+        request.session['key'])
+    try:
+        start = max(int(request.GET.get('start', 0)), 0)
+    except:
+        start = 0
+    service = request.GET.get('service', None)
+    num = int(request.session.get('num', NUM))
+    data = f.fetch_list_feed(nickname, num=num, start=start, service=service)
+    if 'errorCode' in data:
+        if data['statusCode'] == 401:
+            del request.session['nickname']
+            del request.session['key']
+        return render_to_response('error.html', data, context_instance=RequestContext(request))
+    profile = f.fetch_list_profile(nickname)
+    entries = [entry for entry in data['entries'] if not entry['hidden']]
+    hidden = [entry for entry in data['entries'] if entry['hidden']]
+    extra_context = {
+        'entries': entries,
+        'next': start + num,
+        'hidden': hidden,
+        'profile': profile,
+        'list': nickname,
+    }
+    if start &gt; 0:
+        extra_context['has_previous'] = True
+        extra_context['previous'] = max(start - num, 0)
+    if request.GET.get('output', 'html') == 'atom':
+        return atom(entries)
+    return render_to_response('list.html', extra_context, context_instance=RequestContext(request))
+
+def lists(request):
+    '''Display the authenticated users lists
+    
+    Authentication is required.
+    '''
+    if not request.session.get('nickname', None):
+        return HttpResponseRedirect(reverse('login'))
+    f = friendfeed.FriendFeed(request.session['nickname'],
+        request.session['key'])
+    data = f.fetch_user_profile(request.session['nickname'])
+    if 'errorCode' in data:
+        if data['statusCode'] == 401:
+            del request.session['nickname']
+            del request.session['key']
+        return render_to_response('error.html', data, context_instance=RequestContext(request))
+    extra_context = {
+        'lists': data['lists'],
+    }
+    return render_to_response('lists.html', extra_context, context_instance=RequestContext(request))
+
 def rooms(request):
     '''Display the authenticated users rooms page or a list of the users rooms
 </diff>
      <filename>fftogo/views.py</filename>
    </modified>
    <modified>
      <diff>@@ -106,7 +106,24 @@ class FriendFeed(object):
         Authentication is required for private users.
         &quot;&quot;&quot;
         return self._fetch(
-            &quot;/api/user/&quot; + urllib.quote_plus(nickname) + &quot;/profile&quot;, None)
+            &quot;/api/user/&quot; + urllib.quote_plus(nickname) + &quot;/profile&quot;, None, beta=1)
+
+    def fetch_list_profile(self, nickname):
+        &quot;&quot;&quot;Returns a lists profile for the given nickname.
+
+        Authentication is required.
+        &quot;&quot;&quot;
+        return self._fetch(
+            &quot;/api/list/&quot; + urllib.quote_plus(nickname) + &quot;/profile&quot;, None, beta=1)
+
+    def fetch_list_feed(self, nickname, **kwargs):
+        &quot;&quot;&quot;Returns a list feed for the given nickname.
+
+        Authentication is required.
+        &quot;&quot;&quot;
+        kwargs[&quot;beta&quot;] = 1
+        return self._fetch_feed(
+            &quot;/api/feed/list/&quot; + urllib.quote_plus(nickname), **kwargs)
 
     def fetch_room_profile(self, nickname):
         &quot;&quot;&quot;Returns a rooms profile for the given nickname.
@@ -179,6 +196,7 @@ class FriendFeed(object):
 
         Authentication is always required.
         &quot;&quot;&quot;
+        kwargs[&quot;beta&quot;] = 1
         return self._fetch_feed(&quot;/api/feed/home&quot;, **kwargs)
 
     def search(self, q, **kwargs):
@@ -331,8 +349,13 @@ class FriendFeed(object):
         from django.utils.http import urlencode
         url_args[&quot;format&quot;] = &quot;json&quot;
         url_args[&quot;apikey&quot;] = settings.APIKEY 
+        if &quot;beta&quot; in url_args:
+            url = &quot;http://beta.friendfeed.com&quot;
+            del url_args[&quot;beta&quot;]
+        else:
+            url = &quot;http://friendfeed.com&quot;
         args = urlencode(url_args)
-        url = &quot;http://friendfeed.com&quot; + uri + &quot;?&quot; + args
+        url += uri + &quot;?&quot; + args
         headers = {}
         if post_args is not None:
             # If we are POSTing then set the method/content-type (urllib2</diff>
      <filename>friendfeed.py</filename>
    </modified>
    <modified>
      <diff>@@ -26,7 +26,7 @@
             .profile img.picture { float: left; margin-bottom: 10px; margin-right: 10px; }
             .profile .section { margin-top: 5px; }
             ul.entries { clear: both; margin-top: 10px; }
-            ul.entries li.entry, ul.rooms li.room { margin-bottom: 10px; }
+            ul.entries li.entry, ul.rooms li.room, ul.lists li.list { margin-bottom: 10px; }
             ul.comments li { margin-top: 5px; padding-left: 20px ;}
             ul.comments li.comment { background: url('/static/images/quote.png') 2px 2px no-repeat; }
             ul.comments li.permalink { font-style: italic; }
@@ -64,7 +64,11 @@
                 &lt;/li&gt;
                 &lt;li&gt;
                     2
-                    &lt;a href=&quot;{% url user request.session.nickname %}&quot; accesskey=&quot;2&quot;&gt;Me&lt;/a&gt;
+                    &lt;a href=&quot;{% url lists %}&quot; accesskey=&quot;2&quot;&gt;Lists&lt;/a&gt;
+                &lt;/li&gt;
+                &lt;li&gt;
+                    3
+                    &lt;a href=&quot;{% url user request.session.nickname %}&quot; accesskey=&quot;3&quot;&gt;Me&lt;/a&gt;
                 &lt;/li&gt;
             {% else %}
                 &lt;li&gt;
@@ -73,12 +77,12 @@
                 &lt;/li&gt;
             {% endif %}
             &lt;li&gt;
-                3
-                &lt;a href=&quot;{% url public %}&quot; accesskey=&quot;3&quot;&gt;Everyone&lt;/a&gt;
+                4
+                &lt;a href=&quot;{% url public %}&quot; accesskey=&quot;4&quot;&gt;Everyone&lt;/a&gt;
             &lt;/li&gt;
             &lt;li&gt;
-                4
-                &lt;a href=&quot;{% url search %}&quot; accesskey=&quot;4&quot;&gt;Search&lt;/a&gt;
+                5
+                &lt;a href=&quot;{% url search %}&quot; accesskey=&quot;5&quot;&gt;Search&lt;/a&gt;
             &lt;/li&gt;
         &lt;/ul&gt;
     &lt;/div&gt;</diff>
      <filename>templates/base.html</filename>
    </modified>
    <modified>
      <diff>@@ -14,6 +14,8 @@ urlpatterns = patterns('',
     url(r'^logout/$', 'fftogo.views.logout', name='logout'),
     url(r'^rooms/(?P&lt;nickname&gt;[\w-]+)/$', 'fftogo.views.room', name='room'),
     url(r'^rooms/$', 'fftogo.views.rooms', name='rooms'),
+    url(r'^lists/(?P&lt;nickname&gt;[\w-]+)/$', 'fftogo.views.list', name='list'),
+    url(r'^lists/$', 'fftogo.views.lists', name='lists'),
     url(r'^settings/$', 'fftogo.views.settings', name='settings'),
     url(r'^share/$', 'fftogo.views.share', name='share'),
     url(r'^search/$', 'fftogo.views.search', name='search'),</diff>
      <filename>urls.py</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>f4d3fec9b669f2fea1c6fc9c7d3a9557923333ea</id>
    </parent>
  </parents>
  <author>
    <name>Benjamin Golub</name>
    <email>bgolub@benjamin-golubs-macbook-pro.local</email>
  </author>
  <url>http://github.com/bgolub/fftogo/commit/bb2d8fcc55558b7eff52e426b3d651402e7eedd0</url>
  <id>bb2d8fcc55558b7eff52e426b3d651402e7eedd0</id>
  <committed-date>2008-08-25T19:27:07-07:00</committed-date>
  <authored-date>2008-08-25T19:27:07-07:00</authored-date>
  <message>lists</message>
  <tree>b58756b517619fcc3ffd1685467b111f7f6fa36f</tree>
  <committer>
    <name>Benjamin Golub</name>
    <email>bgolub@benjamin-golubs-macbook-pro.local</email>
  </committer>
</commit>
