<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>lib/marvin/irc/server/virtual_user_connection.rb</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -7,30 +7,41 @@ module Marvin
       
       # Store each user
       UserStore = NamedStore.new(:nicks, :user) do
+        
+        def virtual?(nick)
+          self[nick].is_a?(Marvin::IRC::Server::VirtualUserConnection)
+        end
+        
+        def reclaim(nick)
+          if has_key?(nick) &amp;&amp; virtual?(nick)
+            self[nick].reclaim!
+          end
+        end
+        
+        # Nick is not taken when 
         def nick_taken?(nick)
-          has_key?(nick)
+          has_key?(nick) &amp;&amp; !virtual(nick)
         end
         
         def each_user_except(user)
-          self.each_user do |u|
-            yield u unless user == u 
-          end
+          self.each_user { |u| yield u unless user == u }
         end
       end
       
       # Store each channel
       ChannelStore = NamedStore.new(:names, :channel)
       
-      autoload :RemoteInterface,    'marvin/irc/server/remote_interface'
-      autoload :Channel,            'marvin/irc/server/channel'
+      autoload :RemoteInterface,       'marvin/irc/server/remote_interface'
+      autoload :Channel,               'marvin/irc/server/channel'
       # The actual network connection
-      autoload :BaseConnection,     'marvin/irc/server/base_connection'
+      autoload :BaseConnection,        'marvin/irc/server/base_connection'
       # An our implementations of protocol-specific stuff.
-      autoload :AbstractConnection, 'marvin/irc/server/abstract_connection'
-      autoload :UserConnection,     'marvin/irc/server/user_connection'
-      autoload :ServerConnection,   'marvin/irc/server/server_connection'
+      autoload :VirtualUserConnection, 'marvin/irc/server/virtual_user_connection'
+      autoload :AbstractConnection,    'marvin/irc/server/abstract_connection'
+      autoload :UserConnection,        'marvin/irc/server/user_connection'
+      autoload :ServerConnection,      'marvin/irc/server/server_connection'
       # Extensions for each part
-      autoload :User,               'marvin/irc/server/user'
+      autoload :User,                  'marvin/irc/server/user'
       
       # call start_server w/ the default options
       # and inside an EM::run block.</diff>
      <filename>lib/marvin/irc/server.rb</filename>
    </modified>
    <modified>
      <diff>@@ -15,6 +15,8 @@ module Marvin::IRC::Server::User::HandleMixin
     nick = opts[:new_nick]
     if !nick.blank? &amp;&amp; !Marvin::IRC::Server::UserStore.nick_taken?(nick.downcase)
       if !(new_nick = @nick.nil?)
+        logger.info &quot;Reclaiming nick (if taken)&quot;
+        Marvin::IRC::Server::UserStore.reclaim(nick)
         logger.debug &quot;Notifying all users of nick change: #{@nick} =&gt; #{nick}&quot;
         # Get all users and let them now we've changed nick from @nick to nick
         users = [self]</diff>
      <filename>lib/marvin/irc/server/user/handle_mixin.rb</filename>
    </modified>
    <modified>
      <diff>@@ -3,6 +3,7 @@ module Marvin::IRC::Server
     USER_MODES    = &quot;aAbBcCdDeEfFGhHiIjkKlLmMnNopPQrRsStUvVwWxXyYzZ0123459*@&quot;
     CHANNEL_MODES = &quot;bcdefFhiIklmnoPqstv&quot;
     CHANNEL       = /^[\&amp;\#]+/
+    
     include User::HandleMixin
     
     attr_accessor :nick, :host, :user, :prefix, :password, :mode,
@@ -93,7 +94,7 @@ module Marvin::IRC::Server
     end
     
     def update_prefix!
-      @prefix = &quot;#{@nick}!~#{@user}@#{peer_name}&quot; if details_complete?
+      @prefix = &quot;#{@nick}!n=#{@user}@#{peer_name}&quot; if details_complete?
     end
     
     def details_complete?</diff>
      <filename>lib/marvin/irc/server/user_connection.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>c3b69192282ea95bbf63e80211cd7be957e0fafa</id>
    </parent>
    <parent>
      <id>b8cc40992e9bdf93ce50277b4eef0cbbf7b1cc83</id>
    </parent>
  </parents>
  <author>
    <name>Darcy Laycock</name>
    <email>sutto@sutto.net</email>
  </author>
  <url>http://github.com/Sutto/marvin/commit/3fd24e4e1f6753aed8298a64ead3dac642755490</url>
  <id>3fd24e4e1f6753aed8298a64ead3dac642755490</id>
  <committed-date>2008-12-31T02:27:59-08:00</committed-date>
  <authored-date>2008-12-31T02:27:59-08:00</authored-date>
  <message>Merge branch 'master' of /Users/sutto/Code/RelayRelay/Marvin-Forksicles</message>
  <tree>e09481ca8fecadde3ef12f3845b5468a65bd5c06</tree>
  <committer>
    <name>Darcy Laycock</name>
    <email>sutto@sutto.net</email>
  </committer>
</commit>
