From 9b26b74d198aa4efbe4b25f6667b98eb5261e13d Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Fri, 31 May 2013 20:08:50 -0400
Subject: [PATCH] Refinements to push log display and daily digests

---
 src/main/java/com/gitblit/wicket/pages/DashboardPage.java |   94 ++++++++++++++++++++++++-----------------------
 1 files changed, 48 insertions(+), 46 deletions(-)

diff --git a/src/main/java/com/gitblit/wicket/pages/DashboardPage.java b/src/main/java/com/gitblit/wicket/pages/DashboardPage.java
index 6a4c565..7e40a54 100644
--- a/src/main/java/com/gitblit/wicket/pages/DashboardPage.java
+++ b/src/main/java/com/gitblit/wicket/pages/DashboardPage.java
@@ -29,8 +29,11 @@
 import java.util.Comparator;
 import java.util.Date;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
+import java.util.TimeZone;
 
 import org.apache.wicket.Component;
 import org.apache.wicket.PageParameters;
@@ -103,6 +106,9 @@
 		add(repositoriesMessage);
 
 		UserModel user = GitBlitWebSession.get().getUser();
+		if (user == null) {
+			user = UserModel.ANONYMOUS;
+		}
 
 		Comparator<RepositoryModel> lastUpdateSort = new Comparator<RepositoryModel>() {
 			@Override
@@ -111,33 +117,6 @@
 			}
 		};
 		
-		Map<String, RepositoryModel> reposMap = new HashMap<String, RepositoryModel>();
-
-		// owned repositories 
-		List<RepositoryModel> owned = new ArrayList<RepositoryModel>();
-		if (user != null && !UserModel.ANONYMOUS.equals(user)) {
-			for (RepositoryModel model : GitBlit.self().getRepositoryModels(user)) {
-				reposMap.put(model.name, model);
-				if (model.isUsersPersonalRepository(user.username) || model.isOwner(user.username)) {
-					owned.add(model);
-				}
-			}
-		}
-		Collections.sort(owned, lastUpdateSort);
-
-		// starred repositories
-		List<RepositoryModel> starred = new ArrayList<RepositoryModel>();
-		if (user != null && !UserModel.ANONYMOUS.equals(user)) {
-			for (String name : user.getPreferences().getStarredRepositories()) {
-				if (!reposMap.containsKey(name)) {
-					RepositoryModel repo = GitBlit.self().getRepositoryModel(name);
-					reposMap.put(name, repo);
-				}
-				starred.add(reposMap.get(name));
-			}
-		}
-		Collections.sort(starred, lastUpdateSort);
-				
 		// parameters
 		int daysBack = params == null ? 0 : WicketUtils.getDaysBack(params);
 		if (daysBack < 1) {
@@ -146,38 +125,61 @@
 		Calendar c = Calendar.getInstance();
 		c.add(Calendar.DATE, -1*daysBack);
 		Date minimumDate = c.getTime();
+		TimeZone timezone = getTimeZone();
 		
-		// active repositories (displayed for anonymous users)
+		// build repo lists 
+		List<RepositoryModel> starred = new ArrayList<RepositoryModel>();
+		List<RepositoryModel> owned = new ArrayList<RepositoryModel>();
 		List<RepositoryModel> active = new ArrayList<RepositoryModel>();
-		if (user == null || UserModel.ANONYMOUS.equals(user)) {
-			List<RepositoryModel> list = GitBlit.self().getRepositoryModels(UserModel.ANONYMOUS);
-			for (RepositoryModel model : list) {
-				if (model.lastChange.after(minimumDate)) {
-					active.add(model);
-					reposMap.put(model.name, model);
-				}
+
+		for (RepositoryModel model : GitBlit.self().getRepositoryModels(user)) {
+			if (model.isUsersPersonalRepository(user.username) || model.isOwner(user.username)) {
+				owned.add(model);
 			}
-			Collections.sort(active, lastUpdateSort);
+			
+			if (user.getPreferences().isStarredRepository(model.name)) {
+				starred.add(model);
+			}
+			
+			if (model.isShowActivity() && model.lastChange.after(minimumDate)) {
+				active.add(model);
+			}
 		}
 		
-		// show pushlog feed
+		Collections.sort(owned, lastUpdateSort);
+		Collections.sort(starred, lastUpdateSort);
+		Collections.sort(active, lastUpdateSort);
+		
+		Set<RepositoryModel> feedSources = new HashSet<RepositoryModel>();
+		feedSources.addAll(starred);
+		if (feedSources.isEmpty()) {
+			feedSources.addAll(active);
+		}
+		
+		// create daily commit digest feed
 		List<PushLogEntry> pushes = new ArrayList<PushLogEntry>();
-		for (RepositoryModel model : reposMap.values()) {
+		for (RepositoryModel model : feedSources) {
 			Repository repository = GitBlit.self().getRepository(model.name);
-			List<DailyLogEntry> entries = PushLogUtils.getDailyLogByRef(model.name, repository, minimumDate);
+			List<DailyLogEntry> entries = PushLogUtils.getDailyLogByRef(model.name, repository, minimumDate, timezone);
 			pushes.addAll(entries);
 			repository.close();
 		}
 		
 		if (pushes.size() == 0) {
-			if (reposMap.size() == 0) {
-				add(new LinkPanel("pushes", null, "find some repositories", RepositoriesPage.class));
+			// quiet or no starred repositories
+			if (feedSources.size() == 0) {
+				if (UserModel.ANONYMOUS.equals(user)) {
+					add(new Label("digests", getString("gb.noActivity")));	
+				} else {
+					add(new LinkPanel("digests", null, getString("gb.findSomeRepositories"), RepositoriesPage.class));
+				}
 			} else {
-				add(new Label("pushes", "all is quiet"));
+				add(new Label("digests", getString("gb.noActivity")));
 			}
 		} else {
+			// show daily commit digest feed
 			Collections.sort(pushes);
-			add(new PushesPanel("pushes", pushes));
+			add(new PushesPanel("digests", pushes));
 		}
 		
 		// add the nifty charts
@@ -187,11 +189,11 @@
 		}
 		
 		// active repository list
-		if (ArrayUtils.isEmpty(active)) {
-			add(new Label("active").setVisible(false));
-		} else {
+		if (starred.isEmpty()) {
 			Fragment activeView = createNgList("active", "activeListFragment", "activeCtrl", active);
 			add(activeView);
+		} else {
+			add(new Label("active").setVisible(false));
 		}
 		
 		// starred repository list

--
Gitblit v1.9.1