mldonkey-commits
[Top][All Lists]
Advanced

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

[Mldonkey-commits] mldonkey distrib/ChangeLog src/gtk2/gui/guiQuer...


From: mldonkey-commits
Subject: [Mldonkey-commits] mldonkey distrib/ChangeLog src/gtk2/gui/guiQuer...
Date: Sat, 15 Jul 2006 11:46:57 +0000

CVSROOT:        /sources/mldonkey
Module name:    mldonkey
Changes by:     spiralvoice <spiralvoice>       06/07/15 11:46:57

Modified files:
        distrib        : ChangeLog 
        src/gtk2/gui   : guiQueries.ml guiResults.ml guiTypes2.ml 

Log message:
        patch #5239

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/mldonkey/distrib/ChangeLog?cvsroot=mldonkey&r1=1.914&r2=1.915
http://cvs.savannah.gnu.org/viewcvs/mldonkey/src/gtk2/gui/guiQueries.ml?cvsroot=mldonkey&r1=1.3&r2=1.4
http://cvs.savannah.gnu.org/viewcvs/mldonkey/src/gtk2/gui/guiResults.ml?cvsroot=mldonkey&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/mldonkey/src/gtk2/gui/guiTypes2.ml?cvsroot=mldonkey&r1=1.10&r2=1.11

Patches:
Index: distrib/ChangeLog
===================================================================
RCS file: /sources/mldonkey/mldonkey/distrib/ChangeLog,v
retrieving revision 1.914
retrieving revision 1.915
diff -u -b -r1.914 -r1.915
--- distrib/ChangeLog   14 Jul 2006 14:23:37 -0000      1.914
+++ distrib/ChangeLog   15 Jul 2006 11:46:57 -0000      1.915
@@ -14,6 +14,10 @@
 ChangeLog
 =========
 
+2006/07/15
+5239: GTK2 GUI: Fix result sorting,
+      update search results instead of double display (su_blanc)
+
 2006/07/14
 5222: Improve log output when HDD is full
 5214: Gettext: Improve translations

Index: src/gtk2/gui/guiQueries.ml
===================================================================
RCS file: /sources/mldonkey/mldonkey/src/gtk2/gui/guiQueries.ml,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- src/gtk2/gui/guiQueries.ml  12 Nov 2005 11:16:36 -0000      1.3
+++ src/gtk2/gui/guiQueries.ml  15 Jul 2006 11:46:57 -0000      1.4
@@ -341,10 +341,12 @@
   qr.g_query_label <- Some label;
   qr.g_query_waiting_label <- Some query_status;
   let on_closure () =
-    let results = GuiResults.keys_to_results (qr.g_query_result#all_items ()) 
in
-    List.iter (fun r ->
-      Hashtbl.remove G.results r.res_num;
-    ) results;
+    Hashtbl.iter (fun _ r ->
+      r.res_has_query <- List.filter (fun query_num -> query_num <> 
qr.g_query_num) r.res_has_query;
+      match r.res_has_query with
+        [] -> Hashtbl.remove G.results r.res_num
+      | _ -> ()
+    ) G.results;
     close_query qr.g_query_num true;
     qr.g_query_result#clear ();
     main_evbox#destroy ();
@@ -896,13 +898,8 @@
 (*                                                                       *)
 (*************************************************************************)
 
-let h_search_result query_num result_num =
-  try
-    let qr = Hashtbl.find qresults query_num in
-    try
-      let r = Hashtbl.find G.results result_num in
-      if qr.g_query_nresults < qr.g_query_max_hits
-        then if r.res_availability >= qr.g_query_min_availability
+let add_result_to_query qr r =
+  if not (List.mem qr.g_query_num r.res_has_query)
             then begin
               qr.g_query_nresults <- qr.g_query_nresults + 1;
               let f () =
@@ -911,21 +908,46 @@
                   None -> ()
                 | Some label -> label#set_text text
               in
+      r.res_has_query <- qr.g_query_num :: r.res_has_query;
               qr.g_query_result#add r ~f ();
-            end else begin
-              Hashtbl.remove G.results result_num;  (* remove the result if 
the query does'nt exist *)
             end
+
+let remove_result_from_query qr r =
+  if not (List.mem qr.g_query_num r.res_has_query)
+    then r.res_has_query <- qr.g_query_num :: r.res_has_query
+
+let h_search_result query_num result_num =
+  try
+    let r = Hashtbl.find G.results result_num in
+    try
+      let qr = Hashtbl.find qresults query_num in
+      let k = GuiResults.result_key r.res_num in
+      try
+        (* update the result if it already exists *)
+        let row = qr.g_query_result#find_row k in
+         Gaux.may ~f:(fun rw -> qr.g_query_result#update_item rw r r) row
+      with _ ->
+        begin
+          if qr.g_query_nresults < qr.g_query_max_hits
+            then if r.res_availability >= qr.g_query_min_availability
+              then add_result_to_query qr r
+              (* don't add the result if availability is under the criterium *)
+              else remove_result_from_query qr r
+            (* stop the query if we exceeded the number of results *)
         else begin
-          Hashtbl.remove G.results result_num;  (* remove the result if we 
exceeded the number of results *)
-          close_query query_num false;          (* stop the query if we 
exceeded the number of results *)
+              remove_result_from_query qr r;
+              close_query query_num false;
+            end
         end
-    with Not_found -> (if !!verbose then lprintf' "result doesn't exist for 
query %d %s\n" query_num qr.g_query_desc)
   with Not_found ->
     begin
-      Hashtbl.remove G.results result_num;  (* remove the result if the query 
does'nt exist *)
-      close_query query_num true;           (* close the query if it does'nt 
exist *)
+        (* close the query if it does'nt exist *)
+        close_query query_num true;
+        match r.res_has_query with [] -> Hashtbl.remove G.results result_num | 
_ -> ();
       if !!verbose then lprintf' "query %d doesn't exist\n" query_num
     end
+  with Not_found ->
+    (if !!verbose then lprintf' "result [%d] doesn't exist\n" result_num)
 
 let h_search_waiting query_num waiting =
   try

Index: src/gtk2/gui/guiResults.ml
===================================================================
RCS file: /sources/mldonkey/mldonkey/src/gtk2/gui/guiResults.ml,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- src/gtk2/gui/guiResults.ml  12 Nov 2005 11:16:36 -0000      1.4
+++ src/gtk2/gui/guiResults.ml  15 Jul 2006 11:46:57 -0000      1.5
@@ -40,19 +40,14 @@
 let (=:=) = Options.(=:=)
 let (<:>) = GuiTools.(<:>)
 
+
 (*************************************************************************)
 (*                                                                       *)
-(*                         compute_result_info                           *)
+(*                         message from the core                         *)
 (*                                                                       *)
 (*************************************************************************)
 
-let compute_result_info r =
-  try
-    let res = Hashtbl.find G.results r.result_num in
-    let name = Mi.result_first_name r.result_names in
-    res.res_name <- name;
-    res.res_uid <- Mi.uid_list_to_string r.result_uids;
-    res.res_size <- r.result_size;
+let hashtbl_update_result r res =
     res.res_format <- U.simple_utf8_of r.result_format;
     res.res_type <- U.simple_utf8_of r.result_type;
     res.res_duration <- Mi.duration_of_tags r.result_tags;
@@ -62,68 +57,39 @@
     res.res_completesources <- Mi.completesources_of_tags r.result_tags;
     res.res_tags <- Mi.tags_to_string r.result_tags;
     res.res_comment <- U.utf8_of r.result_comment;
-    res.res_color <- Mi.color_of_result (Mi.availability_of_tags 
r.result_tags) r.result_done;
-    res.res_network_pixb <- Mi.network_pixb res.res_network ~size:A.SMALL ();
-    res.res_name_pixb <- Mi.file_type_of_name name ~size:A.SMALL;
-    res.res_computed <- true
-  with _ -> ()
-
-(*************************************************************************)
-(*                                                                       *)
-(*                         compute_result_info_while_idle                *)
-(*                                                                       *)
-(*************************************************************************)
-
-let (result_queue : result_info Queue.t) = Queue.create ()
-
-let compute_result_info_while_idle () =
-  ignore (Glib.Idle.add (fun _ ->
-    try
-      let r = Queue.take result_queue in
-      compute_result_info r;
-      true
-    with Queue.Empty -> false
-  ))
-
-(*************************************************************************)
-(*                                                                       *)
-(*                         message from the core                         *)
-(*                                                                       *)
-(*************************************************************************)
+  res.res_color <- Mi.color_of_result (Mi.availability_of_tags r.result_tags) 
r.result_done
 
 let result_info (r : result_info) =
   try
     let res = Hashtbl.find G.results r.result_num in
-    ()
+    hashtbl_update_result r res
   with _ ->
     begin
       let net_num = Mi.neworknum_from_uids r.result_uids in
-      let is_empty = Queue.is_empty result_queue in
+      let name = Mi.result_first_name r.result_names in
       let res =
         {
          res_num             = r.result_num;
          res_network         = net_num;
-         res_computed        = false;
-         res_name            = "";
-         res_uid             = "";
-         res_size            = Int64.zero;
-         res_format          = "";
-         res_type            = "";
-         res_duration        = "";
-         res_codec           = "";
-         res_bitrate         = 0;
-         res_availability    = 0;
-         res_completesources = 0;
-         res_tags            = "";
-         res_comment         = "";
-         res_color           = "";
-         res_network_pixb    = None;
-         res_name_pixb       = None;
+         res_name            = name;
+         res_uid             = Mi.uid_list_to_string r.result_uids;
+         res_size            = r.result_size;
+         res_format          = U.simple_utf8_of r.result_format;
+         res_type            = U.simple_utf8_of r.result_type;
+         res_duration        = Mi.duration_of_tags r.result_tags;
+         res_codec           = Mi.codec_of_tags r.result_tags;
+         res_bitrate         = Mi.bitrate_of_tags r.result_tags;
+         res_availability    = Mi.availability_of_tags r.result_tags;
+         res_completesources = Mi.completesources_of_tags r.result_tags;
+         res_tags            = Mi.tags_to_string r.result_tags;
+         res_comment         = U.utf8_of r.result_comment;
+         res_color           = Mi.color_of_result (Mi.availability_of_tags 
r.result_tags) r.result_done;
+         res_has_query       = [];
+         res_network_pixb    = Mi.network_pixb net_num ~size:A.SMALL ();
+         res_name_pixb       = Mi.file_type_of_name name ~size:A.SMALL;
         }
       in
       Hashtbl.add G.results res.res_num res;
-      Queue.add r result_queue;
-      if is_empty then compute_result_info_while_idle ()
     end
 
 (*************************************************************************)
@@ -289,25 +255,15 @@
       method add_result_while_idle () =
         ignore (Glib.Idle.add (fun _ ->
           try
-            let (r, _) = Queue.peek res_queue in
-            if r.res_computed
-              then begin
                 let (res, f) = Queue.take res_queue in
                 self#add_item res ?f ();
                 true
-              end else true
           with Queue.Empty -> false))
 
-
-
       method add (r : res_info) ?f () =
-        if r.res_computed
-          then self#add_item r ?f ()
-          else begin
             let is_empty = Queue.is_empty res_queue in
             Queue.add (r, f) res_queue;
             if is_empty then self#add_result_while_idle ()
-          end
 
 (*************************************************************************)
 (*                                                                       *)

Index: src/gtk2/gui/guiTypes2.ml
===================================================================
RCS file: /sources/mldonkey/mldonkey/src/gtk2/gui/guiTypes2.ml,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -b -r1.10 -r1.11
--- src/gtk2/gui/guiTypes2.ml   27 Jun 2006 10:38:36 -0000      1.10
+++ src/gtk2/gui/guiTypes2.ml   15 Jul 2006 11:46:57 -0000      1.11
@@ -150,10 +150,11 @@
   {
     res_num                     : int;
     res_network                 : int;
-    mutable res_computed        : bool;
-    mutable res_name            : string;
-    mutable res_uid             : string;
-    mutable res_size            : int64;
+    res_name                    : string;
+    res_uid                     : string;
+    res_size                    : int64;
+    mutable res_network_pixb    : GdkPixbuf.pixbuf option;
+    mutable res_name_pixb       : GdkPixbuf.pixbuf option;
     mutable res_format          : string;
     mutable res_type            : string;
     mutable res_duration        : string;
@@ -164,8 +165,7 @@
     mutable res_tags            : string;
     mutable res_comment         : string;
     mutable res_color           : string;
-    mutable res_network_pixb    : GdkPixbuf.pixbuf option;
-    mutable res_name_pixb       : GdkPixbuf.pixbuf option;
+    mutable res_has_query       : int list;
   }
 
 type g_file_tree =




reply via email to

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