Author: nornagon
Date: 2005-07-06 23:24:12 -0400 (Wed, 06 Jul 2005)
New Revision: 851

Modified:
   trunk/clients/ravish/eventmanager.rb
   trunk/clients/ravish/ravish2.rb
Log:
Ravish includes TO/FROM support, buncha fixes &tc.

Modified: trunk/clients/ravish/eventmanager.rb
===================================================================
--- trunk/clients/ravish/eventmanager.rb        2005-07-07 01:43:50 UTC (rev 
850)
+++ trunk/clients/ravish/eventmanager.rb        2005-07-07 03:24:12 UTC (rev 
851)
@@ -105,7 +105,7 @@
                        end
                end
                @timertok[mytok] = pair
-               jolt
+               #jolt
                return mytok
        end
 

Modified: trunk/clients/ravish/ravish2.rb
===================================================================
--- trunk/clients/ravish/ravish2.rb     2005-07-07 01:43:50 UTC (rev 850)
+++ trunk/clients/ravish/ravish2.rb     2005-07-07 03:24:12 UTC (rev 851)
@@ -1,6 +1,7 @@
 #!/usr/bin/env ruby
 # ravish -- Haver client written in ruby. Second attempt.
 
+# put term/visual in the search path
 $:.unshift "lib"
 
 require 'term/visual'
@@ -10,6 +11,7 @@
 Thread.abort_on_exception = true
 
 class Ravish
+       # Ravish::Window stores information about a window.
        class Window
                attr_reader :window, :type, :name
                def initialize window, type, args={}
@@ -20,6 +22,8 @@
                end
                def [](*args); @args[*args]; end
        end
+
+       # What goes before system messages.
        ServerPrefix = "%(bblue)-%(bwhite)!%(bblue)-%(default) "
        
        Palette = {
@@ -122,7 +126,13 @@
                else
                        if type.to_s =~ /^ev_([A-Z:]+)$/
                                if self.respond_to?(type)
-                                       self.send type, *args[0]
+                                       begin
+                                               self.send type, *args[0]
+                                       rescue ArgumentError
+                                               srvmsg $!.inspect
+                                               srvmsg type.inspect
+                                               srvmsg args[0].inspect
+                                       end
                                else
                                        self.send 'unknown_ev', $1, args[0]
                                end
@@ -298,6 +308,12 @@
                end
        end
 
+       def ev_QUIT uid, type, detail
+               # FIXME: Temporary; we need to keep a list of the users in each
+               # channel.
+               srvmsg "Quits: #{uid} (#{type}#{detail ? ": " + detail : ''})"
+       end
+
        def ev_LIST cid, ns, *users
                if ns == 'user'
                        listed = 'Users'
@@ -330,6 +346,23 @@
                end
        end
 
+       def ev_FROM uid, type, *msg
+               if type == 'say'
+                       pref = "%(nickdecs)<%(" + (uid == @nick ? 'my' : '') + 
"nick)" +
+                                  "#{uid}%(nickdecs)>%(default) "
+               elsif type == 'do'
+                       pref = "%(donick)* #{uid}%(default) "
+               end
+               if not win = find_window(:query, uid)
+                       win = @term.create_window('title' => "Query: #{uid}")
+                       win = Window.new(win, :query, 'name' => uid, 'uid' => 
uid)
+                       @windows << win
+                       @term.switch_window win.window
+               end
+               activity win, 3
+               win.window.addline msg.join(' '), pref
+       end
+
        ## USER COMMANDS ##
 
        def unknown_user_cmd cmd, args
@@ -342,21 +375,27 @@
                when :channel
                        @haver.msg 'IN', win['channel'], 'say', line
                when :query
+                       win.window.addline line, "%(nickdecs)<%(mynick)[EMAIL 
PROTECTED]" +
+                               "%(nickdecs)>%(default) "
                        @haver.msg 'TO', win['uid'], 'say', line
                end
        end
 
        def user_RAW args
-               @haver.msg args.shift.upcase, *args
+               if args.length >= 1
+                       @haver.msg args.shift.upcase, *args
+               end
        end
        
-       def user_SAY args
+       def user_SAY line
                win = find_window(@term.current_window)
                case win.type
                when :channel
-                       @haver.msg 'IN', win['channel'], 'say', args.join(' ')
+                       @haver.msg 'IN', win['channel'], 'say', line.join(' ')
                when :query
-                       @haver.msg 'TO', win['uid'], 'say', args.join(' ')
+                       win.window.addline line.join(' '), 
"%(nickdecs)<%(mynick)[EMAIL PROTECTED]" +
+                               "%(nickdecs)>%(default) "
+                       @haver.msg 'TO', win['uid'], 'say', line.join(' ')
                end
        end
 
@@ -364,15 +403,47 @@
                win = find_window(@term.current_window)
                case win.type
                when :channel
-                       @haver.msg 'IN', win['channel'], 'do', line
+                       @haver.msg 'IN', win['channel'], 'do', line.join(' ')
                when :query
-                       @haver.msg 'TO', win['uid'], 'do', line
+                       win.window.addline line.join(' '), "%(donick)* [EMAIL 
PROTECTED](default) "
+                       @haver.msg 'TO', win['uid'], 'do', line.join(' ')
                end
        end
 
+       def user_MSG args
+               if args.length < 1
+                       srvmsg "MSG: Not enough arguments"
+                       return
+               end
+               uid = args.shift
+               if not win = find_window(:query, uid)
+                       win = @term.create_window('title' => "Query: #{uid}")
+                       win = Window.new(win, :query, 'name' => uid, 'uid' => 
uid)
+                       @windows << win
+               end
+               
+               win.window.addline args.join(' '),
+                       "%(nickdecs)<%(mynick)[EMAIL 
PROTECTED](nickdecs)>%(default) "
+               @haver.msg 'TO', uid, 'say', args.join(' ')
+       end
+
+       def user_QUERY args
+               if args.length < 1
+                       srvmsg "QUERY: Not enough arguments"
+                       return
+               end
+               if not win = find_window(:query, args[0])
+                       win = @term.create_window('title' => "Query: #{uid}")
+                       win = Window.new(win, :query, 'name' => uid, 'uid' => 
uid)
+                       @windows << win
+               end
+               @term.switch_window win.window
+       end
+
        def user_JOIN args
                if args.length < 1
                        srvmsg "JOIN: Not enough arguments"
+                       return
                end
                @haver.msg 'JOIN', args[0]
        end
@@ -395,6 +466,23 @@
                end
        end
        alias_method :user_LIST, :user_NAMES
+
+       def user_WINDOW args
+               if args.length < 1
+                       srvmsg "WINDOW: Not enough arguments"
+               end
+               case args[0].upcase
+               when 'CLOSE'
+                       win = find_window(@term.current_window)
+                       if win and win.type != :server
+                               if win.type == :channel
+                                       @haver.msg 'PART', win['channel']
+                               end
+                               @windows.delete win
+                               @term.delete_window win.window
+                       end
+               end
+       end
 end
 
 ravish = Ravish.new


Reply via email to