Rename a few files and minor cleanup
[mediagoblin.git] / mediagoblin / listings / views.py
index ba23fc46b6b93336e2e50f4a55e3a6efbfd631aa..07dbb3d504b98cda4ad9572a2429b80cd1d35131 100644 (file)
@@ -14,8 +14,9 @@
 # You should have received a copy of the GNU Affero General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-from mediagoblin.db.util import DESCENDING
-
+from mediagoblin import mg_globals
+from mediagoblin.db.models import MediaEntry
+from mediagoblin.db.util import media_entries_for_tag_slug
 from mediagoblin.tools.pagination import Pagination
 from mediagoblin.tools.response import render_to_response
 from mediagoblin.decorators import uses_pagination
@@ -29,12 +30,13 @@ def _get_tag_name_from_entries(media_entries, tag_slug):
     """
     # ... this is slightly hacky looking :\
     tag_name = tag_slug
-    if media_entries.count():
-        for tag in media_entries[0]['tags']:
+
+    for entry in media_entries:
+        for tag in entry.tags:
             if tag['slug'] == tag_slug:
-                tag_name == tag['name']
+                tag_name = tag['name']
                 break
-
+        break
     return tag_name
 
 
@@ -43,10 +45,8 @@ def tag_listing(request, page):
     """'Gallery'/listing for this tag slug"""
     tag_slug = request.matchdict[u'tag']
 
-    cursor = request.db.MediaEntry.find(
-        {u'state': u'processed',
-         u'tags.slug': tag_slug})
-    cursor = cursor.sort('created', DESCENDING)
+    cursor = media_entries_for_tag_slug(request.db, tag_slug)
+    cursor = cursor.order_by(MediaEntry.created.desc())
 
     pagination = Pagination(page, cursor)
     media_entries = pagination()
@@ -65,30 +65,42 @@ def tag_listing(request, page):
 ATOM_DEFAULT_NR_OF_UPDATED_ITEMS = 15
 
 
-def tag_atom_feed(request):
+def atom_feed(request):
     """
     generates the atom feed with the tag images
     """
-    tag_slug = request.matchdict[u'tag']
-
-    cursor = request.db.MediaEntry.find(
-        {u'state': u'processed',
-         u'tags.slug': tag_slug})
-    cursor = cursor.sort('created', DESCENDING)
+    tag_slug = request.matchdict.get(u'tag')
+    feed_title = "MediaGoblin Feed"
+    if tag_slug:
+        cursor = media_entries_for_tag_slug(request.db, tag_slug)
+        link = request.urlgen('mediagoblin.listings.tags_listing',
+                              qualified=True, tag=tag_slug )
+        feed_title += "for tag '%s'" % tag_slug
+    else: # all recent item feed
+        cursor = MediaEntry.query.filter_by(state=u'processed')
+        link = request.urlgen('index', qualified=True)
+        feed_title += "for all recent items"
+
+    atomlinks = [
+        {'href': link,
+         'rel': 'alternate',
+         'type': 'text/html'}]
+
+    if mg_globals.app_config["push_urls"]:
+        for push_url in mg_globals.app_config["push_urls"]:
+            atomlinks.append({
+                'rel': 'hub',
+                'href': push_url})
+
+    cursor = cursor.order_by(MediaEntry.created.desc())
     cursor = cursor.limit(ATOM_DEFAULT_NR_OF_UPDATED_ITEMS)
 
-    """
-    ATOM feed id is a tag URI (see http://en.wikipedia.org/wiki/Tag_URI)
-    """
     feed = AtomFeed(
-        "MediaGoblin: Feed for tag '%s'" % tag_slug,
+        feed_title,
         feed_url=request.url,
-        id='tag:'+request.host+',2011:gallery.tag-%s' % tag_slug,
-        links=[{'href': request.urlgen(
-                 'mediagoblin.listings.tags_listing',
-                 qualified=True, tag=tag_slug ),
-            'rel': 'alternate',
-            'type': 'text/html'}])
+        id=link,
+        links=atomlinks)
+
     for entry in cursor:
         feed.add(entry.get('title'),
             entry.description_html,