From b2f33457f646c9340059d4ab02b5b7280dbeff9d Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Thu, 4 Feb 2010 20:44:46 -0600 Subject: Make recent updates group multiple architectures It isn't the most elegant operation in the world, but attempt to only show one line per package, grouping by architecture if multiple were updated in the same go. This makes the recent packages view a bit more useful as a heads up view. Implements FS#17304. Signed-off-by: Dan McGee --- public/utils.py | 19 +++++++++++++++++++ public/views.py | 8 +++++--- 2 files changed, 24 insertions(+), 3 deletions(-) create mode 100644 public/utils.py (limited to 'public') diff --git a/public/utils.py b/public/utils.py new file mode 100644 index 00000000..3a604037 --- /dev/null +++ b/public/utils.py @@ -0,0 +1,19 @@ +from archweb.main.models import Arch, Repo, Package + +def get_recent_updates(): + # This is a bit of magic. We are going to show 15 on the front page, but we + # want to try and eliminate cross-architecture wasted space. Pull enough + # packages that we can later do some screening and trim out the fat. + pkgs = [] + for a in Arch.objects.all(): + # grab a few extra so we can hopefully catch everything we need + pkgs += list(Package.objects.select_related('arch', 'repo').filter(arch=a).order_by('-last_update')[:50]) + pkgs.sort(reverse=True, key=lambda q: q.last_update) + for p in pkgs: + samepkgs = filter(lambda q: p.is_same_version(q), pkgs) + p.allarches = '/'.join(sorted([q.arch.name for q in samepkgs])) + for q in samepkgs: + if p != q: pkgs.remove(q) + return pkgs[:15] + +# vim: set ts=4 sw=4 et: diff --git a/public/views.py b/public/views.py index d4a1c80c..560f9bb0 100644 --- a/public/views.py +++ b/public/views.py @@ -1,6 +1,8 @@ -from django.contrib.auth.models import User from archweb.main.models import AltForum, Arch, Donor, MirrorUrl, News from archweb.main.models import Package, Repo, ExternalProject +from . import utils + +from django.contrib.auth.models import User from django.db.models import Q from django.shortcuts import render_to_response from django.template import RequestContext @@ -8,10 +10,10 @@ from django.views.generic import list_detail def index(request): + pkgs = utils.get_recent_updates() context = { 'news_updates': News.objects.order_by('-postdate', '-id')[:10], - 'pkg_updates': Package.objects.select_related('arch', 'repo').order_by('-last_update')[:15], - 'repos': Repo.objects.all() + 'pkg_updates': pkgs, } return render_to_response('public/index.html', context, context_instance=RequestContext(request)) -- cgit v1.2.3-55-g3dc8