ratchet 0.3.0

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 (49) hide show
  1. data/gem_bin/ratchet +23 -0
  2. data/lib/ratchet.rb +613 -0
  3. data/lib/ratchet/aliases.rb +106 -0
  4. data/lib/ratchet/bufferparser.rb +409 -0
  5. data/lib/ratchet/commandbuffer.rb +66 -0
  6. data/lib/ratchet/commandparser.rb +668 -0
  7. data/lib/ratchet/configuration.rb +278 -0
  8. data/lib/ratchet/connections.rb +403 -0
  9. data/lib/ratchet/constants.rb +111 -0
  10. data/lib/ratchet/contrib/instance_exec.rb +21 -0
  11. data/lib/ratchet/eventparser.rb +486 -0
  12. data/lib/ratchet/gtk/bufferlistview.rb +514 -0
  13. data/lib/ratchet/gtk/bufferview.rb +167 -0
  14. data/lib/ratchet/gtk/configwindow.rb +229 -0
  15. data/lib/ratchet/gtk/connectionwindow.rb +218 -0
  16. data/lib/ratchet/gtk/keybinding.rb +356 -0
  17. data/lib/ratchet/gtk/linkwindow.rb +137 -0
  18. data/lib/ratchet/gtk/mainwindow.rb +504 -0
  19. data/lib/ratchet/gtk/networkpresenceconf.rb +567 -0
  20. data/lib/ratchet/gtk/pluginconfig.rb +94 -0
  21. data/lib/ratchet/gtk/pluginwindow.rb +146 -0
  22. data/lib/ratchet/gtk/userlistview.rb +161 -0
  23. data/lib/ratchet/help.rb +64 -0
  24. data/lib/ratchet/items.rb +271 -0
  25. data/lib/ratchet/lines.rb +63 -0
  26. data/lib/ratchet/networks.rb +652 -0
  27. data/lib/ratchet/plugins.rb +616 -0
  28. data/lib/ratchet/queue.rb +47 -0
  29. data/lib/ratchet/ratchet-version.rb +21 -0
  30. data/lib/ratchet/replies.rb +134 -0
  31. data/lib/ratchet/replyparser.rb +441 -0
  32. data/lib/ratchet/tabcomplete.rb +98 -0
  33. data/lib/ratchet/users.rb +237 -0
  34. data/lib/ratchet/utils.rb +178 -0
  35. data/share/defaults.yaml +169 -0
  36. data/share/glade/config.glade +2634 -0
  37. data/share/glade/connect.glade +950 -0
  38. data/share/glade/keybindings.glade +109 -0
  39. data/share/glade/linkwindow.glade +188 -0
  40. data/share/glade/mainwindow.glade +335 -0
  41. data/share/glade/network-presences.glade +1373 -0
  42. data/share/glade/pluginconf.glade +97 -0
  43. data/share/glade/plugins.glade +360 -0
  44. data/share/plugins/colorewrite.rb +193 -0
  45. data/share/plugins/highlighter.rb +115 -0
  46. data/share/plugins/mpdplay.rb +123 -0
  47. data/share/plugins/numberswitcher.rb +30 -0
  48. data/share/plugins/sysinfo.rb +82 -0
  49. metadata +96 -0
@@ -0,0 +1,567 @@
1
+ =begin
2
+ This file is part of the Ratchet project, a client for Icecap.
3
+ Copyright (C) 2005-6 Andrew Thompson
4
+
5
+ This program is free software; you can redistribute it and/or modify
6
+ it under the terms of the GNU General Public License as published by
7
+ the Free Software Foundation; either version 2 of the License, or
8
+ (at your option) any later version.
9
+
10
+ This program is distributed in the hope that it will be useful,
11
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ GNU General Public License for more details.
14
+
15
+ You should have received a copy of the GNU General Public License
16
+ along with this program; if not, write to the Free Software
17
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18
+ =end
19
+
20
+ #### networkpresenceconf.rb ####
21
+ # The network/gateway/presence manager
22
+ ####
23
+
24
+ #TODO: This is a bit complicated, maybe needs a UI redesign or a 'simple mode'?
25
+
26
+ module Ratchet
27
+ class NetworkPresenceConf < SingleWindow
28
+ def initialize(main, networks, protocols)
29
+ @main = main
30
+ @glade = GladeXML.new("#{DATADIR}/glade/network-presences.glade") {|handler| method(handler)}
31
+ @window = @glade['networkpresencewindow']
32
+ @networklist = Gtk::ListStore.new(String)
33
+ @renderer = Gtk::CellRendererText.new
34
+ @networkcolumn = Gtk::TreeViewColumn.new("Networks", @renderer, :text=>0)
35
+ @presencelist = Gtk::ListStore.new(String)
36
+ @presencecolumn = Gtk::TreeViewColumn.new("Presences", @renderer, :text=>0)
37
+
38
+ @gatewaylist = Gtk::ListStore.new(String)
39
+ @gatewaycolumn = Gtk::TreeViewColumn.new("Gateways", @renderer, :text=>0)
40
+
41
+ @glade['networktreeview'].model = @networklist
42
+ @glade['presencetreeview'].model = @presencelist
43
+ @glade['gatewaytreeview'].model = @gatewaylist
44
+
45
+ @glade['connect'].sensitive = false
46
+
47
+ @glade['networktreeview'].append_column(@networkcolumn)
48
+ @glade['presencetreeview'].append_column(@presencecolumn)
49
+ @glade['gatewaytreeview'].append_column(@gatewaycolumn)
50
+
51
+ @glade['networktreeview'].selection.signal_connect('changed') do |widget|
52
+ draw_presences
53
+ end
54
+ @glade['presencetreeview'].selection.signal_connect('changed') do |widget|
55
+ if iter = widget.selected and iter[0]
56
+ puts iter[0]
57
+ @glade['connect'].sensitive = true
58
+ @glade['editpresence'].sensitive = true
59
+ @glade['deletepresence'].sensitive = true
60
+ else
61
+ @glade['connect'].sensitive = false
62
+ @glade['editpresence'].sensitive = false
63
+ @glade['deletepresence'].sensitive = false
64
+ end
65
+ false
66
+ end
67
+
68
+ @orignetworks = networks
69
+ @networks = networks.deep_clone
70
+ @protocols = protocols
71
+
72
+ @tempgateways = ItemList.new(Gateway)
73
+
74
+ @presencehandler = 0
75
+ @networkhandler = 0
76
+ @gatewayhandler = 0
77
+
78
+ draw_networks
79
+
80
+ @open = true
81
+
82
+ @window.show_all
83
+
84
+ end
85
+
86
+ def draw_networks
87
+ @networklist.clear
88
+ @networks.list.each do |network|
89
+ iter = @networklist.append
90
+ iter[0] = network.name
91
+ end
92
+ end
93
+
94
+ def draw_presences
95
+ network = get_selected_network
96
+ unless network
97
+ puts 'clearing'
98
+ @presencelist.clear
99
+ #disable buttons the user shouldn't be clicking
100
+ @glade['editnetwork'].sensitive = false
101
+ @glade['addpresence'].sensitive = false
102
+ return
103
+ end
104
+ #reenable any disabled buttons
105
+ @glade['editnetwork'].sensitive = true
106
+ @glade['addpresence'].sensitive = true
107
+ network = network[0]
108
+ @presencelist.clear
109
+ return unless @networks[network]
110
+ @networks[network].presences.list.each do |presence|
111
+ iter = @presencelist.append
112
+ iter[0] = presence.name
113
+ end
114
+ end
115
+
116
+ def fill_protocols(selected = nil)
117
+ @glade['network_protocol'].model.clear
118
+ match = false
119
+ i = 0
120
+ @protocols.list.each do |protocol|
121
+ @glade['network_protocol'].append_text(protocol.name)
122
+ if selected and selected.downcase == protocol.name.downcase
123
+ @glade['network_protocol'].active = i
124
+ match = true
125
+ end
126
+ i += 1
127
+ end
128
+
129
+ unless match
130
+ @glade['network_protocol'].active = 0
131
+ end
132
+ end
133
+
134
+ def fill_gateways(gateways)
135
+ @gatewaylist.clear
136
+ return unless gateways
137
+ gateways.list.each do |gateway|
138
+ iter = @gatewaylist.append
139
+ iter[0] = gateway.name
140
+ end
141
+ end
142
+
143
+ def fill_charsets(selected=nil)
144
+ @glade['network_charset'].model.clear
145
+ selected.downcase! if selected
146
+ charsets = ['utf-8', 'iso-8859-1', 'iso-8859-2', 'iso-8859-5', 'iso-8859-15']
147
+ unless index = charsets.index(selected)
148
+ charsets = [selected].concat(charsets) if selected
149
+ index = 0
150
+ end
151
+
152
+ charsets.each do |c|
153
+ @glade['network_charset'].append_text(c)
154
+ end
155
+
156
+ @glade['network_charset'].active = index
157
+ end
158
+
159
+ def get_selected_network
160
+ iter = @glade['networktreeview'].selection.selected
161
+ return nil unless iter
162
+ return iter
163
+ end
164
+
165
+ def get_selected_presence
166
+ iter = @glade['presencetreeview'].selection.selected
167
+ return nil unless iter
168
+ return iter
169
+ end
170
+
171
+ def get_selected_gateway
172
+ iter = @glade['gatewaytreeview'].selection.selected
173
+ return nil unless iter
174
+ return iter
175
+ end
176
+
177
+ def add_network
178
+ @tempgateways = ItemList.new(Gateway)
179
+ @glade['network_protocol'].sensitive = true
180
+ @currentgateways = @tempgateways
181
+ if @glade['network_ok'].signal_handler_is_connected?(@networkhandler)
182
+ @glade['network_ok'].signal_handler_disconnect(@networkhandler)
183
+ end
184
+ @networkhandler = @glade['network_ok'].signal_connect('clicked') { insert_network}
185
+ puts @networkhandler
186
+ @glade['network_name'].text =''
187
+ @glade['network_name'].sensitive = true
188
+ fill_charsets
189
+ fill_protocols
190
+ @gatewaylist.clear
191
+ @window.modal = false
192
+ @glade['networkproperties'].show_all
193
+ @glade['networkproperties'].present
194
+ @glade['network_name'].grab_focus
195
+ end
196
+
197
+ def edit_network
198
+ if @glade['network_ok'].signal_handler_is_connected?(@networkhandler)
199
+ @glade['network_ok'].signal_handler_disconnect(@networkhandler)
200
+ end
201
+ @networkhandler = @glade['network_ok'].signal_connect('clicked') { update_network}
202
+ network = get_selected_network
203
+ return unless network
204
+ network = @networks[network[0]]
205
+ return unless network
206
+ @currentgateways = network.gateways
207
+ @glade['network_name'].text = network.name
208
+ @glade['network_name'].sensitive = false
209
+ fill_protocols(network.protocol)
210
+ fill_gateways(network.gateways)
211
+ fill_charsets(network.charset)
212
+ @glade['network_protocol'].sensitive = false
213
+ @window.modal = false
214
+ @glade['networkproperties'].show_all
215
+ @glade['networkproperties'].present
216
+ @glade['network_name'].grab_focus
217
+ end
218
+
219
+ def remove_network
220
+ network = get_selected_network
221
+ return unless network
222
+ puts network
223
+ nw = @networks[network[0]]
224
+ @networks.remove(nw)
225
+ @networklist.remove(network)
226
+ end
227
+
228
+ def insert_network
229
+ charset, name, protocol = nil
230
+ charset = @glade['network_charset'].active_iter[0] if @glade['network_charset'].active_iter[0] != ''
231
+ name = @glade['network_name'].text if name = @glade['network_name'].text != ''
232
+ protocol = @glade['network_protocol'].active_iter[0] if @glade['network_protocol'].active_iter[0] != ''
233
+ nw = @networks.add(name, protocol) if name and protocol
234
+ if nw
235
+ nw.charset = charset
236
+ nw.gateways = @currentgateways
237
+ end
238
+ draw_networks
239
+ @glade['networkproperties'].hide
240
+ @window.modal = true
241
+ end
242
+
243
+ def update_network
244
+ charset, name, protocol = nil
245
+ charset = @glade['network_charset'].active_iter[0] if @glade['network_charset'].active_iter
246
+ name = @glade['network_name'].text if name = @glade['network_name'].text != ''
247
+ protocol = @glade['network_protocol'].active_iter[0] if @glade['network_protocol'].active_iter
248
+ nw = @networks[name]
249
+ if nw
250
+ nw.charset = charset
251
+ #nw.protocol = protocol if protocol
252
+ nw.gateways = @currentgateways
253
+ end
254
+ draw_networks
255
+ @glade['networkproperties'].hide
256
+ @glade['networkpresencewindow'].modal = true
257
+ end
258
+
259
+ def add_presence
260
+ network = get_selected_network
261
+ return unless network
262
+ if @glade['presence_ok'].signal_handler_is_connected?(@presencehandler)
263
+ @glade['presence_ok'].signal_handler_disconnect(@presencehandler)
264
+ end
265
+ @presencehandler = @glade['presence_ok'].signal_connect('clicked') { insert_presence}
266
+ @glade['presence_autoconnect'].active = false
267
+ @glade['presence_name'].sensitive = true
268
+ @glade['presence_name'].text = ''
269
+ @window.modal = false
270
+ @glade['presenceproperties'].show_all
271
+ @glade['presenceproperties'].present
272
+ @glade['presence_name'].grab_focus
273
+ end
274
+
275
+ def edit_presence
276
+ network = get_selected_network
277
+ return unless network
278
+ network = network[0]
279
+ presence= get_selected_presence
280
+ return unless presence
281
+ presence = @networks[network].presences[presence[0]]
282
+ return unless presence
283
+ if @glade['presence_ok'].signal_handler_is_connected?(@presencehandler)
284
+ @glade['presence_ok'].signal_handler_disconnect(@presencehandler)
285
+ end
286
+ @presencehandler = @glade['presence_ok'].signal_connect('clicked') { update_presence}
287
+ @glade['presence_autoconnect'].active = false
288
+ @glade['presence_name'].text = presence.name
289
+ @glade['presence_name'].sensitive = false
290
+ if presence.autoconnect
291
+ @glade['presence_autoconnect'].active = true
292
+ end
293
+ @window.modal = false
294
+ @glade['presenceproperties'].show_all
295
+ @glade['presenceproperties'].present
296
+ @glade['presence_name'].grab_focus
297
+ end
298
+
299
+ def remove_presence
300
+ presence = get_selected_presence
301
+ network = get_selected_network
302
+ return unless presence
303
+ p = @networks[network[0]].presences[presence[0]]
304
+ @networks[network[0]].presences.remove(p)
305
+ @presencelist.remove(presence)
306
+ end
307
+
308
+ def insert_presence
309
+ network = get_selected_network
310
+ return unless network
311
+ network = @networks[network[0]]
312
+ return unless network
313
+
314
+ name = @glade['presence_name'].text if @glade['presence_name'].text != ''
315
+ if name
316
+ ps = network.presences.add(name)
317
+
318
+ if ps
319
+ ps.autoconnect = true if @glade['presence_autoconnect'].active?
320
+ draw_presences
321
+ puts network.presences.list
322
+ end
323
+ end
324
+ @glade['presenceproperties'].hide
325
+ @window.modal = true
326
+ end
327
+
328
+ def update_presence
329
+ network = get_selected_network
330
+ return unless network
331
+ network = @networks[network[0]]
332
+ return unless network
333
+ name, autoconnect = nil
334
+ name = @glade['presence_name'].text if @glade['presence_name'].text != ''
335
+ autoconnect = true if @glade['presence_autoconnect'].active?
336
+
337
+ presence = network.presences[name]
338
+ return unless presence
339
+
340
+ presence.autoconnect = autoconnect
341
+
342
+ @glade['presenceproperties'].hide
343
+ @glade['networkpresencewindow'].modal = true
344
+ end
345
+
346
+ def add_gateway
347
+ @glade['gateway_host'].text = ''
348
+ @glade['gateway_port'].text = ''
349
+ @glade['gateway_password'].text = ''
350
+ if @glade['network_ok'].signal_handler_is_connected?(@gatewayhandler)
351
+ @glade['network_ok'].signal_handler_disconnect(@gatewayhandler)
352
+ end
353
+ @gatewayhandler = @glade['gateway_ok'].signal_connect('clicked') { insert_gateway}
354
+ @glade['gatewayproperties'].show_all
355
+ @glade['networkproperties'].modal = false
356
+ @glade['gatewayproperties'].present
357
+ @glade['gateway_host'].grab_focus
358
+ end
359
+
360
+ def edit_gateway
361
+ network = get_selected_network
362
+ return unless network
363
+ network = network[0]
364
+ gateway = get_selected_gateway
365
+ return unless gateway
366
+ puts gateway[0]
367
+ gateway = @currentgateways[gateway[0]]
368
+ puts gateway
369
+ return unless gateway
370
+ @glade['gateway_host'].text = gateway.host
371
+ @glade['gateway_port'].text = gateway.port if gateway.port
372
+ @glade['gateway_password'].text = gateway.password if gateway.password
373
+ if @glade['gateway_ok'].signal_handler_is_connected?(@gatewayhandler)
374
+ @glade['gateway_ok'].signal_handler_disconnect(@gatewayhandler)
375
+ end
376
+ @gatewayhandler = @glade['gateway_ok'].signal_connect('clicked') { update_gateway(gateway)}
377
+ @glade['gatewayproperties'].show_all
378
+ @glade['networkproperties'].modal = false
379
+ @glade['gatewayproperties'].present
380
+ @glade['gateway_host'].grab_focus
381
+ end
382
+
383
+ def remove_gateway
384
+ network = get_selected_network
385
+ puts network[0]
386
+ return unless network
387
+ network = network[0]
388
+ gateway = get_selected_gateway
389
+ return unless gateway
390
+ gw = @currentgateways[gateway[0]]
391
+ @currentgateways.remove(gw)
392
+ @gatewaylist.remove(gateway)
393
+ end
394
+
395
+ def insert_gateway
396
+ #puts network
397
+ host, port, password = nil
398
+ host = @glade['gateway_host'].text if @glade['gateway_host'].text != ''
399
+ port = @glade['gateway_port'].text if @glade['gateway_port'].text != ''
400
+ password = @glade['gateway_password'].text if @glade['gateway_password'].text != ''
401
+ if port
402
+ gw = @currentgateways.add(host, port)
403
+ else
404
+ gw = @currentgateways.add(host)
405
+ end
406
+ puts gw
407
+ if gw
408
+ gw.password = password
409
+ fill_gateways(@currentgateways)
410
+ end
411
+ @glade['gatewayproperties'].hide
412
+ @glade['networkproperties'].modal = true
413
+ end
414
+
415
+ def update_gateway(gateway)
416
+ host, port, password = nil
417
+ host = @glade['gateway_host'].text if @glade['gateway_host'].text != ''
418
+ port = @glade['gateway_port'].text if @glade['gateway_port'].text != ''
419
+ password = @glade['gateway_password'].text if @glade['gateway_password'].text != ''
420
+
421
+ gateway.host = host
422
+ gateway.port = port
423
+ gateway.password = password
424
+ @glade['gatewayproperties'].hide
425
+ @glade['networkproperties'].modal = true
426
+ end
427
+
428
+ def cancel_networkproperties
429
+ @glade['networkproperties'].hide
430
+ @glade['networkpresencewindow'].modal = true
431
+ end
432
+
433
+ def cancel_presenceproperties
434
+ @glade['presenceproperties'].hide
435
+ @glade['networkpresencewindow'].modal = true
436
+ end
437
+
438
+ def cancel_gatewayproperties
439
+ @glade['gatewayproperties'].hide
440
+ @glade['networkproperties'].modal = true
441
+ end
442
+
443
+ def hide(widget, event)
444
+ widget.hide
445
+ return true
446
+ end
447
+
448
+ def connect
449
+ network = get_selected_network
450
+ return unless network
451
+ network = network[0]
452
+ presence = get_selected_presence
453
+ if presence
454
+ presence = presence[0]
455
+ return unless presence
456
+ apply
457
+ end
458
+ @main.send_command('connect', 'presence connect;mypresence='+presence+';network='+network)
459
+ #connect to network presence
460
+ end
461
+
462
+ def apply
463
+ destroy
464
+ diff_networks
465
+ end
466
+
467
+ def diff_networks
468
+ #~ i = 0
469
+ #~ @networks.sort!
470
+ #~ @orignetworks.sort!
471
+
472
+ #add and update
473
+ @networks.list.each do |network|
474
+ if @orignetworks.include?(network)
475
+ #puts 'network exists'
476
+ diff = network.diff(@orignetworks[network.name])
477
+ if diff
478
+ puts 'update network'
479
+ @main.send_command('editnetwork', 'network set;network='+network.name+';'+diff)
480
+ #@orignetworks[network.name] = network
481
+ end
482
+ origpresences = @orignetworks[network.name].presences
483
+ network.presences.list.each do |presence|
484
+ if origpresences.include?(presence)
485
+ #puts 'presence exists'
486
+ diff = presence.diff(origpresences[presence.name])
487
+ if diff
488
+ puts 'update presence'
489
+ @main.send_command('editpresence', 'presence set;network='+network.name+';mypresence='+presence.name+';'+diff)
490
+ #origpresences[presence.name] = presence
491
+ end
492
+ else
493
+ puts 'add presence '+presence.name
494
+ @main.send_command('addpresence', presence.create(network.name))
495
+ #origpresences.insert(presence)
496
+ end
497
+ end
498
+ origgateways = @orignetworks[network.name].gateways
499
+ network.gateways.list.each do |gateway|
500
+ if origgateways.include?(gateway)
501
+ #puts 'gateway exists'
502
+ diff = gateway.diff(origgateways[gateway.name])
503
+ if diff
504
+ puts 'update gateway'
505
+ @main.command_send('editgateway', 'gateway set;network='+gateway.name+';'+diff)
506
+ #origgateways[gateway.name] = gateway
507
+ end
508
+ else
509
+ puts 'add gateway '+gateway.name
510
+ @main.send_command('addgateway', gateway.create(network.name))
511
+ #origgateways.insert(gateway)
512
+ end
513
+ end
514
+ else
515
+ puts 'add network '+network.name
516
+ @main.send_command('addnetwork', network.create)
517
+ sleep 0.5
518
+ network.presences.list.each do |presence|
519
+ puts 'add presence '+presence.name
520
+ @main.send_command('addpresence', presence.create(network.name))
521
+ end
522
+ network.gateways.list.each do |gateway|
523
+ puts 'add gateway '+gateway.name
524
+ @main.send_command('addgateway', gateway.create(network.name))
525
+ end
526
+ #@orignetworks.insert(network)
527
+ end
528
+ end
529
+
530
+ #remove
531
+ @orignetworks.list.each do |network|
532
+ if @networks.include?(network)
533
+ newpresences = @networks[network.name].presences
534
+ network.presences.list.each do |presence|
535
+ if !newpresences.include?(presence)
536
+ #@orignetworks[network.name].presences.remove(presence)
537
+ puts 'remove presence '+presence.name
538
+ @main.send_command('removepresence', 'presence remove;network='+network.name+';mypresence='+presence.name)
539
+ end
540
+ end
541
+ newgateways = @networks[network.name].gateways
542
+ network.gateways.list.each do |gateway|
543
+ if !newgateways.include?(gateway)
544
+ #@orignetworks[network.name].gateways.remove(gateway)
545
+ puts 'remove gateway '+gateway.name
546
+ @main.send_command('removegateway', 'gateway remove;network='+network.name+';host='+gateway.host)
547
+ end
548
+ end
549
+ else
550
+ #need to iterate through and remove children I guess
551
+ #@orignetworks.remove(network)
552
+ puts '(unimplemented) remove network '+network.name
553
+ end
554
+ end
555
+ end
556
+
557
+ def destroy
558
+ @window.destroy
559
+ @glade['networkproperties'].destroy
560
+ @glade['presenceproperties'].destroy
561
+ @glade['gatewayproperties'].destroy
562
+ self.class.destroy
563
+ #Gtk.main_quit
564
+ end
565
+
566
+ end
567
+ end