final version of refactoring, moving utility functions
[zip-doc.git] / mongrel-web-gui.rb
blob9e7eb6109b225bdf803d9ede17bba50309179020
1 #!/usr/bin/ruby
2 %w(cgi rubygems mongrel zarchive htmlshrinker gui tk tk/root tk/frame tk/bindtag rubyscript2exe).each {|x| require x}
4 # from http://railsruby.blogspot.com/2006/07/url-escape-and-url-unescape.html
5 def url_escape(string)
6   string.gsub(/([^ a-zA-Z0-9_.-]+)/n) do
7     '%' + $1.unpack('H2' * $1.size).join('%').upcase
8   end.tr(' ', '+')
9 end
11 def url_unescape(string)
12   string.tr('+', ' ').gsub(/((?:%[0-9a-fA-F]{2})+)/n) do
13     [$1.delete('%')].pack('H*')
14   end
15 end                           
16 GUI.new
17                        
18 dumpfile = File.join(RUBYSCRIPT2EXE.exedir, "..", 'Resources/archive')
19 extrafiles = File.join(RUBYSCRIPT2EXE.exedir, "..", 'Resources/extrafiles')
20 puts dumpfile
21 Archive = ZArchive.new(dumpfile)
22 Htmlshrink = HTMLShrinker.new(extrafiles)
23 Basename = ''
24 class SimpleHandler < Mongrel::HttpHandler
25   def process(req, resp)
26     t = Time.now                                    
27     url = url_unescape(req.params['PATH_INFO'][1..-1])
28     return if url =~ /(jpg|png|gif)$/
29     url = url.gsub("%7E", "~")
30     url = "#{Basename}/index.html" if url == "/"
31     url = Basename + url unless url[0..(Basename.size-1)] == Basename 
32     txt = Archive.get_article(url)
33     if txt.nil?
34       resp.write "Sorry, article not found" 
35     else
36       resp.write Htmlshrink.uncompress(txt)
37     end
38     puts "Served #{url} in #{Time.now - t} seconds."
39   end
40 end 
43 H = Mongrel::HttpServer.new("0.0.0.0", "2042")
44 H.register("/", SimpleHandler.new)
45 H.register("/files", Mongrel::DirHandler.new("."))
46 trap("INT"){ H.stop; TkRoot.destroy; exit(0) } 
47 H.run
49 puts "Webserver started, serving at http://localhost:2042/"
51 Tk.mainloop
52 H.join
53 s_thread.join