diff rhodecode/controllers/journal.py @ 3154:0226b6d6b2b5 beta

Use common function for generation of grid data - admin grid now has dedicated edit button, and uses changeset_cache - some small improvements to grid - all other datatables use this
author Marcin Kuzminski <marcin@python-works.com>
date Wed, 09 Jan 2013 01:59:43 +0100
parents 25029d6f4b47
children cd50d1b5f35b 10b4e34841a4
line wrap: on
line diff
--- a/rhodecode/controllers/journal.py	Tue Jan 08 20:42:48 2013 +0100
+++ b/rhodecode/controllers/journal.py	Wed Jan 09 01:59:43 2013 +0100
@@ -27,6 +27,8 @@
 
 from sqlalchemy import or_
 from sqlalchemy.orm import joinedload
+from sqlalchemy.sql.expression import func
+
 from webhelpers.paginate import Page
 from webhelpers.feedgenerator import Atom1Feed, Rss201rev2Feed
 
@@ -39,10 +41,10 @@
 from rhodecode.lib.base import BaseController, render
 from rhodecode.model.db import UserLog, UserFollowing, Repository, User
 from rhodecode.model.meta import Session
-from sqlalchemy.sql.expression import func
-from rhodecode.model.scm import ScmModel
 from rhodecode.lib.utils2 import safe_int, AttributeDict
 from rhodecode.controllers.admin.admin import _journal_filter
+from rhodecode.model.repo import RepoModel
+from rhodecode.lib.compat import json
 
 log = logging.getLogger(__name__)
 
@@ -78,18 +80,73 @@
         c.journal_data = render('journal/journal_data.html')
         if request.environ.get('HTTP_X_PARTIAL_XHR'):
             return c.journal_data
-        return render('journal/journal.html')
+
+        repos_list = Session().query(Repository)\
+                     .filter(Repository.user_id ==
+                             self.rhodecode_user.user_id)\
+                     .order_by(func.lower(Repository.repo_name)).all()
+
+        repos_data = RepoModel().get_repos_as_dict(repos_list=repos_list,
+                                                   admin=True)
+        #json used to render the grid
+        c.data = json.dumps(repos_data)
+
+        watched_repos_data = []
+
+        ## watched repos
+        _render = RepoModel._render_datatable
+
+        def quick_menu(repo_name):
+            return _render('quick_menu', repo_name)
+
+        def repo_lnk(name, rtype, private, fork_of):
+            return _render('repo_name', name, rtype, private, fork_of,
+                           short_name=False, admin=False)
+
+        def last_rev(repo_name, cs_cache):
+            return _render('revision', repo_name, cs_cache.get('revision'),
+                           cs_cache.get('raw_id'), cs_cache.get('author'),
+                           cs_cache.get('message'))
 
-    @LoginRequired()
-    @NotAnonymous()
-    def index_my_repos(self):
-        c.user = User.get(self.rhodecode_user.user_id)
-        if request.environ.get('HTTP_X_PARTIAL_XHR'):
-            all_repos = self.sa.query(Repository)\
-                     .filter(Repository.user_id == c.user.user_id)\
-                     .order_by(func.lower(Repository.repo_name)).all()
-            c.user_repos = ScmModel().get_repos(all_repos)
-            return render('journal/journal_page_repos.html')
+        def desc(desc):
+            from pylons import tmpl_context as c
+            if c.visual.stylify_metatags:
+                return h.urlify_text(h.desc_stylize(h.truncate(desc, 60)))
+            else:
+                return h.urlify_text(h.truncate(desc, 60))
+
+        def repo_actions(repo_name):
+            return _render('repo_actions', repo_name)
+
+        def owner_actions(user_id, username):
+            return _render('user_name', user_id, username)
+
+        def toogle_follow(repo_id):
+            return  _render('toggle_follow', repo_id)
+
+        for entry in c.following:
+            repo = entry.follows_repository
+            cs_cache = repo.changeset_cache
+            row = {
+                "menu": quick_menu(repo.repo_name),
+                "raw_name": repo.repo_name.lower(),
+                "name": repo_lnk(repo.repo_name, repo.repo_type,
+                                 repo.private, repo.fork),
+                "last_changeset": last_rev(repo.repo_name, cs_cache),
+                "raw_tip": cs_cache.get('revision'),
+                "action": toogle_follow(repo.repo_id)
+            }
+
+            watched_repos_data.append(row)
+
+        c.watched_data = json.dumps({
+            "totalRecords": len(c.following),
+            "startIndex": 0,
+            "sort": "name",
+            "dir": "asc",
+            "records": watched_repos_data
+        })
+        return render('journal/journal.html')
 
     @LoginRequired(api_access=True)
     @NotAnonymous()