[beagle] Fix retrieving snippets when using the web-interface.



commit d14e03e8bc1f133849054e8fbcaed4256e9f88e3
Author: D Bera <dbera web gmail com>
Date:   Sun Aug 16 23:59:45 2009 -0400

    Fix retrieving snippets when using the web-interface.
    Modifications for remote hit happens at two places now:
    - remote: The server adds hit:beagle:NetworkNode=name_of_this_service
    - local: The NetworkService queryable modifies hit:Source to point to itself so that future snippet requests are directed to it instead of whatever remote set hit:Source to.

 .../NetworkServicesQueryable.cs                    |   22 ++++++++++++++++++++
 beagle/beagled/Server.cs                           |   14 +-----------
 2 files changed, 23 insertions(+), 13 deletions(-)
---
diff --git a/beagle/beagled/NetworkServicesQueryable/NetworkServicesQueryable.cs b/beagle/beagled/NetworkServicesQueryable/NetworkServicesQueryable.cs
index e2c6706..9d6842e 100644
--- a/beagle/beagled/NetworkServicesQueryable/NetworkServicesQueryable.cs
+++ b/beagle/beagled/NetworkServicesQueryable/NetworkServicesQueryable.cs
@@ -38,6 +38,27 @@ namespace Beagle.Daemon.NetworkServicesQueryable {
 		}
 #endif
 
+                // Local:NetworkServices:Query() ---> Remote:backend:Query() ---> returns hits with hit:source=backend
+                // All SnippetRequests come to local, and should be rerouted to NetworkServices
+                // which will then go and fetch the snippets from remote backends.
+                // So, change the hit:source=NetworkServices and store original hit:source for later retrieving of snippets
+		public void TransformResponse (HitsAddedResponse response)
+		{
+			// Change the Hit source and add a property with the name of this remote node
+			foreach (Hit hit in response.Hits) {
+				//hit.Uri = new System.Uri (context.Request.Url.ToString () + id.ToString ());
+				hit.AddProperty (Property.NewKeyword ("beagle:OrigSource", hit ["beagle:Source"]));
+
+                                // Need to replace the existing beagle:Source property
+                                foreach (Property prop in hit.Properties) {
+                                        if (prop.Key == "beagle:Source") {
+                                                prop.Value = "NetworkServices";
+                                                break;
+                                        }
+                                }
+			}
+		}
+
 		public void DoQuery (Query query, IQueryResult result, IQueryableChangeData data)
 		{
 			// Get rid of the standard UnixTransport so that we can
@@ -54,6 +75,7 @@ namespace Beagle.Daemon.NetworkServicesQueryable {
 			Query.HitsAdded hits_added_handler;
 			hits_added_handler = delegate (HitsAddedResponse response) {
 								//Console.WriteLine ("Adding hits added response");
+                                                                TransformResponse(response);
 								result.Add (response.Hits, response.NumMatches);
 						};
 
diff --git a/beagle/beagled/Server.cs b/beagle/beagled/Server.cs
index 148e97c..0892dd9 100644
--- a/beagle/beagled/Server.cs
+++ b/beagle/beagled/Server.cs
@@ -267,19 +267,7 @@ namespace Beagle.Daemon {
 
 			// Change the Hit source and add a property with the name of this remote node
 			foreach (Hit hit in response.Hits) {
-				//hit.Uri = new System.Uri (context.Request.Url.ToString () + id.ToString ());
-				IList new_props = new Property [2];
-				new_props [0] = Property.NewKeyword ("beagle:OrigSource", hit ["beagle:Source"]);
-				new_props [1] = Property.NewKeyword ("beagle:NetworkNode", network_node);
-				hit.AddProperty (new_props);
-
-                                // Need to replace the existing beagle:Source property
-                                foreach (Property prop in hit.Properties) {
-                                        if (prop.Key == "beagle:Source") {
-                                                prop.Value = "NetworkServices";
-                                                break;
-                                        }
-                                }
+				hit.AddProperty (Property.NewKeyword ("beagle:NetworkNode", network_node));
 
 				//FIXME Retrieving the files for a remote hit is disabled for now
 				//item_handler.RegisterHit (hit);



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