load distributions from api
[opensuse:software-o-o.git] / app / controllers / search_controller.rb
1 class SearchController < ApplicationController
2
3   def index
4     if params[:lang].nil?
5       lang = request.compatible_language_from(LANGUAGES) || "en"
6     else
7       lang = params[:lang][0]
8     end
9     @lang = lang
10     GetText.locale = lang
11
12     if params[:baseproject]
13       @baseproject = params[:baseproject]
14     end
15     if params[:q]
16       perform_search
17     end
18   end
19
20   def download
21     DownloadHistory.create :query => params[:query], :base => params[:base],
22       :file => params[:file]
23     redirect_to "http://download.opensuse.org/repositories/" + params[:file]
24   end
25
26   private
27
28   def perform_search
29     @query = params[:q]
30     @baseproject = params[:baseproject]
31     @current_page = params[:p].to_i
32     @current_page = 1 if @current_page == 0
33
34     return false if @query.length < 2
35     return false if @query =~ / / and @query.split(" ").select{|e| e.length < 2 }.size > 0
36
37     base = @baseproject=="ALL" ? "" : @baseproject
38     begin
39       @result = Seeker.prepare_result(CGI.escape(@query).gsub("+", " "), base)
40       if @current_page == 1 and @result.length > 1 # ignore sub pages
41         SearchHistory.create :query => @query, :base => @baseproject, :patterns => @result.pattern_count,
42           :binaries => @result.binary_count, :count => @result.length
43       end
44     rescue => e
45       @search_error, code, api_exception = ActiveXML::Transport.extract_error_message e
46       logger.error "Cannot perform search: #{@search_error}"
47     end
48     return true
49   end
50
51 end