mldonkey-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Mldonkey-commits] Changes to mldonkey/src/gtk2/gui/guiRooms.ml


From: mldonkey-commits
Subject: [Mldonkey-commits] Changes to mldonkey/src/gtk2/gui/guiRooms.ml
Date: Mon, 31 Oct 2005 13:34:30 -0500

Index: mldonkey/src/gtk2/gui/guiRooms.ml
diff -u mldonkey/src/gtk2/gui/guiRooms.ml:1.1 
mldonkey/src/gtk2/gui/guiRooms.ml:1.2
--- mldonkey/src/gtk2/gui/guiRooms.ml:1.1       Wed Mar  2 19:45:11 2005
+++ mldonkey/src/gtk2/gui/guiRooms.ml   Mon Oct 31 18:34:02 2005
@@ -47,6 +47,51 @@
 
 (*************************************************************************)
 (*                                                                       *)
+(*                         room_num                                      *)
+(*                                                                       *)
+(*************************************************************************)
+
+let room_num key =
+  try int_of_string key with _ -> raise Not_found
+
+(*************************************************************************)
+(*                                                                       *)
+(*                         room_of_key                                   *)
+(*                                                                       *)
+(*************************************************************************)
+
+let room_of_key key =
+  try
+    let num = room_num key in
+    Hashtbl.find G.rooms num
+  with _ -> raise Not_found
+
+(*************************************************************************)
+(*                                                                       *)
+(*                         keys_to_rooms                                 *)
+(*                                                                       *)
+(*************************************************************************)
+
+let keys_to_rooms keys =
+  let l = ref [] in
+  List.iter (fun k ->
+    try
+      let s = room_of_key k in
+      l := s :: !l
+    with _ -> ()) keys;
+  !l
+
+(*************************************************************************)
+(*                                                                       *)
+(*                         room_key                                      *)
+(*                                                                       *)
+(*************************************************************************)
+
+let room_key room_num =
+  Printf.sprintf "%d" room_num
+
+(*************************************************************************)
+(*                                                                       *)
 (*                         Global tables                                 *)
 (*                                                                       *)
 (*************************************************************************)
@@ -89,10 +134,9 @@
   module Column = GuiColumns.Room
 
   type item = room_info
-  type key = int
 
   let columns = O.rooms_columns
-  let get_key = (fun r -> r.room_num)
+  let get_key = (fun r -> room_key r.room_num)
   let module_name = "Rooms"
 
 end)
@@ -209,12 +253,16 @@
 (*                                                                       *)
 (*************************************************************************)
 
-    method sort_items c ro1 ro2 =
-      match c with
+    method sort_items c k1 k2 =
+      try
+        let ro1 = room_of_key k1 in
+        let ro2 = room_of_key k2 in
+        match c with
           Col_room_name -> compare (String.lowercase ro1.room_name) 
(String.lowercase ro2.room_name)
         | Col_room_nusers -> compare ro1.room_nusers ro2.room_nusers
         | Col_room_state -> compare ro1.room_state ro2.room_state
         | Col_room_network -> compare ro1.room_network ro2.room_network
+      with _ -> 0
 
 (*************************************************************************)
 (*                                                                       *)
@@ -223,9 +271,10 @@
 (*************************************************************************)
 
     method force_update_icons () =
-      List.iter (fun ro ->
+      List.iter (fun k ->
         try
-          let (row, _) = self#find_item ro.room_num in 
+          let row = self#find_row k in
+          let ro = room_of_key k in
           store#set ~row ~column:room_network_pixb (Mi.network_pixb 
ro.room_network ~size:A.SMALL ());
           store#set ~row ~column:room_name_pixb (Mi.room_state_to_icon 
ro.room_state ~size:A.SMALL);
         with _ -> ()
@@ -279,11 +328,12 @@
 (*************************************************************************)
 
 let close_open_room sel () =
+  let l = keys_to_rooms sel in
   List.iter (fun ro ->
     match ro.room_state with
         RoomOpened -> GuiCom.send (SetRoomState (ro.room_num, RoomClosed))
       | _ -> GuiCom.send (SetRoomState (ro.room_num, RoomOpened))
-  ) sel
+  ) l
 
 let on_entry_return num s =
   GuiCom.send (SendMessage (num, PublicMessage (0, s)))
@@ -297,7 +347,7 @@
 (*                                                                       *)
 (*************************************************************************)
 
-let room_menu (sel : room_info list) =
+let room_menu sel =
   match sel with
       [] -> []
     | _ ->
@@ -311,7 +361,7 @@
 (*                                                                       *)
 (*************************************************************************)
 
-let on_select_room (sel : room_info list) =
+let on_select_room sel =
   try
     userstore#clear ();
     update_users_label ();
@@ -323,28 +373,29 @@
     in
     match sel with
         [] -> (if !!verbose then lprintf' "No room selected\n")
-      | ro :: tail ->
+      | k :: tail ->
           begin
-            current_room := Some ro.room_num;
-            match ro.room_state with
-                RoomOpened  ->
-                  begin
-                    List.iter (fun user_num ->
+            try
+              let ro = room_of_key k in
+              current_room := Some ro.room_num;
+              match ro.room_state with
+                  RoomOpened  ->
+                    begin
+                      List.iter (fun user_num ->
+                        try
+                          let u = Hashtbl.find G.users user_num in
+                          ignore (userstore#add_item u);
+                        with _ -> get_user_info user_num
+                      ) ro.room_users;
+                      update_users_label ();
                       try
-                        let u = Hashtbl.find G.users user_num in
-                        ignore (userstore#add_item u);
-                      with _ -> get_user_info user_num
-                    ) ro.room_users;
-                    update_users_label ();
-                    try
-                      let chat_buf = List.assoc ro.room_num !dialogs in
-                      box#set_buffer chat_buf
-                    with _ -> (if !!verbose then lprintf' "No chat dialog 
availabale\n")
-                  end
-              | _  -> (if !!verbose then lprintf' "room_users empty\n")
-
+                        let chat_buf = List.assoc ro.room_num !dialogs in
+                        box#set_buffer chat_buf
+                      with _ -> (if !!verbose then lprintf' "No chat dialog 
availabale\n")
+                    end
+                | _  -> (if !!verbose then lprintf' "room_users empty\n")
+            with _ -> ()
           end
-
   with _ -> (if !!verbose then lprintf' "No chat_box found\n")
 
 (*************************************************************************)
@@ -353,8 +404,8 @@
 (*                                                                       *)
 (*************************************************************************)
 
-let on_double_click_room (ro : room_info) =
-  close_open_room [ro] ()
+let on_double_click_room k =
+  close_open_room [k] ()
 
 (*************************************************************************)
 (*                                                                       *)
@@ -362,8 +413,11 @@
 (*                                                                       *)
 (*************************************************************************)
 
-let filter_room (ro : room_info) =
-  not (List.memq ro.room_network !G.networks_filtered)
+let filter_room k =
+  try
+    let ro = room_of_key k in
+    not (List.memq ro.room_network !G.networks_filtered)
+  with _ -> true
 
 (*************************************************************************)
 (*                                                                       *)
@@ -403,6 +457,12 @@
 (*                                                                       *)
 (*************************************************************************)
 
+let hashtbl_rooms_update ro ro_new =
+  ro.room_state <- ro_new.room_state;
+  ro.room_users <- ro_new.room_users;
+  ro.room_messages <- ro_new.room_messages;
+  ro.room_nusers <- ro_new.room_nusers
+
 let add_chat_to_room ro =
   match ro.room_state with
       RoomOpened ->
@@ -440,18 +500,21 @@
       (if !!verbose then lprintf' "Adding room %s num: %d\n" ro.room_name 
ro.room_num);
       add_chat_to_room ro;
       ignore (roomstore#add_item ro);
+      Hashtbl.add G.rooms ro.room_num ro;
       update_rooms_label ()
     end
 
 let room_info r =
   try
     (if !!verbose then lprintf' "Room_info of %s\n" r.room_name);
-    let (row, ro) = roomstore#find_item r.room_num in
+    let ro = Hashtbl.find G.rooms r.room_num in
+    let row = roomstore#find_row (room_key r.room_num) in
     (* no need to keep ro.room_messages, it is stored in dialogs *)
     let ro_new = {r with room_users = ro.room_users} in
     (if ro_new.room_state <> ro.room_state
       then add_chat_to_room ro_new);
-    roomstore#update_item row ro ro_new
+    roomstore#update_item row ro ro_new;
+    hashtbl_rooms_update ro ro_new
   with _ -> add_room r
 
 let find_user_name user_num =
@@ -495,7 +558,8 @@
 let remove_room_user room_num user_num =
   (if !!verbose then lprintf' "Removing user to room %d\n" room_num);
   try
-    let (row, ro) = roomstore#find_item room_num in
+    let ro = Hashtbl.find G.rooms room_num in
+    let row = roomstore#find_row (room_key room_num) in
     (if List.mem user_num ro.room_users
       then ro.room_users <- List.filter (fun n -> n <> user_num) 
ro.room_users);
     let _ =
@@ -504,7 +568,7 @@
              begin
                try
                  let u = Hashtbl.find G.users user_num in
-                 userstore#remove_item u;
+                 userstore#remove_item (GuiUsers.user_key user_num);
                  update_users_label ();
                with _ -> ()
              end
@@ -520,7 +584,8 @@
 let add_room_user room_num user_num =
   (if !!verbose then lprintf' "Adding user to room %d\n" room_num);
   try
-    let (row, ro) = roomstore#find_item room_num in
+    let ro = Hashtbl.find G.rooms room_num in
+    let row = roomstore#find_row (room_key room_num) in
     (if not (List.mem user_num ro.room_users)
       then ro.room_users <- user_num :: ro.room_users);
     match (!current_room, ro.room_state) with
@@ -545,12 +610,14 @@
       Some room_num ->
          begin
            try
-             let (_, ro) = roomstore#find_item room_num in
+             let ro = Hashtbl.find G.rooms room_num in
              if List.mem u_new.user_num ro.room_users
                then begin
                  try
-                   let (row, u) = userstore#find_item u_new.user_num in
-                   userstore#update_item row u u_new
+                   let u = Hashtbl.find G.users u_new.user_num in
+                   let row = userstore#find_row (GuiUsers.user_key 
u_new.user_num) in
+                   userstore#update_item row u u_new;
+                   GuiUsers.hashtbl_users_update u u_new
                  with _ -> ()
                end
            with _ -> ()




reply via email to

[Prev in Thread] Current Thread [Next in Thread]