1 class DownloadController < ApplicationController
3 verify :params => [:prj, :pkg]
9 cache_key = "soo_download_#{@prj}_#{@pkg}"
11 @data = Rails.cache.fetch(cache_key, :expires_in => 2.hours) do
12 api_result = get_from_api("/search/published/binary/id?match=project='#{@prj}'+and+package='#{@pkg}'")
14 doc = REXML::Document.new api_result.body
16 doc.elements.each("/collection/binary") { |e|
17 distro = e.attributes['repository']
18 if not data.has_key?(distro)
20 :repo => "http://download.opensuse.org/repositories/#{@prj}/#{distro}/",
23 case e.attributes['baseproject']
24 when /^(DISCONTINUED:)?openSUSE:/
25 data[distro][:flavor] = 'openSUSE'
26 data[distro][:ymp] = "http://software.opensuse.org/ymp/#{@prj}/#{distro}/#{@pkg}.ymp"
27 when /^(DISCONTINUED:)?SUSE:SLE-/
28 data[distro][:flavor] = 'SLE'
29 data[distro][:ymp] = "http://software.opensuse.org/ymp/#{@prj}/#{distro}/#{@pkg}.ymp"
30 when /^(DISCONTINUED:)?Fedora:/
31 data[distro][:flavor] = 'Fedora'
32 when /^(DISCONTINUED:)?RedHat:RHEL-/
33 data[distro][:flavor] = 'RHEL'
34 when /^(DISCONTINUED:)?ScientificLinux:/
35 data[distro][:flavor] = 'SL'
36 when /^(DISCONTINUED:)?CentOS:CentOS-/
37 data[distro][:flavor] = 'CentOS'
38 when /^(DISCONTINUED:)?Mandriva:/
39 data[distro][:flavor] = 'Mandriva'
40 when /^(DISCONTINUED:)?Mageia:/
41 data[distro][:flavor] = 'Mageia'
42 when /^(DISCONTINUED:)?Debian:/
43 data[distro][:flavor] = 'Debian'
44 when /^(DISCONTINUED:)?Ubuntu:/
45 data[distro][:flavor] = 'Ubuntu'
47 data[distro][:flavor] = 'Unknown'
50 filename = e.attributes['filename']
51 filepath = e.attributes['filepath']
52 data[distro][:pkg][filename] = 'http://download.opensuse.org/repositories/' + filepath
63 # collect distro types from @data
64 @flavors = @data.values.collect { |i| i[:flavor] }.uniq.sort{|x,y| x.downcase <=> y.downcase }
68 # /download.html?prj=name&pkg=name
70 render :html, :layout => false
73 # /download.json?prj=name&pkg=name
75 # needed for rails < 3.0 to support JSONP
76 render_json @data.to_json