display better error message
[opensuse:software-o-o.git] / app / controllers / search_controller.rb
1 class SearchController < ApplicationController
2
3   def index
4     @exclude_debug = true
5     @exclude_filter = 'home:'
6     if params[:baseproject]
7       @baseproject = params[:baseproject]
8     end
9     if params[:q]
10       perform_search
11     end
12   end
13
14   def download
15     DownloadHistory.create :query => params[:query], :base => params[:base],
16       :file => params[:file]
17     redirect_to "http://download.opensuse.org/repositories/" + params[:file]
18   end
19
20   private
21
22   def perform_search
23     @query = params[:q]
24     @baseproject = params[:baseproject]
25     @current_page = params[:p].to_i
26     @current_page = 1 if @current_page == 0
27     @exclude_debug = params[:exclude_debug]
28     @exclude_filter = params[:exclude_filter]
29     @project = params[:project]
30
31     if @query.split(" ").select{|e| e.length < 2 }.size > 0
32       flash.now[:error] = _("Please use search strings of at least 2 characters") and return
33     end
34
35     base = @baseproject=="ALL" ? "" : @baseproject
36     begin
37       @result = Seeker.prepare_result(CGI.escape(@query).gsub("+", " "), base, @project, @exclude_filter, @exclude_debug)
38       if @current_page == 1 and @result.length > 1 # ignore sub pages
39         SearchHistory.create :query => @query, :base => @baseproject, :patterns => @result.pattern_count,
40           :binaries => @result.binary_count, :count => @result.length
41       end
42     rescue => e
43       search_error, code, api_exception = ActiveXML::Transport.extract_error_message e
44       if code == "413"
45         flash.now[:error] = _("Please be more precise in your search, search limit reached.")
46       else
47         logger.error _("Could not perform search: ") + search_error
48         flash.now[:error] = _("Could not perform search: ") + search_error
49       end
50       return
51     end
52
53     flash.now[:warn] = _("Please be more precise in your search, search limit reached.") if @result.binary_count >= 1000
54     return true
55   end
56
57 end