1 class DownloadController < ApplicationController
7 @page_title = "Install package #{@prj} / #{@pkg}"
8 @hide_search_box = true
9 @box_title = @page_title
10 render :html, :layout => 'download'
13 # /download.html?prj=name&pkg=name
15 render :html, :layout => 'iframe'
18 # /download.json?prj=name&pkg=name
20 # needed for rails < 3.0 to support JSONP
21 render_json @data.to_json
29 required_parameters :prj, :pkg
30 raise "Invalid package name" unless valid_package_name? params[:pkg]
31 raise "Invalid project name" unless valid_project_name? params[:prj]
34 cache_key = "soo_download_#{@prj}_#{@pkg}"
36 @data = Rails.cache.fetch(cache_key, :expires_in => 2.hours) do
37 api_result = get_from_api("/search/published/binary/id?match=project='#{@prj}'+and+package='#{@pkg}'")
39 doc = REXML::Document.new api_result.body
41 doc.elements.each("/collection/binary") { |e|
42 distro = e.attributes['repository']
43 if not data.has_key?(distro)
45 :repo => "http://download.opensuse.org/repositories/#{@prj}/#{distro}/",
48 case e.attributes['baseproject']
49 when /^(DISCONTINUED:)?openSUSE:/
50 data[distro][:flavor] = 'openSUSE'
51 data[distro][:ymp] = "http://software.opensuse.org/ymp/#{@prj}/#{distro}/#{@pkg}.ymp"
52 when /^(DISCONTINUED:)?SUSE:SLE-/
53 data[distro][:flavor] = 'SLE'
54 data[distro][:ymp] = "http://software.opensuse.org/ymp/#{@prj}/#{distro}/#{@pkg}.ymp"
55 when /^(DISCONTINUED:)?Fedora:/
56 data[distro][:flavor] = 'Fedora'
57 when /^(DISCONTINUED:)?RedHat:RHEL-/
58 data[distro][:flavor] = 'RHEL'
59 when /^(DISCONTINUED:)?ScientificLinux:/
60 data[distro][:flavor] = 'SL'
61 when /^(DISCONTINUED:)?CentOS:CentOS-/
62 data[distro][:flavor] = 'CentOS'
63 when /^(DISCONTINUED:)?Mandriva:/
64 data[distro][:flavor] = 'Mandriva'
65 when /^(DISCONTINUED:)?Mageia:/
66 data[distro][:flavor] = 'Mageia'
67 when /^(DISCONTINUED:)?Debian:/
68 data[distro][:flavor] = 'Debian'
69 when /^(DISCONTINUED:)?Ubuntu:/
70 data[distro][:flavor] = 'Ubuntu'
72 data[distro][:flavor] = 'Unknown'
75 filename = e.attributes['filename']
76 filepath = e.attributes['filepath']
77 data[distro][:pkg][filename] = 'http://download.opensuse.org/repositories/' + filepath
88 # collect distro types from @data
89 @flavors = @data.values.collect { |i| i[:flavor] }.uniq.sort{|x,y| x.downcase <=> y.downcase }