knjrbfw 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (208) hide show
  1. data/.document +5 -0
  2. data/.rspec +1 -0
  3. data/Gemfile +14 -0
  4. data/Gemfile.lock +32 -0
  5. data/LICENSE.txt +20 -0
  6. data/README.rdoc +19 -0
  7. data/Rakefile +49 -0
  8. data/VERSION +1 -0
  9. data/lib/knj/.gitignore +1 -0
  10. data/lib/knj/arrayext.rb +157 -0
  11. data/lib/knj/autoload/activesupport.rb +2 -0
  12. data/lib/knj/autoload/backups/facets_dictionary.rb +430 -0
  13. data/lib/knj/autoload/backups/parsedate.rb +53 -0
  14. data/lib/knj/autoload/backups/ping.rb +64 -0
  15. data/lib/knj/autoload/cinch.rb +2 -0
  16. data/lib/knj/autoload/erubis.rb +6 -0
  17. data/lib/knj/autoload/facebooker.rb +3 -0
  18. data/lib/knj/autoload/facets_dictionary.rb +7 -0
  19. data/lib/knj/autoload/gd2.rb +2 -0
  20. data/lib/knj/autoload/gettext.rb +9 -0
  21. data/lib/knj/autoload/gtk2.rb +5 -0
  22. data/lib/knj/autoload/json_autoload.rb +7 -0
  23. data/lib/knj/autoload/magick.rb +6 -0
  24. data/lib/knj/autoload/mysql.rb +6 -0
  25. data/lib/knj/autoload/parsedate.rb +1 -0
  26. data/lib/knj/autoload/ping.rb +64 -0
  27. data/lib/knj/autoload/rexml.rb +12 -0
  28. data/lib/knj/autoload/soap.rb +3 -0
  29. data/lib/knj/autoload/sqlite3.rb +6 -0
  30. data/lib/knj/autoload/tmail.rb +6 -0
  31. data/lib/knj/autoload/twitter.rb +2 -0
  32. data/lib/knj/autoload/xmlsimple.rb +6 -0
  33. data/lib/knj/autoload/zip.rb +6 -0
  34. data/lib/knj/autoload.rb +136 -0
  35. data/lib/knj/compiler.rb +53 -0
  36. data/lib/knj/cpufreq.rb +40 -0
  37. data/lib/knj/datarow.rb +256 -0
  38. data/lib/knj/datestamp.rb +91 -0
  39. data/lib/knj/datet.rb +448 -0
  40. data/lib/knj/degulesider.rb +46 -0
  41. data/lib/knj/erb/apache_knjerb.conf +8 -0
  42. data/lib/knj/erb/cache/README +1 -0
  43. data/lib/knj/erb/erb.rb +21 -0
  44. data/lib/knj/erb/erb_1.9.rb +13 -0
  45. data/lib/knj/erb/erb_cache_clean.rb +20 -0
  46. data/lib/knj/erb/erb_fcgi.rb +44 -0
  47. data/lib/knj/erb/erb_fcgi_1.9.rb +44 -0
  48. data/lib/knj/erb/erb_fcgi_jruby.rb +7 -0
  49. data/lib/knj/erb/erb_jruby.rb +22 -0
  50. data/lib/knj/erb/include.rb +248 -0
  51. data/lib/knj/errors.rb +19 -0
  52. data/lib/knj/eruby.rb +224 -0
  53. data/lib/knj/event_filemod.rb +53 -0
  54. data/lib/knj/event_handler.rb +69 -0
  55. data/lib/knj/exchangerates.rb +39 -0
  56. data/lib/knj/ext/webrick.rb +31 -0
  57. data/lib/knj/filesystem.rb +8 -0
  58. data/lib/knj/fs/drivers/filesystem.rb +14 -0
  59. data/lib/knj/fs/drivers/ftp.rb +33 -0
  60. data/lib/knj/fs/drivers/ssh.rb +28 -0
  61. data/lib/knj/fs/fs.rb +36 -0
  62. data/lib/knj/gettext_fallback.rb +17 -0
  63. data/lib/knj/gettext_threadded.rb +77 -0
  64. data/lib/knj/google_sitemap.rb +59 -0
  65. data/lib/knj/gtk2.rb +277 -0
  66. data/lib/knj/gtk2_cb.rb +85 -0
  67. data/lib/knj/gtk2_menu.rb +57 -0
  68. data/lib/knj/gtk2_statuswindow.rb +64 -0
  69. data/lib/knj/gtk2_tv.rb +63 -0
  70. data/lib/knj/hash_methods.rb +37 -0
  71. data/lib/knj/http.rb +190 -0
  72. data/lib/knj/includes/appserver_cli.rb +39 -0
  73. data/lib/knj/ip2location.rb +22 -0
  74. data/lib/knj/ironruby-gtk2/button.rb +19 -0
  75. data/lib/knj/ironruby-gtk2/dialog.rb +44 -0
  76. data/lib/knj/ironruby-gtk2/entry.rb +9 -0
  77. data/lib/knj/ironruby-gtk2/gdk_event.rb +3 -0
  78. data/lib/knj/ironruby-gtk2/gdk_eventbutton.rb +13 -0
  79. data/lib/knj/ironruby-gtk2/gdk_pixbuf.rb +11 -0
  80. data/lib/knj/ironruby-gtk2/gladexml.rb +104 -0
  81. data/lib/knj/ironruby-gtk2/glib.rb +15 -0
  82. data/lib/knj/ironruby-gtk2/gtk2.rb +148 -0
  83. data/lib/knj/ironruby-gtk2/gtk_builder.rb +31 -0
  84. data/lib/knj/ironruby-gtk2/gtk_cellrenderertext.rb +5 -0
  85. data/lib/knj/ironruby-gtk2/gtk_combobox.rb +19 -0
  86. data/lib/knj/ironruby-gtk2/gtk_filechooserbutton.rb +5 -0
  87. data/lib/knj/ironruby-gtk2/gtk_liststore.rb +18 -0
  88. data/lib/knj/ironruby-gtk2/gtk_menu.rb +5 -0
  89. data/lib/knj/ironruby-gtk2/gtk_menuitem.rb +7 -0
  90. data/lib/knj/ironruby-gtk2/gtk_statusicon.rb +8 -0
  91. data/lib/knj/ironruby-gtk2/gtk_treeiter.rb +24 -0
  92. data/lib/knj/ironruby-gtk2/gtk_treeselection.rb +16 -0
  93. data/lib/knj/ironruby-gtk2/gtk_treeview.rb +19 -0
  94. data/lib/knj/ironruby-gtk2/gtk_treeviewcolumn.rb +32 -0
  95. data/lib/knj/ironruby-gtk2/iconsize.rb +3 -0
  96. data/lib/knj/ironruby-gtk2/image.rb +15 -0
  97. data/lib/knj/ironruby-gtk2/label.rb +19 -0
  98. data/lib/knj/ironruby-gtk2/stock.rb +4 -0
  99. data/lib/knj/ironruby-gtk2/tests/test.glade +15 -0
  100. data/lib/knj/ironruby-gtk2/tests/test_2.rb +22 -0
  101. data/lib/knj/ironruby-gtk2/tests/test_ironruby_window.rb +47 -0
  102. data/lib/knj/ironruby-gtk2/vbox.rb +5 -0
  103. data/lib/knj/ironruby-gtk2/window.rb +23 -0
  104. data/lib/knj/jruby-gtk2/builder/test_builder.glade +43 -0
  105. data/lib/knj/jruby-gtk2/builder/test_builder.rb +19 -0
  106. data/lib/knj/jruby-gtk2/builder/test_builder.ui +43 -0
  107. data/lib/knj/jruby-gtk2/builder.rb +27 -0
  108. data/lib/knj/jruby-gtk2/cellrenderertext.rb +12 -0
  109. data/lib/knj/jruby-gtk2/checkbutton.rb +3 -0
  110. data/lib/knj/jruby-gtk2/combobox.rb +29 -0
  111. data/lib/knj/jruby-gtk2/dialog.rb +44 -0
  112. data/lib/knj/jruby-gtk2/eventbutton.rb +21 -0
  113. data/lib/knj/jruby-gtk2/gladexml.rb +99 -0
  114. data/lib/knj/jruby-gtk2/gtk-4.0.jar +0 -0
  115. data/lib/knj/jruby-gtk2/gtk2.rb +246 -0
  116. data/lib/knj/jruby-gtk2/hbox.rb +10 -0
  117. data/lib/knj/jruby-gtk2/iconsize.rb +5 -0
  118. data/lib/knj/jruby-gtk2/image.rb +10 -0
  119. data/lib/knj/jruby-gtk2/liststore.rb +56 -0
  120. data/lib/knj/jruby-gtk2/menu.rb +40 -0
  121. data/lib/knj/jruby-gtk2/progressbar.rb +12 -0
  122. data/lib/knj/jruby-gtk2/statusicon.rb +8 -0
  123. data/lib/knj/jruby-gtk2/stock.rb +8 -0
  124. data/lib/knj/jruby-gtk2/tests/test_glade_window.glade +163 -0
  125. data/lib/knj/jruby-gtk2/tests/test_glade_window.rb +47 -0
  126. data/lib/knj/jruby-gtk2/tests/test_normal_window.rb +17 -0
  127. data/lib/knj/jruby-gtk2/tests/test_trayicon.png +0 -0
  128. data/lib/knj/jruby-gtk2/tests/test_trayicon.rb +18 -0
  129. data/lib/knj/jruby-gtk2/treeview.rb +105 -0
  130. data/lib/knj/jruby-gtk2/vbox.rb +12 -0
  131. data/lib/knj/jruby-gtk2/window.rb +11 -0
  132. data/lib/knj/jruby_compiler.rb +14 -0
  133. data/lib/knj/knj.rb +19 -0
  134. data/lib/knj/knj_controller.rb +13 -0
  135. data/lib/knj/knjdb/dbtime.rb +30 -0
  136. data/lib/knj/knjdb/drivers/mysql/knjdb_mysql.rb +327 -0
  137. data/lib/knj/knjdb/drivers/mysql/knjdb_mysql_columns.rb +130 -0
  138. data/lib/knj/knjdb/drivers/mysql/knjdb_mysql_indexes.rb +30 -0
  139. data/lib/knj/knjdb/drivers/mysql/knjdb_mysql_tables.rb +255 -0
  140. data/lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3.rb +93 -0
  141. data/lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3_columns.rb +151 -0
  142. data/lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3_indexes.rb +29 -0
  143. data/lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3_tables.rb +300 -0
  144. data/lib/knj/knjdb/libknjdb.rb +438 -0
  145. data/lib/knj/knjdb/libknjdb_java_sqlite3.rb +83 -0
  146. data/lib/knj/knjdb/libknjdb_row.rb +149 -0
  147. data/lib/knj/knjdb/libknjdb_sqlite3_ironruby.rb +69 -0
  148. data/lib/knj/knjdb/mysql-connector-java-5.1.13-bin.jar +0 -0
  149. data/lib/knj/knjdb/sqlitejdbc-v056.jar +0 -0
  150. data/lib/knj/libqt.rb +75 -0
  151. data/lib/knj/libqt_window.rb +10 -0
  152. data/lib/knj/locale_strings.rb +3 -0
  153. data/lib/knj/locales.rb +54 -0
  154. data/lib/knj/maemo/fremantle-calendar/fremantle-calendar.rb +56 -0
  155. data/lib/knj/mail.rb +75 -0
  156. data/lib/knj/mailobj.rb +82 -0
  157. data/lib/knj/mount.rb +115 -0
  158. data/lib/knj/notify.rb +13 -0
  159. data/lib/knj/nvidia_settings.rb +45 -0
  160. data/lib/knj/objects.rb +731 -0
  161. data/lib/knj/opts.rb +38 -0
  162. data/lib/knj/os.rb +158 -0
  163. data/lib/knj/php.rb +717 -0
  164. data/lib/knj/php_parser/arguments.rb +5 -0
  165. data/lib/knj/php_parser/functions.rb +97 -0
  166. data/lib/knj/php_parser/php_parser.rb +99 -0
  167. data/lib/knj/php_parser/tests/test.rb +12 -0
  168. data/lib/knj/php_parser/tests/test_function.php +8 -0
  169. data/lib/knj/php_parser/tests/test_function_run.rb +19 -0
  170. data/lib/knj/power_manager.rb +31 -0
  171. data/lib/knj/rand.rb +10 -0
  172. data/lib/knj/retry.rb +71 -0
  173. data/lib/knj/rhodes/mutex.rb +11 -0
  174. data/lib/knj/rhodes/rhodes.js +3 -0
  175. data/lib/knj/rhodes/rhodes.rb +11 -0
  176. data/lib/knj/rsvgbin.rb +20 -0
  177. data/lib/knj/scripts/degulesider.rb +12 -0
  178. data/lib/knj/scripts/filesearch.rb +51 -0
  179. data/lib/knj/scripts/ip2location.rb +12 -0
  180. data/lib/knj/scripts/keepalive.rb +6 -0
  181. data/lib/knj/scripts/svn_merge.rb +29 -0
  182. data/lib/knj/scripts/upgrade_knjrbfw_checker.rb +41 -0
  183. data/lib/knj/sms.rb +54 -0
  184. data/lib/knj/sshrobot/sshrobot.rb +93 -0
  185. data/lib/knj/strings.rb +65 -0
  186. data/lib/knj/sysuser.rb +27 -0
  187. data/lib/knj/tests/compiler/compiler_test.rb +13 -0
  188. data/lib/knj/tests/compiler/compiler_test_file.rb +62 -0
  189. data/lib/knj/tests/test_degulesider.rb +11 -0
  190. data/lib/knj/tests/test_mount.rb +30 -0
  191. data/lib/knj/tests/test_retry.rb +30 -0
  192. data/lib/knj/thread.rb +32 -0
  193. data/lib/knj/thread2.rb +47 -0
  194. data/lib/knj/threadhandler.rb +130 -0
  195. data/lib/knj/threadpool.rb +177 -0
  196. data/lib/knj/translations.rb +139 -0
  197. data/lib/knj/unix_proc.rb +82 -0
  198. data/lib/knj/web.rb +932 -0
  199. data/lib/knj/webscripts/image.rhtml +82 -0
  200. data/lib/knj/win.rb +4 -0
  201. data/lib/knj/win_registry.rb +60 -0
  202. data/lib/knj/win_tightvnc.rb +127 -0
  203. data/lib/knj/x11vnc.rb +48 -0
  204. data/lib/knj/youtube.rb +38 -0
  205. data/lib/knjrbfw.rb +4 -0
  206. data/spec/knjrbfw_spec.rb +269 -0
  207. data/spec/spec_helper.rb +12 -0
  208. metadata +336 -0
@@ -0,0 +1,64 @@
1
+ class Knj::Gtk2::StatusWindow
2
+ def initialize(opts = {})
3
+ @opts = opts
4
+
5
+ @window = Gtk::Window.new("Status")
6
+ @window.modal = true
7
+ @window.border_width = 8
8
+ @window.set_frame_dimensions(3, 3, 3, 3)
9
+ @window.signal_connect("destroy") do
10
+ destroy
11
+ end
12
+
13
+ if opts["transient_for"]
14
+ @window.transient_for = @opts["transient_for"]
15
+ end
16
+
17
+ @label = Gtk::Label.new("Loading...")
18
+ @pbar = Gtk::ProgressBar.new
19
+
20
+ @vbox = Gtk::VBox.new
21
+ @vbox.spacing = 4
22
+ @vbox.pack_start(@label, false, true)
23
+ @vbox.pack_start(@pbar, false, true)
24
+
25
+ @window.add(@vbox)
26
+
27
+ @window.show_all
28
+ end
29
+
30
+ def label=(newlabel)
31
+ if @label
32
+ @label.label = newlabel
33
+ end
34
+ end
35
+
36
+ def setStatus(perc, newlabel, temp = nil)
37
+ if !perc
38
+ perc = 0
39
+ end
40
+
41
+ self.percent = perc
42
+ self.label = newlabel.to_s
43
+ end
44
+
45
+ def percent=(newperc)
46
+ if @pbar
47
+ @pbar.fraction = newperc
48
+ end
49
+ end
50
+
51
+ def destroy
52
+ if @window
53
+ @window.destroy
54
+ end
55
+
56
+ @window = nil
57
+ @vbox = nil
58
+ @pbar = nil
59
+ @label = nil
60
+ @opts = nil
61
+ end
62
+
63
+ alias closeWindow destroy
64
+ end
@@ -0,0 +1,63 @@
1
+ module Knj::Gtk2::Tv
2
+ def self.init(tv, columns)
3
+ args = []
4
+ columns.each do |pair|
5
+ args << String
6
+ end
7
+
8
+ list_store = Gtk::ListStore.new(*args)
9
+ tv.model = list_store
10
+
11
+ count = 0
12
+ columns.each do |col_title|
13
+ renderer = Gtk::CellRendererText.new
14
+ col = Gtk::TreeViewColumn.new(col_title, renderer, :text => count)
15
+ tv.append_column(col)
16
+ count += 1
17
+ end
18
+ end
19
+
20
+ def self.append(tv, data)
21
+ iter = tv.model.append
22
+
23
+ count = 0
24
+ data.each do |value|
25
+ iter[count] = value.to_s
26
+ count += 1
27
+ end
28
+ end
29
+
30
+ def self.sel(tv)
31
+ selected = tv.selection.selected_rows
32
+
33
+ if !tv.model or selected.size <= 0
34
+ return nil
35
+ end
36
+
37
+ iter = tv.model.get_iter(selected[0])
38
+ returnval = []
39
+ columns = tv.columns
40
+
41
+ count = 0
42
+ columns.each do |column|
43
+ returnval[count] = iter[count]
44
+ count += 1
45
+ end
46
+
47
+ return returnval
48
+ end
49
+ end
50
+
51
+ class Gtk::TreeView
52
+ def sel
53
+ return Knj::Gtk2::Tv.sel(self)
54
+ end
55
+
56
+ def append(data)
57
+ return Knj::Gtk2::Tv.append(self, data)
58
+ end
59
+
60
+ def init(cols)
61
+ return Knj::Gtk2::Tv.init(self, cols)
62
+ end
63
+ end
@@ -0,0 +1,37 @@
1
+ class Knj::Hash_methods
2
+ def initialize(data = {})
3
+ @data = data
4
+ end
5
+
6
+ def [](key)
7
+ return @data[key]
8
+ end
9
+
10
+ def []=(key, val)
11
+ return @data[key] = val
12
+ end
13
+
14
+ def db
15
+ return @data[:db]
16
+ end
17
+
18
+ def ob
19
+ return @data[:ob]
20
+ end
21
+
22
+ def args
23
+ return @data[:args]
24
+ end
25
+
26
+ def data
27
+ return @data[:data]
28
+ end
29
+
30
+ def method_missing(method, *paras)
31
+ if !@data.has_key?(method)
32
+ raise "No such method '#{method}' on class '#{self.class.name}'"
33
+ end
34
+
35
+ return @data[method.to_sym]
36
+ end
37
+ end
data/lib/knj/http.rb ADDED
@@ -0,0 +1,190 @@
1
+ class Knj::Http
2
+ attr_reader :cookies
3
+
4
+ def self.isgdlink(url)
5
+ http = Knj::Http.new("host" => "is.gd")
6
+ http.connect
7
+ resp = http.get("/api.php?longurl=" + url)
8
+
9
+ return resp["data"]
10
+ end
11
+
12
+ def initialize(opts = {})
13
+ require "webrick" if !opts["skip_webrick"]
14
+ require "net/http"
15
+
16
+ @opts = opts
17
+ @cookies = {}
18
+ @mutex = Mutex.new
19
+
20
+ if opts["useragent"]
21
+ @useragent = opts["useragent"]
22
+ else
23
+ @useragent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.1; knj:true) Gecko/20060111 Firefox/3.6.0.1"
24
+ end
25
+ end
26
+
27
+ def opts
28
+ return @opts
29
+ end
30
+
31
+ def connect
32
+ require "net/https" if @opts["ssl"]
33
+
34
+ if @opts["port"]
35
+ port = @opts["port"]
36
+ elsif @opts["ssl"]
37
+ port = 443
38
+ else
39
+ port = 80
40
+ end
41
+
42
+ raise "Invalid host: " + @opts["host"].to_s if !@opts["host"]
43
+
44
+ @http = Net::HTTP.new(@opts["host"], port)
45
+ @http.set_debug_output($stderr) if @opts["debug"]
46
+ @http.use_ssl = true if @opts["ssl"]
47
+
48
+ if @opts.has_key?("validate") and !@opts["validate"]
49
+ @http.verify_mode = OpenSSL::SSL::VERIFY_NONE
50
+ end
51
+
52
+ return self
53
+ end
54
+
55
+ def check_connected
56
+ self.connect if !@http
57
+ end
58
+
59
+ def cookiestr
60
+ cookiestr = ""
61
+ @cookies.each do |key, value|
62
+ if cookiestr != ""
63
+ cookiestr += "; "
64
+ end
65
+
66
+ cookiestr += value.to_s
67
+ end
68
+
69
+ return cookiestr
70
+ end
71
+
72
+ def cookie_add(cgi_cookie)
73
+ @cookies[cgi_cookie.name] = cgi_cookie
74
+ end
75
+
76
+ def headers
77
+ tha_headers = {"User-Agent" => @useragent}
78
+ tha_headers["Referer"] = @lasturl if @lasturl
79
+ tha_headers["Cookie"] = self.cookiestr if cookiestr != ""
80
+ return tha_headers
81
+ end
82
+
83
+ def setcookie(set_data)
84
+ if @opts["skip_webrick"]
85
+ print "SetData: #{set_data}\n"
86
+ else
87
+ WEBrick::Cookie.parse_set_cookies(set_data.to_s).each do |cookie|
88
+ @cookies[cookie.name] = cookie
89
+ end
90
+ end
91
+ end
92
+
93
+ def get(addr)
94
+ check_connected
95
+
96
+ @mutex.synchronize do
97
+ resp, data = @http.get(addr, self.headers)
98
+ self.setcookie(resp.response["set-cookie"])
99
+
100
+ raise "Could not find that page: '#{addr}'." if resp.is_a?(Net::HTTPNotFound)
101
+
102
+ #in some cases (like in IronRuby) the data is set like this.
103
+ data = resp.body if !data
104
+
105
+ return {
106
+ "response" => resp,
107
+ "data" => data
108
+ }
109
+ end
110
+ end
111
+
112
+ def head(addr)
113
+ check_connected
114
+ @mutex.synchronize do
115
+ resp, data = @http.head(addr, self.headers)
116
+ self.setcookie(resp.response["set-cookie"])
117
+
118
+ raise "Could not find that page: '#{addr}'." if resp.is_a?(Net::HTTPNotFound)
119
+
120
+ #in some cases (like in IronRuby) the data is set like this.
121
+ data = resp.body if !data
122
+
123
+ return {
124
+ "response" => resp,
125
+ "data" => data
126
+ }
127
+ end
128
+ end
129
+
130
+ def post(addr, posthash, files = [])
131
+ check_connected
132
+
133
+ postdata = ""
134
+ posthash.each do |key, value|
135
+ if postdata != ""
136
+ postdata += "&"
137
+ end
138
+
139
+ postdata += "#{Knj::Php.urldecode(key)}=#{Knj::Php.urldecode(value)}"
140
+ end
141
+
142
+ @mutex.synchronize do
143
+ resp, data = @http.post2(addr, postdata, self.headers)
144
+ self.setcookie(resp.response["set-cookie"])
145
+
146
+ return {
147
+ "response" => resp,
148
+ "data" => data
149
+ }
150
+ end
151
+ end
152
+
153
+ def post_file(addr, files)
154
+ check_connected
155
+
156
+ boundary = "HJyakstdASDTuyatdtasdtASDTASDasduyAS"
157
+ postdata = ""
158
+
159
+ files.each do |file|
160
+ if file.is_a?(String)
161
+ file = {
162
+ "pname" => "fileupload",
163
+ "fname" => File.basename(file),
164
+ "path" => file
165
+ }
166
+ end
167
+
168
+ postdata += "--#{boundary}\r\n"
169
+ postdata += "Content-Disposition: form-data; name=\"#{file["pname"]}\"; filename=\"#{file["fname"]}\"\r\n"
170
+ postdata += "Content-Type: text/plain\r\n"
171
+ postdata += "\r\n"
172
+ postdata += File.read(file["path"])
173
+ postdata += "\r\n--#{boundary}--\r\n"
174
+ end
175
+
176
+ @mutex.synchronize do
177
+ request = Net::HTTP::Post.new(addr)
178
+ request.body = postdata
179
+ request["Content-Type"] = "multipart/form-data, boundary=#{boundary}"
180
+
181
+ resp, data = @http.request(request)
182
+ self.setcookie(resp.response["set-cookie"])
183
+
184
+ return {
185
+ "response" => resp,
186
+ "data" => data
187
+ }
188
+ end
189
+ end
190
+ end
@@ -0,0 +1,39 @@
1
+ require "knj/autoload"
2
+ require "knj/web"
3
+
4
+ class Appserver_cli
5
+ def self.loadfile(filepath)
6
+ require filepath
7
+ end
8
+
9
+ def self._(str)
10
+ return str
11
+ end
12
+
13
+ def self.gettext
14
+ return self
15
+ end
16
+
17
+ def self.lang_opts
18
+ return []
19
+ end
20
+ end
21
+
22
+ def _kas
23
+ return Appserver_cli
24
+ end
25
+
26
+ def _db
27
+ return $db
28
+ end
29
+
30
+ def _ob
31
+ return $ob
32
+ end
33
+
34
+ autoinc_cli_path = "../include/autoinclude_cli.rb"
35
+ if File.exists?(autoinc_cli_path)
36
+ require autoinc_cli_path
37
+ else
38
+ require "../include/autoinclude.rb"
39
+ end
@@ -0,0 +1,22 @@
1
+ class Knj::Ip2location
2
+ def initialize(args = {})
3
+ @args = args
4
+ @http = Knj::Http.new(
5
+ "host" => "www.ip2location.com",
6
+ "port" => 80
7
+ )
8
+ end
9
+
10
+ def lookup(ip)
11
+ raise "Invalid IP: #{ip}." if !ip.to_s.match(/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/)
12
+
13
+ html = @http.get("/#{ip}")["data"]
14
+ ret = {}
15
+
16
+ html.scan(/<span id="dgLookup__ctl2_lblI(.+?)">(.+?)<\/span>/) do |match|
17
+ ret[match[0]] = match[1]
18
+ end
19
+
20
+ return ret
21
+ end
22
+ end
@@ -0,0 +1,19 @@
1
+ Gtk.events["Gtk"]["Button"] = {
2
+ "clicked" => "clicked"
3
+ }
4
+
5
+ class Gtk::Button
6
+ def initialize(title = "")
7
+ if Gtk.takeob
8
+ @ob = Gtk.takeob
9
+ Gtk.takeob = nil
10
+ else
11
+ splitted = self.class.to_s.split("::")
12
+ @ob = RealGtk.const_get(splitted.last).new(title)
13
+ end
14
+
15
+ if !@ob
16
+ raise "Object was not spawned: #{self.class.to_s}"
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,44 @@
1
+ class Gtk::Dialog
2
+ RESPONSE_OK = RealGtk::ResponseType.Ok
3
+ RESPONSE_YES = RealGtk::ResponseType.Yes
4
+ RESPONSE_NO = RealGtk::ResponseType.No
5
+ RESPONSE_CANCEL = RealGtk::ResponseType.Cancel
6
+ RESPONSE_CLOSE = RealGtk::ResponseType.Close
7
+ RESPONSE_DELETE_EVENT = RealGtk::ResponseType.DeleteEvent
8
+ MODAL = 0
9
+
10
+ def initialize(*paras)
11
+ if Gtk.takeob
12
+ @ob = Gtk.takeob
13
+ Gtk.takeob = nil
14
+ else
15
+ splitted = self.class.to_s.split("::")
16
+ @ob = RealGtk.const_get(splitted.last).new(*paras)
17
+ end
18
+
19
+ if paras.length > 3
20
+ 3.upto(paras.length) do |count|
21
+ data = paras[count]
22
+
23
+ if data.is_a?(Array)
24
+ @ob.method(:add_button).overload(System::String, RealGtk::ResponseType).call(data[0], data[1])
25
+ elsif data.is_a?(NilClass)
26
+ #do nothing.
27
+ else
28
+ #raise "Unhandeled data: #{data.class.to_s}"
29
+ end
30
+ end
31
+ end
32
+
33
+ if !@ob
34
+ raise "Object was not spawned: #{self.class.to_s}"
35
+ end
36
+ end
37
+
38
+ def vbox
39
+ Gtk.takeob = @ob.VBox
40
+ conv_widget = Gtk::VBox.new
41
+
42
+ return conv_widget
43
+ end
44
+ end
@@ -0,0 +1,9 @@
1
+ Gtk.events["Gtk"]["Entry"] = {
2
+ "activate" => "activate"
3
+ }
4
+
5
+ class Gtk::Entry
6
+ def set_text(newtext)
7
+ @ob.text = newtext
8
+ end
9
+ end
@@ -0,0 +1,3 @@
1
+ class Gdk::Event
2
+ BUTTON_PRESS = RealGdk::EventType.ButtonPress
3
+ end
@@ -0,0 +1,13 @@
1
+ class Gdk::EventButton
2
+ def initialize(*paras)
3
+ #take no args.
4
+ end
5
+
6
+ def button
7
+ #do nothing.
8
+ end
9
+
10
+ def time
11
+ #do nothing.
12
+ end
13
+ end
@@ -0,0 +1,11 @@
1
+ class Gdk::Pixbuf
2
+ def initialize(*args)
3
+ if Gtk.takeob
4
+ @ob = Gtk.takeob
5
+ Gtk.takeob = nil
6
+ else
7
+ @ob = Kernel.const_get("RealGdk").const_get("Pixbuf").method(:new).overload(System::String).call(System::String.new(args[0]))
8
+ #method.call("")
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,104 @@
1
+ class GladeXML
2
+ def block=(newblock); @block = newblock; end
3
+ def data; return @data; end
4
+
5
+ def initialize(filename, &block)
6
+ @obs = {}
7
+
8
+ if filename.index("interface>") == nil
9
+ @cont = File.read(filename)
10
+ @data = XmlSimple.xml_in(@cont)
11
+ window_name = self.find_window(data)
12
+ @glade = Glade::XML.new(filename, window_name, nil)
13
+ else
14
+ @cont = filename
15
+ @data = XmlSimple.xml_in(@cont)
16
+ window_name = self.find_window(data)
17
+ Knj::Php.file_put_contents("temp.glade", @cont)
18
+ @glade = Glade::XML.new("temp.glade", window_name, nil)
19
+ FileUtils.rm("temp.glade")
20
+ end
21
+
22
+ if block_given?
23
+ @block = block
24
+ self.auto_connect(@data)
25
+ end
26
+ end
27
+
28
+ def auto_connect(data)
29
+ data.each do |item|
30
+ if item[0] == "widget"
31
+ if item[1][0]["signal"]
32
+ tha_class = item[1][0]["class"]
33
+ tha_id = item[1][0]["id"]
34
+ func_name = item[1][0]["signal"][0]["handler"]
35
+ name = item[1][0]["signal"][0]["name"]
36
+
37
+ method = @block.call(func_name)
38
+
39
+ object = self.get_widget(tha_id)
40
+ object.signal_connect(name) do |*paras|
41
+ #Convert arguments to fit the arity-count of the Proc-object (the block, the method or whatever you want to call it).
42
+ newparas = []
43
+ 0.upto(method.arity - 1) do |number|
44
+ if paras[number]
45
+ newparas << paras[number]
46
+ end
47
+ end
48
+
49
+ method.call(*newparas)
50
+ end
51
+ end
52
+ end
53
+
54
+ if item.is_a?(Array) or item.is_a?(Hash)
55
+ self.auto_connect(item)
56
+ end
57
+ end
58
+ end
59
+
60
+ def find_window(data)
61
+ match = @cont.match(/<(object|widget) class="GtkWindow" id="(.+?)">/)
62
+ if match
63
+ print "GladeXML: Window-name matched from content - dont do slow XML-go-through.\n"
64
+ return match[2]
65
+ end
66
+
67
+ data.each do |item|
68
+ if item[0] == "widget"
69
+ class_str = item[1][0]["class"]
70
+
71
+ if class_str == "GtkWindow"
72
+ ret = item[1][0]["id"]
73
+ if ret.is_a?(String)
74
+ return ret
75
+ end
76
+ end
77
+ elsif item.is_a?(Array) or item.is_a?(Hash)
78
+ ret = self.find_window(item)
79
+ if ret.is_a?(String)
80
+ return ret
81
+ end
82
+ end
83
+ end
84
+ end
85
+
86
+ def get_widget(wname)
87
+ if @obs[wname]
88
+ return @obs[wname]
89
+ end
90
+
91
+ widget = @glade[wname]
92
+ Gtk.takeob = widget
93
+
94
+ splitted = widget.class.to_s.split("::")
95
+ conv_widget = Gtk.const_get(splitted.last).new
96
+ @obs[wname] = conv_widget
97
+
98
+ return conv_widget
99
+ end
100
+
101
+ def [](wname)
102
+ return self.get_widget(wname)
103
+ end
104
+ end
@@ -0,0 +1,15 @@
1
+ module GLib
2
+ class Timeout
3
+ def self.add(time, &block)
4
+ Thread.new(time, block) do |time, block|
5
+ begin
6
+ sleep(time / 1000)
7
+ block.call
8
+ rescue Exception => e
9
+ puts e.inspect
10
+ puts e.backtrace
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end