Add ability to download package from web interface

After adding filename to the database, this is a rather simple request (see
FS#19546). Right now the "randomly" chosen mirror happens to always be
mirrors.kernel.org as it is the only one filed under the 'Any' country which
is what we screen on. Perhaps this logic could be improved in the future but
I don't see these links being all that high traffic anyway.

Signed-off-by: Dan McGee <dan@archlinux.org>
This commit is contained in:
Dan McGee 2010-05-26 10:47:43 -05:00
parent 5866498603
commit debec14b73
3 changed files with 20 additions and 1 deletions

View File

@ -12,9 +12,11 @@
from django.db.models import Q
import datetime
import string
from main.models import Package, PackageFile
from main.models import Arch, Repo, Signoff
from main.models import MirrorUrl
from main.utils import make_choice
from packages.models import PackageRelation
@ -316,5 +318,19 @@ def flag(request, name='', repo='', arch=''):
return render_to_response('packages/flag.html', context)
# vim: set ts=4 sw=4 et:
def download(request, name='', repo='', arch=''):
pkg = get_object_or_404(Package,
pkgname=name, repo__name__iexact=repo, arch__name=arch)
mirrorurl = MirrorUrl.objects.filter(mirror__country='Any',
mirror__public=True, mirror__active=True,
protocol__protocol__iexact='HTTP')[0]
details = {
'host': mirrorurl.url,
'arch': pkg.arch.name,
'repo': pkg.repo.name.lower(),
'file': pkg.filename,
}
url = string.Template('${host}${repo}/os/${arch}/${file}').substitute(details)
return HttpResponseRedirect(url)
# vim: set ts=4 sw=4 et:

View File

@ -28,6 +28,7 @@ <h2>Package Details: {{ pkg.pkgname }} {{ pkg.pkgver }}-{{ pkg.pkgrel }}</h2>
'height=350,width=450,location=no,scrollbars=yes,menubars=no,toolbars=no,resizable=no');">(?)</a>
{% endif %}
</li>
<li><a href="download/" title="Download {{ pkg.pkgname }} from mirror">Download From Mirror</a></li>
</ul>
{% if user.is_authenticated %}

View File

@ -52,6 +52,8 @@
'packages.views.flag'),
(r'^packages/(?P<repo>[A-z0-9\-]+)/(?P<arch>[A-z0-9]+)/(?P<name>[A-z0-9\-+.]+)/unflag/$',
'packages.views.unflag'),
(r'^packages/(?P<repo>[A-z0-9\-]+)/(?P<arch>[A-z0-9]+)/(?P<name>[A-z0-9\-+.]+)/download/$',
'packages.views.download'),
(r'^todo/(\d+)/$', 'todolists.views.view'),
(r'^todo/add/$', 'todolists.views.add'),