beagle r4642 - in branches/beagle-rdf: . BeagleClient Filters Util beagled beagled/FileSystemQueryable beagled/IndexHelper beagled/KonversationQueryable beagled/KopeteQueryable beagled/NetworkServicesQueryable beagled/PidginQueryable bludgeon conf-data conf-data/crawl-rules po search search/Beagle.Search tools



Author: dbera
Date: Mon Mar 24 21:09:25 2008
New Revision: 4642
URL: http://svn.gnome.org/viewvc/beagle?rev=4642&view=rev

Log:
Merge 4598:4641 from trunk.


Added:
   branches/beagle-rdf/Filters/FilterInfo.cs
      - copied unchanged from r4641, /trunk/beagle/Filters/FilterInfo.cs
Removed:
   branches/beagle-rdf/bludgeon/
Modified:
   branches/beagle-rdf/BeagleClient/Snippet.cs
   branches/beagle-rdf/BeagleClient/Transport.cs
   branches/beagle-rdf/BeagleClient/UnixTransport.cs
   branches/beagle-rdf/ChangeLog
   branches/beagle-rdf/Filters/AssemblyInfo.cs
   branches/beagle-rdf/Filters/FilterTexi.cs
   branches/beagle-rdf/Filters/Makefile.am
   branches/beagle-rdf/Makefile.am
   branches/beagle-rdf/NEWS
   branches/beagle-rdf/Util/ExceptionHandlingThread.cs
   branches/beagle-rdf/beagled/BeagleDaemon.cs
   branches/beagle-rdf/beagled/BuildIndex.cs
   branches/beagle-rdf/beagled/ExternalMetadataQueryable.cs
   branches/beagle-rdf/beagled/FileSystemQueryable/FileCrawlTask.cs
   branches/beagle-rdf/beagled/FileSystemQueryable/FileSystemQueryable.cs
   branches/beagle-rdf/beagled/FileSystemQueryable/InternalUriManager.cs
   branches/beagle-rdf/beagled/FileSystemQueryable/TreeCrawlTask.cs
   branches/beagle-rdf/beagled/FilterFactory.cs
   branches/beagle-rdf/beagled/IQueryable.cs
   branches/beagle-rdf/beagled/IndexHelper/IndexHelper.cs
   branches/beagle-rdf/beagled/KonversationQueryable/KonversationQueryable.cs
   branches/beagle-rdf/beagled/KopeteQueryable/KopeteQueryable.cs
   branches/beagle-rdf/beagled/LuceneBitArray.cs
   branches/beagle-rdf/beagled/LuceneCommon.cs
   branches/beagle-rdf/beagled/LuceneIndexingDriver.cs
   branches/beagle-rdf/beagled/LuceneQueryable.cs
   branches/beagle-rdf/beagled/NetworkServicesQueryable/NetworkServicesQueryable.cs
   branches/beagle-rdf/beagled/PidginQueryable/PidginQueryable.cs
   branches/beagle-rdf/beagled/QueryDriver.cs
   branches/beagle-rdf/beagled/Queryable.cs
   branches/beagle-rdf/beagled/Server.cs
   branches/beagle-rdf/beagled/Shutdown.cs
   branches/beagle-rdf/beagled/SnippetExecutor.cs
   branches/beagle-rdf/beagled/SnippetFu.cs
   branches/beagle-rdf/beagled/SnippetTest.cs
   branches/beagle-rdf/beagled/StaticQueryable.cs
   branches/beagle-rdf/conf-data/crawl-rules/crawl-manpages
   branches/beagle-rdf/conf-data/query-mapping.xml
   branches/beagle-rdf/configure.in
   branches/beagle-rdf/po/ChangeLog
   branches/beagle-rdf/po/hu.po
   branches/beagle-rdf/search/Beagle.Search/Driver.cs
   branches/beagle-rdf/search/Makefile.am
   branches/beagle-rdf/tools/Query.cs
   branches/beagle-rdf/tools/StaticQuery.cs

Modified: branches/beagle-rdf/BeagleClient/Snippet.cs
==============================================================================
--- branches/beagle-rdf/BeagleClient/Snippet.cs	(original)
+++ branches/beagle-rdf/BeagleClient/Snippet.cs	Mon Mar 24 21:09:25 2008
@@ -47,6 +47,10 @@
 		// should know that.
 		public bool FullText = false; // default, not fulltext
 
+		public int ContextLength = -1; // Use system default = 6 if not specified
+
+		public int SnippetLength = -1; // 200, if not specified
+
 		public SnippetRequest () : base (false) { }
 
 		public SnippetRequest (Query query, Hit hit) : base (false)
@@ -145,12 +149,15 @@
 
 		public void AddMatchFragment (int query_term_index, string text)
 		{
+			text = StringFu.CleanupInvalidXmlCharacters (text);
+			if (String.IsNullOrEmpty (text))
+				return;
+
 			if (Fragments == null)
 				Fragments = new ArrayList (3); // mostly will be 3 fragments
 
 			// Before we send a snippet over the wire, clean up any
 			// characters that would be invalid in XML.
-			text = StringFu.CleanupInvalidXmlCharacters (text);
 			Fragments.Add (new Fragment (query_term_index, text));
 		}
 

Modified: branches/beagle-rdf/BeagleClient/Transport.cs
==============================================================================
--- branches/beagle-rdf/BeagleClient/Transport.cs	(original)
+++ branches/beagle-rdf/BeagleClient/Transport.cs	Mon Mar 24 21:09:25 2008
@@ -106,7 +106,6 @@
 			Logger.Log.Debug ("Received response:\n{0}\n", r.ReadToEnd ());
 			deserialize_stream.Seek (0, SeekOrigin.Begin);
 #endif
-
 			ResponseWrapper wrapper = (ResponseWrapper)resp_serializer.Deserialize (deserialize_stream);
 			ResponseMessage response = wrapper.Message;
 			deserialize_stream.Close ();

Modified: branches/beagle-rdf/BeagleClient/UnixTransport.cs
==============================================================================
--- branches/beagle-rdf/BeagleClient/UnixTransport.cs	(original)
+++ branches/beagle-rdf/BeagleClient/UnixTransport.cs	Mon Mar 24 21:09:25 2008
@@ -87,6 +87,8 @@
 		protected override void SendRequest (RequestMessage request)
 		{
 			client = new UnixClient (this.socket_name);
+			client.SendBufferSize = 4096;
+			client.ReceiveBufferSize = 4096;
 			NetworkStream stream = client.GetStream ();
 			
 			base.SendRequest (request, stream);
@@ -121,7 +123,7 @@
 
 				do {
 					// 0xff signifies end of message
-					end_index = ArrayFu.IndexOfByte (this.network_data, (byte) 0xff, prev_index);
+					end_index = Array.IndexOf<byte> (this.network_data, (byte) 0xff, prev_index);
 
 					int bytes_count = (end_index == -1 ? bytes_read : end_index) - prev_index;
 					this.BufferStream.Write (this.network_data, prev_index, bytes_count);

Modified: branches/beagle-rdf/Filters/AssemblyInfo.cs
==============================================================================
--- branches/beagle-rdf/Filters/AssemblyInfo.cs	(original)
+++ branches/beagle-rdf/Filters/AssemblyInfo.cs	Mon Mar 24 21:09:25 2008
@@ -28,7 +28,7 @@
 
 using Beagle.Filters;
 
-// All filter types have to be listed here to be loaded.
+// All (non-abstract) filter types have to be listed here to be loaded.
 [assembly: Beagle.Daemon.FilterTypes (
 	 typeof(FilterAbiWord),
 	 typeof(FilterApplication),
@@ -55,6 +55,7 @@
 	 typeof(FilterGif),
 	 typeof(FilterHtml),
 	 typeof(FilterIgnore),
+	 typeof(FilterInfo),
 	 typeof(FilterJava),
 	 typeof(FilterJavascript),
 	 typeof(FilterJpeg),
@@ -92,6 +93,7 @@
 	 typeof(FilterSpreadsheet),
 	 typeof(FilterSvg),
 	 typeof(FilterTeX),
+	 typeof(FilterTexi),
 	 typeof(FilterText),
 	 typeof(FilterTiff),
 	 typeof(FilterTotem),

Modified: branches/beagle-rdf/Filters/FilterTexi.cs
==============================================================================
--- branches/beagle-rdf/Filters/FilterTexi.cs	(original)
+++ branches/beagle-rdf/Filters/FilterTexi.cs	Mon Mar 24 21:09:25 2008
@@ -31,6 +31,8 @@
 using System.Text;
 using System.Text.RegularExpressions;
 
+using Beagle.Daemon;
+
 namespace Beagle.Filters {
 
 	public class FilterTexi : Beagle.Daemon.Filter {
@@ -44,13 +46,13 @@
 		public FilterTexi ()
 		{
 			// FIXME: Should this be documentation ?
-			SetFileType ("document");
+			SetFileType ("documentation");
 		}
 
 		protected override void RegisterSupportedTypes ()
 		{
 			// Make this a general texi filter.
-			AddSupportedMimeType ("text/x-texinfo");
+			AddSupportedFlavor (FilterFlavor.NewFromMimeType ("text/x-texinfo"));
 		}
 
 		/*
@@ -66,7 +68,6 @@
 				line = line.Replace (keyword, String.Empty);
 
 			AppendLine (line);
-			AppendWhiteSpace ();
 		}
 	}
 }

Modified: branches/beagle-rdf/Filters/Makefile.am
==============================================================================
--- branches/beagle-rdf/Filters/Makefile.am	(original)
+++ branches/beagle-rdf/Filters/Makefile.am	Mon Mar 24 21:09:25 2008
@@ -70,6 +70,7 @@
 	$(srcdir)/FilterHtml.cs		\
 	$(srcdir)/FilterIgnore.cs	\
 	$(srcdir)/FilterImage.cs	\
+	$(srcdir)/FilterInfo.cs		\
 	$(srcdir)/FilterJava.cs		\
 	$(srcdir)/FilterJpeg.cs		\
 	$(srcdir)/FilterJs.cs		\
@@ -107,6 +108,7 @@
 	$(srcdir)/FilterSpreadsheet.cs	\
 	$(srcdir)/FilterSvg.cs		\
 	$(srcdir)/FilterTeX.cs		\
+	$(srcdir)/FilterTexi.cs		\
 	$(srcdir)/FilterText.cs	        \
 	$(srcdir)/FilterTiff.cs		\
 	$(srcdir)/FilterTotem.cs	\

Modified: branches/beagle-rdf/Makefile.am
==============================================================================
--- branches/beagle-rdf/Makefile.am	(original)
+++ branches/beagle-rdf/Makefile.am	Mon Mar 24 21:09:25 2008
@@ -39,10 +39,6 @@
 SUBDIRS += epiphany-extension
 endif
 
-if ENABLE_BLUDGEON
-SUBDIRS += bludgeon
-endif
-
 if ENABLE_THUNDERBIRD
 SUBDIRS += thunderbird-extension
 endif

Modified: branches/beagle-rdf/NEWS
==============================================================================
--- branches/beagle-rdf/NEWS	(original)
+++ branches/beagle-rdf/NEWS	Mon Mar 24 21:09:25 2008
@@ -1,3 +1,89 @@
+Version 0.3.4
+23 March 2008
+
+* Need Mono at least 1.2.6; recommended at 1.9
+
+* GMime-sharp recommended at least 2.2.16
+
+* Add API to set the number of words and the total length of the snippets.
+
+* Move to Lucene.Net 2.1 (backported a faster analyzer and other improvements).
+
+* Move query mapping (e.g. mappings for ext:, genre:) to a separate user editable /etc/beagle/query-mapping.xml (global) and ~/.beagle/query-mapping.xml (local). beagled needs to be restarted to read the new mappings.
+
+* Expose a Hide/Show DBus interface for beagle-search.
+
+* Firefox search bar plugin to query using beagle's web interface.
+
+* Add a tool beagle-static-query to query beagle without starting beagled. This is mainly meant for static indexes (like locate with the system index, like mod for a monodoc index).
+
+* Lots of beagle-search beautification.
+
+* Add a query mapping "filename:" to query for filenames and words in it (e.g. match My in MyFile.txt and My_File.txt).
+
+* Enable the TeXinfo filter.
+
+* Add a filter for .info files (including gz/bz2/lzma compressed info files). manpages crawl rule now contains /usr/share/info.
+
+* SIGUSR2 will now also print runtime debugging information of beagled.
+
+* Use the new Mono.Unix.UnixSignal if built with mono 1.9. This should remove the last of the beagled/index-helper hangs during shutdown.
+
+* Add the missing files for the firefox extension sidebar.
+
+* Show a better error message if ~/.beagle is not found when the firefox extension is started (should help debian #463922).
+
+* Fixes #514252 (evo backends now explicitly reference glib-sharp)
+
+* Fixes #509487 (use LANG=C when external programs are started from any filter)
+
+* Fix build with mono 1.9 and gnome-sharp 2.20 (#514252, #518220)
+
+* Fix property change indexing (renames, moves etc.) which broke in 0.3.0
+
+* Fix our filter matching algorithm to correctly choose filters in the right order and move to the next one if one filter fails.
+
+* Fix file leak in ebuild filter.
+
+* Clean up some tmp files which could have left behind during a corner case.
+
+* Fix a startup crash in the Pidgin backend if the Pidgin log directory is absent during beagled startup.
+
+* Check for msgfmt in ./configure before building.
+
+* Fix glib-critical warnings in libbeagle (and python bindings) when snippets with empty fragments were sent by beagled.
+
+* Fix some bugs in snippet due to which valid matches were not included in the snippets.
+
+* Timeout in libbeagle if connection to beagled takes more than 5 secs. This will prevent hangs in konqueror/gtkfilechooser if beagled is hanged for some reason.
+
+* Do not throw error if scheduler information and index information is empty since they can actually be empty.
+
+* Translations:
+ - Spanish (Jorge Gonzalez)
+ - Polish (GNOME PL Team.)
+ - Basque (Inaki Larranaga Murgoitio)
+ - Italian (Gianvito Cavasoli)
+ - Japanese (Takeshi AIHANA)
+ - Norwegian bokmÃl (Kjartan Maraas)
+ - Finnish (Ilkka Tuohela)
+ - Catalan (Jordi Mas, Gil Forcada)
+ - Occitan (Yannig Marchegay)
+ - Swedish (Daniel Nylander)
+ - Brazilian Portuguese (Igor Soares)
+ - French (StÃphane Raimbault)
+ - British English (Philip Withnall)
+ - Hungarian (Gabor Kelemen)
+
+Contributors to this release: Debajyoti Bera, Lukas Lipka, Kevin
+Kubasik, Nirbheek Chauhan and Jaikumar Singh.
+
+Full set of changes:
+http://svn.gnome.org/viewvc/beagle/tags/BEAGLE_0_3_4/beagle/ChangeLog?view=markup
+http://svn.gnome.org/viewvc/beagle/tags/BEAGLE_0_3_4/libbeagle/ChangeLog?view=markup
+
+-------------------------------------------------------------------------------
+
 Version 0.3.3
 2 February 2008
 

Modified: branches/beagle-rdf/Util/ExceptionHandlingThread.cs
==============================================================================
--- branches/beagle-rdf/Util/ExceptionHandlingThread.cs	(original)
+++ branches/beagle-rdf/Util/ExceptionHandlingThread.cs	Mon Mar 24 21:09:25 2008
@@ -60,8 +60,8 @@
 			} catch (ThreadAbortException e) {
 				Logger.Log.Debug ("Thread aborted: {0}\n{1}\n", this.thread.Name, e.StackTrace);
 			} catch (Exception e) {
-				Logger.Log.Warn (e, "Exception caught while executing {0}:{1}",
-						 this.method.Target, this.method.Method);
+				Logger.Log.Warn (e, "Exception caught in {2} while executing {0}:{1}",
+						 this.method.Target, this.method.Method, this.thread.Name);
 			}
 
 			lock (live_threads)

Modified: branches/beagle-rdf/beagled/BeagleDaemon.cs
==============================================================================
--- branches/beagle-rdf/beagled/BeagleDaemon.cs	(original)
+++ branches/beagle-rdf/beagled/BeagleDaemon.cs	Mon Mar 24 21:09:25 2008
@@ -500,7 +500,12 @@
 			QueryDriver.Init ();
 			Server.Init ();
 
+#if MONO_1_9
+			Shutdown.SetupSignalHandlers (new Shutdown.SignalHandler (HandleSignal));
+#else
 			SetupSignalHandlers ();
+#endif
+
 			Shutdown.ShutdownEvent += OnShutdown;
 
 			main_loop = new MainLoop ();
@@ -578,7 +583,8 @@
 				return;
 
 			// Set shutdown flag to true so that other threads can stop initializing
-			if ((Mono.Unix.Native.Signum) signal != Mono.Unix.Native.Signum.SIGUSR1)
+			if ((Mono.Unix.Native.Signum) signal != Mono.Unix.Native.Signum.SIGUSR1 &&
+			    (Mono.Unix.Native.Signum) signal != Mono.Unix.Native.Signum.SIGUSR2)
 				Shutdown.ShutdownRequested = true;
 
 			// Do all signal handling work in the main loop and not in the signal handler.
@@ -589,17 +595,22 @@
 		{
 			Logger.Log.Debug ("Handling signal {0} ({1})", signal, (Mono.Unix.Native.Signum) signal);
 
+			// Pass the signals to the helper too.
+			GLib.Idle.Add (new GLib.IdleHandler (delegate ()
+							    {
+								    RemoteIndexer.SignalRemoteIndexer ((Mono.Unix.Native.Signum) signal);
+								    return false; 
+							    }));
+
 			// If we get SIGUSR1, turn the debugging level up.
 			if ((Mono.Unix.Native.Signum) signal == Mono.Unix.Native.Signum.SIGUSR1) {
 				LogLevel old_level = Log.Level;
 				Log.Level = LogLevel.Debug;
 				Log.Debug ("Moving from log level {0} to Debug", old_level);
-			}
-
-			// Send informational signals to the helper too.
-			if ((Mono.Unix.Native.Signum) signal == Mono.Unix.Native.Signum.SIGUSR1 ||
-			    (Mono.Unix.Native.Signum) signal == Mono.Unix.Native.Signum.SIGUSR2) {
-				GLib.Idle.Add (new GLib.IdleHandler (delegate () { RemoteIndexer.SignalRemoteIndexer ((Mono.Unix.Native.Signum) signal); return false; }));
+				return;
+			} else if ((Mono.Unix.Native.Signum) signal == Mono.Unix.Native.Signum.SIGUSR2) {
+				// Debugging hook for beagled
+				QueryDriver.DebugHook ();
 				return;
 			}
 

Modified: branches/beagle-rdf/beagled/BuildIndex.cs
==============================================================================
--- branches/beagle-rdf/beagled/BuildIndex.cs	(original)
+++ branches/beagle-rdf/beagled/BuildIndex.cs	Mon Mar 24 21:09:25 2008
@@ -354,7 +354,16 @@
 			fa_store = new FileAttributesStore (backing_fa_store);
 			
 			// Set up signal handlers
+#if MONO_1_9
+			Shutdown.SetupSignalHandlers (delegate (int signal)
+							{
+								if (signal == (int) Mono.Unix.Native.Signum.SIGINT ||
+								    signal == (int) Mono.Unix.Native.Signum.SIGTERM)
+									Shutdown.BeginShutdown ();
+							});
+#else
 			SetupSignalHandlers ();
+#endif
 
 			Thread monitor_thread = null;
 

Modified: branches/beagle-rdf/beagled/ExternalMetadataQueryable.cs
==============================================================================
--- branches/beagle-rdf/beagled/ExternalMetadataQueryable.cs	(original)
+++ branches/beagle-rdf/beagled/ExternalMetadataQueryable.cs	Mon Mar 24 21:09:25 2008
@@ -74,7 +74,7 @@
 			return 0;
 		}
 
-		public ISnippetReader GetSnippet (string[] query_terms, Hit hit, bool full_text)
+		public ISnippetReader GetSnippet (string[] query_terms, Hit hit, bool full_text, int ctx_length, int snp_length)
 		{
 			return null;
 		}

Modified: branches/beagle-rdf/beagled/FileSystemQueryable/FileCrawlTask.cs
==============================================================================
--- branches/beagle-rdf/beagled/FileSystemQueryable/FileCrawlTask.cs	(original)
+++ branches/beagle-rdf/beagled/FileSystemQueryable/FileCrawlTask.cs	Mon Mar 24 21:09:25 2008
@@ -135,5 +135,14 @@
 
 			Reschedule = true;
 		}
+
+		internal void DebugHook ()
+		{
+			lock (big_lock)
+				Log.Debug ("FSQ:FileCrawlTask Debughook: Crawling {0} (generator is {1}) and is {2}active",
+					(current_dir != null ? current_dir.FullName : "nothing"),
+					(current_generator != null ? "busy" : "empty"),
+					(is_active ? String.Empty : "in"));
+		}
 	}
 }

Modified: branches/beagle-rdf/beagled/FileSystemQueryable/FileSystemQueryable.cs
==============================================================================
--- branches/beagle-rdf/beagled/FileSystemQueryable/FileSystemQueryable.cs	(original)
+++ branches/beagle-rdf/beagled/FileSystemQueryable/FileSystemQueryable.cs	Mon Mar 24 21:09:25 2008
@@ -464,6 +464,8 @@
 
 			lock (dir_models_by_path)
 				dir_models_by_path.Remove (expired_path);
+
+			FileAttributesStore.Drop (expired_path);
 		}
 
 		public void AddDirectory (DirectoryModel parent, string name)
@@ -1027,6 +1029,14 @@
 						self_task = null;
 				}
 			}
+
+			internal void DebugHook ()
+			{
+				lock (queue_lock)
+					Log.Debug ("FSQ:FileSystemEventsGenerator Debughook: {0} more events to process, generator is {1}active",
+						event_queue.Count,
+						(self_task != null ? String.Empty : "in"));
+			}
 		}
 
 		//////////////////////////////////////////////////////////////////////////
@@ -1843,7 +1853,7 @@
 			return parent_dirs;
 		}
 
-		override public ISnippetReader GetSnippet (string [] query_terms, Hit hit, bool full_text)
+		override public ISnippetReader GetSnippet (string [] query_terms, Hit hit, bool full_text, int ctx_length, int snp_length)
 		{
 			// Uri remapping from a hit is easy: the internal uri
 			// is stored in a property.
@@ -1853,12 +1863,12 @@
 			TextReader reader = TextCache.UserCache.GetReader (uri, ref self_cache);
 
 			if (self_cache)
-				return SnippetFu.GetSnippetFromFile (query_terms, hit.Uri.LocalPath, full_text);
+				return SnippetFu.GetSnippetFromFile (query_terms, hit.Uri.LocalPath, full_text, ctx_length, snp_length);
 
 			if (reader == null)
 				return null;
 
-			return SnippetFu.GetSnippet (query_terms, reader, full_text);
+			return SnippetFu.GetSnippet (query_terms, reader, full_text, ctx_length, snp_length);
 		}
 
 		override public void Start ()
@@ -2014,6 +2024,45 @@
 
 			return internal_uri;
 		}
+
+		//////////////////////////
+
+		internal override void DebugHook ()
+		{
+			Log.Debug ("FSQ DebugHook: {0} roots, {1} roots by path, {2} dir_models_by_id, {3} name_info_by_id, {4} dir_models_by_path",
+				(roots != null ? roots.Count : -1),
+				(roots_by_path != null ? roots_by_path.Count : -1),
+				(dir_models_by_id != null ? dir_models_by_id.Count : -1),
+				(name_info_by_id != null ? name_info_by_id.Count : -1),
+				(dir_models_by_path != null ? dir_models_by_path.Count : -1));
+
+			Log.Debug ("FSQ Debughook: {0} external_pending_indexables",
+				(external_pending_indexables != null ? external_pending_indexables.Count : -1));
+
+			lock (big_lock) {
+				foreach (DirectoryModel root in roots) {
+					int count = 1;
+					ArrayList queue = new ArrayList ();
+					queue.Add (root);
+					DirectoryModel child;
+					while (queue.Count > 0) {
+						child = (DirectoryModel) queue [0];
+						queue.RemoveAt (0);
+
+						if (child.ChildCount == 0)
+							continue;
+						count += child.ChildCount;
+						queue.AddRange (child.Children);
+					}
+					Console.WriteLine ("FSQ Debughook: {0} has {1} subdirs", root.FullName, count);
+				}
+			}
+
+			tree_crawl_task.DebugHook ();
+			file_crawl_task.DebugHook ();
+			fs_event_generator.DebugHook ();
+			uid_manager.DebugHook ();
+		}
 	}
 }
 	

Modified: branches/beagle-rdf/beagled/FileSystemQueryable/InternalUriManager.cs
==============================================================================
--- branches/beagle-rdf/beagled/FileSystemQueryable/InternalUriManager.cs	(original)
+++ branches/beagle-rdf/beagled/FileSystemQueryable/InternalUriManager.cs	Mon Mar 24 21:09:25 2008
@@ -61,6 +61,12 @@
 
 		////////////////////////////////////////////////////////////////
 
+		// Ouch! Hardcoding prefix is not good
+		static FieldSelector fields_nameinfo = new MapFieldSelector (new string[] {"Uri",
+											   "prop:k:" + Property.ExactFilenamePropKey,
+											   "prop:k:" + Property.ParentDirUriPropKey,
+											   "prop:k:" + Property.IsDirectoryPropKey
+										});
 
 		private NameInfo DocumentToNameInfo (Document doc)
 		{
@@ -132,7 +138,7 @@
 
 			if (match_id != -1) {
 				Document doc;
-				doc = reader.Document (match_id);
+				doc = reader.Document (match_id, fields_nameinfo);
 				info = DocumentToNameInfo (doc);
 			}
 
@@ -269,7 +275,7 @@
 					break;
 
 				Document doc;
-				doc = searcher.Doc (i);
+				doc = searcher.Doc (i, fields_nameinfo);
 
 				NameInfo info;
 				info = DocumentToNameInfo (doc);
@@ -384,6 +390,10 @@
 			return GetAllDirectoryNameInfo (null);
 		}
 
+		internal void DebugHook ()
+		{
+			Log.Debug ("FSQ:InternalUriManager Debughook: {0} cached_uid_by_path", cached_uid_by_path.Count);
+		}
 	}
 }
 

Modified: branches/beagle-rdf/beagled/FileSystemQueryable/TreeCrawlTask.cs
==============================================================================
--- branches/beagle-rdf/beagled/FileSystemQueryable/TreeCrawlTask.cs	(original)
+++ branches/beagle-rdf/beagled/FileSystemQueryable/TreeCrawlTask.cs	Mon Mar 24 21:09:25 2008
@@ -129,5 +129,10 @@
 			SetIsActive (false, null);
 		}
 
+		internal void DebugHook ()
+		{
+			lock (big_lock)
+				Log.Debug ("FSQ:TreeCrawlTask Debughook: {0} directories left to crawl, current {1}active", to_be_crawled.Count, is_active ? String.Empty : "in");
+		}
 	}
 }

Modified: branches/beagle-rdf/beagled/FilterFactory.cs
==============================================================================
--- branches/beagle-rdf/beagled/FilterFactory.cs	(original)
+++ branches/beagle-rdf/beagled/FilterFactory.cs	Mon Mar 24 21:09:25 2008
@@ -347,6 +347,7 @@
 
 			if (Debug)
 				Logger.Log.Debug ("None of the matching filters could process the file: {0}", path);
+			indexable.NoContent = true;
 			
 			return false;
 		}

Modified: branches/beagle-rdf/beagled/IQueryable.cs
==============================================================================
--- branches/beagle-rdf/beagled/IQueryable.cs	(original)
+++ branches/beagle-rdf/beagled/IQueryable.cs	Mon Mar 24 21:09:25 2008
@@ -48,7 +48,7 @@
 		// Just return the number of matches
 		int DoCountMatchQuery (Query query);
 
-		ISnippetReader GetSnippet (string[] query_terms, Hit hit, bool full_text);
+		ISnippetReader GetSnippet (string[] query_terms, Hit hit, bool full_text, int context_length, int snippet_length);
 
 		QueryableStatus GetQueryableStatus ();
 	}

Modified: branches/beagle-rdf/beagled/IndexHelper/IndexHelper.cs
==============================================================================
--- branches/beagle-rdf/beagled/IndexHelper/IndexHelper.cs	(original)
+++ branches/beagle-rdf/beagled/IndexHelper/IndexHelper.cs	Mon Mar 24 21:09:25 2008
@@ -137,7 +137,11 @@
 
 			Server.Init ();
 
+#if MONO_1_9
+			Shutdown.SetupSignalHandlers (new Shutdown.SignalHandler (HandleSignal));
+#else
 			SetupSignalHandlers ();
+#endif
 
 			Shutdown.ShutdownEvent += OnShutdown;
 

Modified: branches/beagle-rdf/beagled/KonversationQueryable/KonversationQueryable.cs
==============================================================================
--- branches/beagle-rdf/beagled/KonversationQueryable/KonversationQueryable.cs	(original)
+++ branches/beagle-rdf/beagled/KonversationQueryable/KonversationQueryable.cs	Mon Mar 24 21:09:25 2008
@@ -513,7 +513,7 @@
 			return false;
 		}
 
-		override public ISnippetReader GetSnippet (string [] query_terms, Hit hit, bool full_text)
+		override public ISnippetReader GetSnippet (string [] query_terms, Hit hit, bool full_text, int ctx_length, int snp_length)
 		{
 			if (hit.ParentUri == null)
 				return null;
@@ -528,7 +528,7 @@
 				LineTextReader reader;
 				reader = new LineTextReader (path, begin_offset, end_offset);
 
-				return SnippetFu.GetSnippet (query_terms, reader, full_text);
+				return SnippetFu.GetSnippet (query_terms, reader, full_text, ctx_length, snp_length);
 			} catch {
 				return null;
 			}

Modified: branches/beagle-rdf/beagled/KopeteQueryable/KopeteQueryable.cs
==============================================================================
--- branches/beagle-rdf/beagled/KopeteQueryable/KopeteQueryable.cs	(original)
+++ branches/beagle-rdf/beagled/KopeteQueryable/KopeteQueryable.cs	Mon Mar 24 21:09:25 2008
@@ -219,7 +219,7 @@
 			return true;
 		}
 
-		public override ISnippetReader GetSnippet (string [] query_terms, Hit hit, bool full_text)
+		public override ISnippetReader GetSnippet (string [] query_terms, Hit hit, bool full_text, int ctx_length, int snp_length)
 		{
 			TextReader reader = TextCache.UserCache.GetReader (hit.Uri);
 
@@ -228,7 +228,7 @@
 
 			KopeteSnippetReader snippet_reader = new KopeteSnippetReader (reader);
 
-			return SnippetFu.GetSnippet (query_terms, snippet_reader, full_text);
+			return SnippetFu.GetSnippet (query_terms, snippet_reader, full_text, ctx_length, snp_length);
 		}
 
 		private class KopeteSnippetReader : TextReader {

Modified: branches/beagle-rdf/beagled/LuceneBitArray.cs
==============================================================================
--- branches/beagle-rdf/beagled/LuceneBitArray.cs	(original)
+++ branches/beagle-rdf/beagled/LuceneBitArray.cs	Mon Mar 24 21:09:25 2008
@@ -198,6 +198,8 @@
 
 		////////////////////////////////////////////////////////////
 
+		static FieldSelector fields_uri = new MapFieldSelector (new string[] {"Uri"});
+
 		public void ProjectOnto (LuceneBitArray other)
 		{
 			int j = 0;
@@ -209,7 +211,7 @@
 				j = i+1;
 
 				Document doc;
-				doc = searcher.Doc (i, LuceneQueryingDriver.fields_uri);
+				doc = searcher.Doc (i, fields_uri);
 
 				other.AddUri (doc.Get ("Uri"));
 			}

Modified: branches/beagle-rdf/beagled/LuceneCommon.cs
==============================================================================
--- branches/beagle-rdf/beagled/LuceneCommon.cs	(original)
+++ branches/beagle-rdf/beagled/LuceneCommon.cs	Mon Mar 24 21:09:25 2008
@@ -87,7 +87,7 @@
 		// 18: add IsPersistent to properties, and adjust coded values
 		//     in AddPropertyToDocument() and GetPropertyFromDocument();
 		//     changed subdate field format rules for better readability
-		// 19: store a list of current properties in a field
+		// 19: Update lucene and analyzer (lucene.net-2.1)
 		private const int MAJOR_VERSION = 19;
 		private int minor_version = 0;
 

Modified: branches/beagle-rdf/beagled/LuceneIndexingDriver.cs
==============================================================================
--- branches/beagle-rdf/beagled/LuceneIndexingDriver.cs	(original)
+++ branches/beagle-rdf/beagled/LuceneIndexingDriver.cs	Mon Mar 24 21:09:25 2008
@@ -357,6 +357,7 @@
 			if (Shutdown.ShutdownRequested) {
 				foreach (DeferredInfo di in deferred_indexables)
 					di.Cleanup ();
+				deferred_indexables.Clear ();
 
 				foreach (Indexable indexable in request_indexables)
 					indexable.Cleanup ();
@@ -503,6 +504,7 @@
 			if (Shutdown.ShutdownRequested) {
 				foreach (DeferredInfo di in deferred_indexables)
 					di.Cleanup ();
+				deferred_indexables.Clear ();
 
 				primary_writer.Close ();
 				if (secondary_writer != null)
@@ -542,7 +544,8 @@
 			// If we have content, try to find a filter
 			// we we can use to process the indexable
 			try {
-				FilterFactory.FilterIndexable (indexable, (disable_textcache ? null : text_cache), out filter);
+				if (! FilterFactory.FilterIndexable (indexable, (disable_textcache ? null : text_cache), out filter))
+					indexable.NoContent = true;
 			} catch (Exception e) {
 				indexable.NoContent = true;
 			}
@@ -740,6 +743,7 @@
 			lock (flush_lock) {
 				foreach (DeferredInfo di in deferred_indexables)
 					di.Cleanup ();
+				deferred_indexables.Clear ();
 			}
 		}
 	}

Modified: branches/beagle-rdf/beagled/LuceneQueryable.cs
==============================================================================
--- branches/beagle-rdf/beagled/LuceneQueryable.cs	(original)
+++ branches/beagle-rdf/beagled/LuceneQueryable.cs	Mon Mar 24 21:09:25 2008
@@ -104,7 +104,8 @@
 
 			// If the queryable is in read-only more, don't 
 			// instantiate an indexer for it.
-			if (read_only_mode)
+			// FIXME: --indexing-delay -1 is a hack for --read-only; need to fix this
+			if (read_only_mode || QueryDriver.IndexingDelay < 0)
 				return;
 
 			indexer = LocalIndexerHook ();
@@ -368,7 +369,7 @@
 
 		/////////////////////////////////////////
 
-		protected SnippetReader GetSnippetFromTextCache (string [] query_terms, Uri uri, bool full_text)
+		protected SnippetReader GetSnippetFromTextCache (string [] query_terms, Uri uri, bool full_text, int ctx_length, int snp_length)
 		{
 			// Look up the hit in our text cache.  If it is there,
 			// use the cached version to generate a snippet.
@@ -378,12 +379,12 @@
 			if (reader == null)
 				return null;
 
-			return SnippetFu.GetSnippet (query_terms, reader, full_text);
+			return SnippetFu.GetSnippet (query_terms, reader, full_text, ctx_length, snp_length);
 		}
 
-		virtual public ISnippetReader GetSnippet (string [] query_terms, Hit hit, bool full_text)
+		virtual public ISnippetReader GetSnippet (string [] query_terms, Hit hit, bool full_text, int ctx_length, int snp_length)
 		{
-			return GetSnippetFromTextCache (query_terms, hit.Uri, full_text);
+			return GetSnippetFromTextCache (query_terms, hit.Uri, full_text, ctx_length, snp_length);
 		}
 
 		/////////////////////////////////////////
@@ -1059,5 +1060,11 @@
 		{
 			return new LuceneQueryingDriver (index_name, minor_version, read_only_mode);
 		}
+
+		//////////////////////////////////////////////////////////////////////////////////
+
+		virtual internal void DebugHook ()
+		{
+		}
 	}
 }

Modified: branches/beagle-rdf/beagled/NetworkServicesQueryable/NetworkServicesQueryable.cs
==============================================================================
--- branches/beagle-rdf/beagled/NetworkServicesQueryable/NetworkServicesQueryable.cs	(original)
+++ branches/beagle-rdf/beagled/NetworkServicesQueryable/NetworkServicesQueryable.cs	Mon Mar 24 21:09:25 2008
@@ -135,7 +135,7 @@
 			return 0;
 		}
 
-		public ISnippetReader GetSnippet (string[] query_terms, Hit hit, bool full_text)
+		public ISnippetReader GetSnippet (string[] query_terms, Hit hit, bool full_text, int ctx_length, int snp_length)
 		{
 			return null;
 		}

Modified: branches/beagle-rdf/beagled/PidginQueryable/PidginQueryable.cs
==============================================================================
--- branches/beagle-rdf/beagled/PidginQueryable/PidginQueryable.cs	(original)
+++ branches/beagle-rdf/beagled/PidginQueryable/PidginQueryable.cs	Mon Mar 24 21:09:25 2008
@@ -54,7 +54,9 @@
 		private void StartWorker() 
 		{
 			bool gaim_exists = Directory.Exists (Path.Combine (PathFinder.HomeDir, ".gaim"));
+			gaim_exists = gaim_exists && Directory.Exists (Path.Combine (Path.Combine (PathFinder.HomeDir, ".gaim"), "logs"));
 			bool pidgin_exists = Directory.Exists (Path.Combine (PathFinder.HomeDir, ".purple"));
+			pidgin_exists = pidgin_exists && Directory.Exists (Path.Combine (Path.Combine (PathFinder.HomeDir, ".purple"), "logs"));
 
 			if (!pidgin_exists && !gaim_exists) {
 				GLib.Timeout.Add (polling_interval, new GLib.TimeoutHandler (CheckForExistence));
@@ -88,7 +90,9 @@
 		private bool CheckForExistence ()
 		{
 			bool gaim_exists = Directory.Exists (Path.Combine (PathFinder.HomeDir, ".gaim"));
+			gaim_exists = gaim_exists && Directory.Exists (Path.Combine (Path.Combine (PathFinder.HomeDir, ".gaim"), "logs"));
 			bool pidgin_exists = Directory.Exists (Path.Combine (PathFinder.HomeDir, ".purple"));
+			pidgin_exists = pidgin_exists && Directory.Exists (Path.Combine (Path.Combine (PathFinder.HomeDir, ".purple"), "logs"));
 
 			if (gaim_exists || pidgin_exists) {
 				this.Start ();
@@ -125,7 +129,7 @@
 			return true;
 		}
 
-		public override ISnippetReader GetSnippet (string [] query_terms, Hit hit, bool full_text)
+		public override ISnippetReader GetSnippet (string [] query_terms, Hit hit, bool full_text, int ctx_length, int snp_length)
 		{
 			TextReader reader = TextCache.UserCache.GetReader (hit.Uri);
 
@@ -137,7 +141,7 @@
 			if (line[0] == '<')
 				reader = new HtmlRemovingReader (reader);
 
-			return SnippetFu.GetSnippet (query_terms, reader, full_text);
+			return SnippetFu.GetSnippet (query_terms, reader, full_text, ctx_length, snp_length);
 		}
 
 		public ImBuddyListReader ImBuddyListReader {

Modified: branches/beagle-rdf/beagled/QueryDriver.cs
==============================================================================
--- branches/beagle-rdf/beagled/QueryDriver.cs	(original)
+++ branches/beagle-rdf/beagled/QueryDriver.cs	Mon Mar 24 21:09:25 2008
@@ -36,7 +36,7 @@
 
 namespace Beagle.Daemon {
 	
-	public class QueryDriver {
+	public static class QueryDriver {
 
 		// Contains list of queryables explicitly asked by --allow-backend or --backend name
 		// --allow-backend/--backend name : dont read config information and only start backend 'name'
@@ -130,6 +130,7 @@
 
 		public static int IndexingDelay {
 			set { indexing_delay = value; }
+			get { return indexing_delay; }
 		}
 
 		//////////////////////////////////////////////////////////////////////////////////////
@@ -533,7 +534,7 @@
 					continue;
 				if (sb.Length > 0)
 					sb.Append (' ');
-				sb.Append (LuceneCommon.Stem (split [i]));
+				sb.Append (LuceneCommon.Stem (split [i].ToLower ()));
 			}
 			response.StemmedText.Add (sb.ToString ());
 		}
@@ -694,5 +695,25 @@
 				return false;
 			}
 		}
+
+		/////////////////////////////////////////////////////////
+
+		// Various debug hooks; especially persistant state information and memory issues
+
+		public static void DebugHook ()
+		{
+			Log.Debug ("Debughook called:");
+			LuceneQueryable l;
+			foreach (Queryable q in Queryables) {
+				l = q.IQueryable as LuceneQueryable;
+				if (l == null)
+					continue;
+				try {
+					l.DebugHook ();
+				} catch (Exception e) {
+					Log.Debug (e, "Exception during Debughook for {0}", q.Name);
+				}
+			}
+		}
 	}
 }

Modified: branches/beagle-rdf/beagled/Queryable.cs
==============================================================================
--- branches/beagle-rdf/beagled/Queryable.cs	(original)
+++ branches/beagle-rdf/beagled/Queryable.cs	Mon Mar 24 21:09:25 2008
@@ -98,7 +98,7 @@
 			}
 		}
 
-		public ISnippetReader GetSnippet (string[] query_terms, Hit hit, bool full_text)
+		public ISnippetReader GetSnippet (string[] query_terms, Hit hit, bool full_text, int ctx_length, int snp_length)
 		{
 			if (hit == null)
 				return null;
@@ -110,7 +110,7 @@
 			}
 
 			try {
-				return iqueryable.GetSnippet (query_terms, hit, full_text);
+				return iqueryable.GetSnippet (query_terms, hit, full_text, ctx_length, snp_length);
 			} catch (Exception ex) {
 				Logger.Log.Warn (ex, "Caught exception calling DoQuery on '{0}'", Name);
 			}

Modified: branches/beagle-rdf/beagled/Server.cs
==============================================================================
--- branches/beagle-rdf/beagled/Server.cs	(original)
+++ branches/beagle-rdf/beagled/Server.cs	Mon Mar 24 21:09:25 2008
@@ -294,12 +294,14 @@
 		public UnixConnectionHandler (UnixClient client)
 		{
 			this.client = client;
+			this.client.SendBufferSize = 4096;
+			this.client.ReceiveBufferSize = 4096;
 		}
 
 		public override bool SendResponse(ResponseMessage response)
 		{
 			bool result = false;
-			
+
 			lock (this.client_lock) {
 				if (this.client == null) 
 					return false;
@@ -409,6 +411,8 @@
 			Shutdown.WorkerFinished (network_data);
 		}
 
+		private bool closed = false;
+
 		public override void Close ()
 		{
 			CancelIfBlocking ();
@@ -417,17 +421,24 @@
 			// grab the lock here and close the underlying
 			// UnixClient, or else we'd deadlock between here and
 			// the Read() in HandleConnection()
+
+			// Do this in a lock since Close() should be thread-safe (can be called from AsyncCallback handler)
 			lock (this.client_lock) {
+				if (closed)
+					return;
+
 				if (this.client != null) {
 					this.client.Close ();
 					this.client = null;
 				}
-			}
 
-			if (this.executor != null) {
-				this.executor.Cleanup ();
-				this.executor.AsyncResponseEvent -= OnAsyncResponse;
-				this.executor = null;
+				if (this.executor != null) {
+					this.executor.Cleanup ();
+					this.executor.AsyncResponseEvent -= OnAsyncResponse;
+					this.executor = null;
+				}
+
+			    closed = true;
 			}
 
 			Server.RunGC ();
@@ -439,8 +450,10 @@
 
 			try {
 				bytes_read = this.client.GetStream ().EndRead (ar);
-			} catch (SocketException) {
-			} catch (IOException) { }
+			} catch (IOException e) {
+				if (! (e.InnerException is SocketException))
+					throw e;
+			} catch (ObjectDisposedException) { }
 
 			if (bytes_read == 0)
 				Close ();
@@ -455,8 +468,26 @@
 				return;
 			}
 
-			this.client.GetStream ().BeginRead (new byte[1024], 0, 1024,
-							    new AsyncCallback (WatchCallback), null);
+			try {
+				this.client.GetStream ().BeginRead (new byte[1024], 0, 1024,
+								    new AsyncCallback (WatchCallback), null);
+			} catch (ObjectDisposedException) {
+				Log.Debug ("Network stream closed; closing connection at this end");
+				this.Close ();
+				return;
+			} catch (IOException e) {
+				if (e.InnerException is SocketException) {
+					Log.Debug (e.InnerException, "Socket exception while setting up watch");
+					this.Close ();
+					return;
+				} else
+					throw e;
+			} catch (System.ArgumentException e) {
+				// https://bugzilla.novell.com/show_bug.cgi?id=371923
+				Log.Debug (e, "Possibly socket is already closed");
+				this.Close ();
+				return;
+			}
 		}
 	}	
 

Modified: branches/beagle-rdf/beagled/Shutdown.cs
==============================================================================
--- branches/beagle-rdf/beagled/Shutdown.cs	(original)
+++ branches/beagle-rdf/beagled/Shutdown.cs	Mon Mar 24 21:09:25 2008
@@ -27,7 +27,9 @@
 using System;
 using System.Threading;
 using System.Collections;
+using System.Diagnostics;
 using Beagle.Util;
+using Mono.Unix;
 
 namespace Beagle.Daemon {
 
@@ -40,6 +42,7 @@
 		static Hashtable workers_names = new Hashtable ();
 		static bool shutdownRequested = false;
 		static bool shutdownStarted = false;
+		static bool mainloop_finished = false;
 
 		public delegate void ShutdownHandler ();
 		public static event ShutdownHandler ShutdownEvent;
@@ -108,14 +111,6 @@
 			main_loop = loop;
 		}
 
-		// Our handler triggers an orderly shutdown when it receives a signal.
-		// However, this can be annoying if the process gets wedged during
-		// shutdown.  To deal with that case, we make a note of the time when
-		// the first signal comes in, and we allow signals to unconditionally
-		// kill the process after 5 seconds have passed.
-
-		static DateTime signal_time = DateTime.MinValue;
-
 		public static void BeginShutdown ()
 		{
 			lock (shutdownLock) {
@@ -129,31 +124,7 @@
 				shutdownStarted = true;
 			}
 
-			// FIXME: This whole "unconditional killing after 5 seconds because
-			// beagled can hang while shutting down" thing should not occur. Any such
-			// incident should be immediately investigated and fixed. Hint: Sending
-			// kill -quit `pidof beagled` will probably reveal that beagled got locked
-			// when signal handler was called and some thread was executing some native
-			// method.
-			bool first_signal = false;
-			if (signal_time == DateTime.MinValue) {
-				Log.Always ("Shutdown requested");
-				signal_time = DateTime.Now;
-				first_signal = true;
-			}
-
-			if (! first_signal) {
-				double t = (DateTime.Now - signal_time).TotalSeconds;
-				const double min_t = 5;
-
-				if (t < min_t) {
-					Logger.Log.Debug ("Signals can force an immediate shutdown in {0:0.00}s", min_t-t);
-					return;
-				} else {
-					Logger.Log.Debug ("Forcing immediate shutdown.");
-					Environment.Exit (0);
-				}
-			}
+			Log.Always ("Shutdown requested");
 
 			if (ShutdownEvent != null) {
 				try {
@@ -180,6 +151,70 @@
 
 			Logger.Log.Info ("All workers have finished.  Exiting main loop.");
 			main_loop.Quit ();
+
+#if MONO_1_9
+			// So (re)sending a SIGTERM or SIGINT after mainloop is over will kill the process.
+			// Is it good or bad ? (some of the exception handling thread might still be running)
+			// I think its good; it sort of emulates the 5sec forceful killing feature of < 0.3.4 
+			lock (shutdownLock)
+				mainloop_finished = true;
+
+			// Stop the signal handler thread by sending a signal
+			Mono.Unix.Native.Syscall.kill (Process.GetCurrentProcess ().Id, Mono.Unix.Native.Signum.SIGINT);
+#endif
+		}
+
+#if MONO_1_9
+		static bool MainloopFinished {
+			get {
+				lock (shutdownLock)
+					return mainloop_finished;
+			}
+		}
+
+		public delegate void SignalHandler (int signal);
+
+		public static void SetupSignalHandlers (SignalHandler signal_handler)
+		{
+			UnixSignal[] signals = new UnixSignal [] {
+				new UnixSignal (Mono.Unix.Native.Signum.SIGINT),
+				new UnixSignal (Mono.Unix.Native.Signum.SIGTERM),
+				new UnixSignal (Mono.Unix.Native.Signum.SIGUSR1),
+				new UnixSignal (Mono.Unix.Native.Signum.SIGUSR2)
+			};
+
+			// Ignore SIGPIPE
+			// FIXME: Shouldn't this be done in every thread ?
+			Mono.Unix.Native.Stdlib.SetSignalAction (Mono.Unix.Native.Signum.SIGPIPE, Mono.Unix.Native.SignalAction.Ignore);
+
+			Thread signal_thread = new Thread (delegate () {
+				Log.Debug ("Starting signal handler thread");
+				int signal_handler_timeout = -1;
+				while (! MainloopFinished) {
+					int index = UnixSignal.WaitAny (signals, signal_handler_timeout);
+
+					if (index > 3)
+						continue;
+					Mono.Unix.Native.Signum signal = signals [index].Signum;
+
+					// Set shutdown flag to true so that other threads can stop initializing
+					if (signal == Mono.Unix.Native.Signum.SIGINT ||
+					    signal == Mono.Unix.Native.Signum.SIGTERM) {
+						ShutdownRequested = true;
+						signal_handler_timeout = 200; // 200 ms
+					}
+
+					if (signal_handler == null)
+						continue;
+
+					// Do all signal handling work in the main loop and not in the signal handler.
+					GLib.Idle.Add (new GLib.IdleHandler (delegate () { signal_handler ((int) signal); return false; }));
+				}
+				Log.Debug ("Exiting signal handler thread");
+			});
+
+			signal_thread.Start ();
 		}
+#endif
 	}
 }

Modified: branches/beagle-rdf/beagled/SnippetExecutor.cs
==============================================================================
--- branches/beagle-rdf/beagled/SnippetExecutor.cs	(original)
+++ branches/beagle-rdf/beagled/SnippetExecutor.cs	Mon Mar 24 21:09:25 2008
@@ -42,13 +42,15 @@
 			Queryable queryable = QueryDriver.GetQueryable (request.Hit.Source);
 			ISnippetReader snippet_reader;
 			bool full_text = request.FullText;
+			int ctx_length = request.ContextLength;
+			int snp_length = request.SnippetLength;
 
 			if (queryable == null) {
 				Log.Error ("SnippetExecutor: No queryable object matches '{0}'", request.Hit.Source);
-				snippet_reader = new SnippetReader (null, null, false);
+				snippet_reader = new SnippetReader (null, null, false, -1, -1);
 				full_text = false;
 			} else
-				snippet_reader = queryable.GetSnippet (request.QueryTerms, request.Hit, full_text);
+				snippet_reader = queryable.GetSnippet (request.QueryTerms, request.Hit, full_text, ctx_length, snp_length);
 
 			return new SnippetResponse (new SnippetList (full_text, snippet_reader));
 		}

Modified: branches/beagle-rdf/beagled/SnippetFu.cs
==============================================================================
--- branches/beagle-rdf/beagled/SnippetFu.cs	(original)
+++ branches/beagle-rdf/beagled/SnippetFu.cs	Mon Mar 24 21:09:25 2008
@@ -38,7 +38,7 @@
 	
 	public class SnippetFu {
 
-		static public SnippetReader GetSnippet (string[] query_terms, TextReader line_reader, bool full_text)
+		static public SnippetReader GetSnippet (string[] query_terms, TextReader line_reader, bool full_text, int ctx_length, int snp_length)
 		{
 			// FIXME: If the query doesn't have search text (or is null), we should
 			// generate a 'summary snippet'.
@@ -46,24 +46,24 @@
 			if (line_reader == null)
 				return null;
 
-			SnippetReader snippet_reader = new SnippetReader (line_reader, query_terms, full_text);
+			SnippetReader snippet_reader = new SnippetReader (line_reader, query_terms, full_text, ctx_length, snp_length);
 			return snippet_reader;
 		}
 		
-		static public SnippetReader GetSnippetFromFile (string[] query_terms, string filename, bool full_text)
+		static public SnippetReader GetSnippetFromFile (string[] query_terms, string filename, bool full_text, int ctx_length, int snp_length)
 		{
 			FileStream stream = new FileStream (filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
 
-			return GetSnippet (query_terms, new StreamReader (stream), full_text);
+			return GetSnippet (query_terms, new StreamReader (stream), full_text, ctx_length, snp_length);
 		}
 
-		static public SnippetReader GetSnippetFromTextCache (string[] query_terms, string filename, bool full_text)
+		static public SnippetReader GetSnippetFromTextCache (string[] query_terms, string filename, bool full_text, int ctx_length, int snp_length)
 		{
 			TextReader reader = TextCache.UserCache.GetReader (new Uri (filename));
 			if (reader == null)
 				return null;
 			try {
-				return GetSnippet (query_terms, reader, full_text);
+				return GetSnippet (query_terms, reader, full_text, ctx_length, snp_length);
 			} catch (ICSharpCode.SharpZipLib.SharpZipBaseException ex) {
 				Log.Debug ("Unexpected exception '{0}' while extracting snippet for {1}", ex.Message, filename);
 				return null;
@@ -127,19 +127,24 @@
 		// Keep a sliding window of the starting positions of words
 		SlidingWindow sliding_window;
 
-		const int between_snippet_words = 6;
-		const int soft_snippet_limit = 200;
+		private const int context_length_default = 6;
+		private const int snippet_length_default = 200;
 
-		public SnippetReader (TextReader line_reader, string[] query_terms, bool full_text)
+		private int context_length;
+		private int snippet_length;
+
+		public SnippetReader (TextReader line_reader, string[] query_terms, bool full_text, int context_length, int snippet_length)
 		{
 			this.line_reader = line_reader;
 			this.found_snippet_length = 0;
 			this.full_text = full_text;
+			this.context_length = (context_length > 0 ? context_length : context_length_default);
+			this.snippet_length = (snippet_length > 0 ? snippet_length : snippet_length_default);
 
 			if (query_terms == null)
 				return;
 
-			this.sliding_window = new SlidingWindow (between_snippet_words);
+			this.sliding_window = new SlidingWindow (this.context_length);
 
 			// remove stop words from query_terms
 			query_terms_list = new ArrayList (query_terms.Length);
@@ -182,7 +187,7 @@
 			SnippetLine snippet_line;
 			ulong line = 0;
 
-			while (found_snippet_length < soft_snippet_limit) {
+			while (found_snippet_length < snippet_length) {
 				//Console.WriteLine ("Continue with last line ? {0}", continue_line);
 				if (! continue_line) {
 					try {
@@ -273,7 +278,7 @@
 					// We cache the token, so as to avoid stemming it more than once
 					// when considering multiple terms.
 					if (stemmed_token == null) {
-						stemmed_token = LuceneCommon.Stem (token);
+						stemmed_token = LuceneCommon.Stem (token.ToLower ());
 					}
 
 					if (String.Compare ((string) stemmed_terms [i], stemmed_token, true) != 0)
@@ -307,7 +312,7 @@
 					// Add the start pos of the token to the window
 					sliding_window.Add (pos);
 					// If we found a match previously and saw enough following words, stop
-					if (snippet_line != null && snippet_line.Count > 0 && sliding_window.Count == between_snippet_words) {
+					if (snippet_line != null && snippet_line.Count > 0 && sliding_window.Count == context_length) {
 						sliding_window.Reset ();
 						string after_match = text.Substring (prev_match_end_pos, end_pos - prev_match_end_pos);
 						snippet_line.AddNonMatchFragment (after_match);

Modified: branches/beagle-rdf/beagled/SnippetTest.cs
==============================================================================
--- branches/beagle-rdf/beagled/SnippetTest.cs	(original)
+++ branches/beagle-rdf/beagled/SnippetTest.cs	Mon Mar 24 21:09:25 2008
@@ -45,7 +45,7 @@
 
 		SnippetReader snippet_reader;
 		// FIXME: Oops ... does not quit by passing empty line
-		snippet_reader = SnippetFu.GetSnippet (args, Console.In, false); //delegate {
+		snippet_reader = SnippetFu.GetSnippet (args, Console.In, false, -1, -1); //delegate {
 
 		bool first = true;
 		foreach (SnippetLine snippet_line in snippet_reader.GetSnippet ()) {

Modified: branches/beagle-rdf/beagled/StaticQueryable.cs
==============================================================================
--- branches/beagle-rdf/beagled/StaticQueryable.cs	(original)
+++ branches/beagle-rdf/beagled/StaticQueryable.cs	Mon Mar 24 21:09:25 2008
@@ -53,7 +53,7 @@
 			}
 		}
 
-		override public ISnippetReader GetSnippet (string[] query_terms, Hit hit, bool full_text) 
+		override public ISnippetReader GetSnippet (string[] query_terms, Hit hit, bool full_text, int ctx_length, int snp_length) 
 		{
 			if (text_cache == null)
 				return null;
@@ -63,7 +63,7 @@
 			if (reader == null)
 				return null;
 			
-			return SnippetFu.GetSnippet (query_terms, reader, full_text);
+			return SnippetFu.GetSnippet (query_terms, reader, full_text, ctx_length, snp_length);
 		}
 
 		override protected bool HitIsValid (Uri uri)

Modified: branches/beagle-rdf/conf-data/crawl-rules/crawl-manpages
==============================================================================
--- branches/beagle-rdf/conf-data/crawl-rules/crawl-manpages	(original)
+++ branches/beagle-rdf/conf-data/crawl-rules/crawl-manpages	Mon Mar 24 21:09:25 2008
@@ -2,7 +2,7 @@
 
 CRAWL_INDEX_NAME="manpages"
 
-CRAWL_PATHS="/usr/share/man/man1 /usr/share/man/man2 /usr/share/man/man3 /usr/share/man/man4 /usr/share/man/man5 /usr/share/man/man6 /usr/share/man/man7 /usr/share/man/man8 /usr/share/man/man9 /usr/share/man/mann"
+CRAWL_PATHS="/usr/share/man/man1 /usr/share/man/man2 /usr/share/man/man3 /usr/share/man/man4 /usr/share/man/man5 /usr/share/man/man6 /usr/share/man/man7 /usr/share/man/man8 /usr/share/man/man9 /usr/share/man/mann /usr/share/info"
 
 CRAWL_RECURSIVE="yes"
 

Modified: branches/beagle-rdf/conf-data/query-mapping.xml
==============================================================================
--- branches/beagle-rdf/conf-data/query-mapping.xml	(original)
+++ branches/beagle-rdf/conf-data/query-mapping.xml	Mon Mar 24 21:09:25 2008
@@ -13,8 +13,6 @@
     <Mapping QueryKeyword="imagecomment" BeagleProperty="digikam:caption" Tokenize="true">Digikam User comments</Mapping>
     <Mapping QueryKeyword="imagecomment" BeagleProperty="fspot:Description" Tokenize="true">F-Spot User comments</Mapping>
     <Mapping QueryKeyword="speakingto" BeagleProperty="fixme:speakingto" Tokenize="false">Person engaged in conversation</Mapping>
-    <Mapping QueryKeyword="speakingto" BeagleProperty="fixme:speakingto" Tokenize="false">Person engaged in conversation</Mapping>
-    <Mapping QueryKeyword="speakingto" BeagleProperty="fixme:speakingto" Tokenize="false">Person engaged in conversation</Mapping>
     <Mapping QueryKeyword="mailtoaddr" BeagleProperty="parent:fixme:to_address" Tokenize="true" />
     <Mapping QueryKeyword="mailtoaddr" BeagleProperty="fixme:to_address" Tokenize="true">Email address of receipient</Mapping>
     <Mapping QueryKeyword="inattachment" BeagleProperty="parent:fixme:hasAttachments" Tokenize="false">Use 'inattachment:true' for email attachments.</Mapping>
@@ -40,5 +38,7 @@
     <Mapping QueryKeyword="pkggroup" BeagleProperty="pkg:group" Tokenize="true">Group to which the package belongs e.g. System/Configuration/Packaging</Mapping>
     <Mapping QueryKeyword="inarchive" BeagleProperty="fixme:inside_archive" Tokenize="false">Use 'inarchive:true' for files inside an archive.</Mapping>
     <Mapping QueryKeyword="album" BeagleProperty="fixme:album" Tokenize="true">Album name of the music</Mapping>
+    <Mapping QueryKeyword="filename" BeagleProperty="beagle:NoPunctFilename" Tokenize="true">File name</Mapping>
+    <Mapping QueryKeyword="filename" BeagleProperty="beagle:SplitFilename" Tokenize="true">File name</Mapping>
   </Mappings>
 </QueryMapping>

Modified: branches/beagle-rdf/configure.in
==============================================================================
--- branches/beagle-rdf/configure.in	(original)
+++ branches/beagle-rdf/configure.in	Mon Mar 24 21:09:25 2008
@@ -4,7 +4,7 @@
 
 AC_INIT(beagled/BeagleDaemon.cs)
 AC_CANONICAL_SYSTEM
-AM_INIT_AUTOMAKE(beagle, 0.3.3)
+AM_INIT_AUTOMAKE(beagle, 0.3.4)
 
 ########################################################################
 
@@ -66,10 +66,19 @@
   AC_MSG_RESULT([found])
 fi
 
+BEAGLE_DEFINES=""
+
 # check that we have the require version of mono
-PKG_CHECK_MODULES(MONO, mono >= $MONO_REQUIRED) 
 
-BEAGLE_DEFINES=""
+# Temporary: check for mono-1.9
+PKG_CHECK_MODULES(MONO, mono >= 1.9, mono_1_9=yes, mono_1_9=no) 
+if test "x$mono_1_9" = "xno"; then
+	AC_MSG_RESULT([missing mono >= 1.9. Searching for mono >= 1.2.4])
+	PKG_CHECK_MODULES(MONO, mono >= $MONO_REQUIRED) 
+else
+	AC_MSG_RESULT([found mono >= 1.9])
+	BEAGLE_DEFINES="$BEAGLE_DEFINES -define:MONO_1_9"
+fi
 
 # check for various mono DLLs that we need.
 needed_dlls="Mono.Data.Sqlite Mono.Posix System.Data System.Web ICSharpCode.SharpZipLib"
@@ -224,7 +233,12 @@
 ])
 	AC_SUBST(LIBTRAYICON_CFLAGS)
 	AC_SUBST(LIBTRAYICON_LIBS)
-	
+
+	AC_PATH_PROG(MSGFMT, msgfmt, no)
+	if test "x$MSGFMT" = "xno"; then
+		AC_MSG_ERROR([You need to install gettext, or pass --disable-gui to build without GUI support])
+	fi
+
 fi
 
 dnl ----------------------------------------------
@@ -399,14 +413,6 @@
 GMIME_SHARP_PREFIX=`$PKG_CONFIG --variable=prefix gmime-sharp`
 
 dnl ----------------------------------------------
-AC_ARG_ENABLE([bludgeon],
-	AC_HELP_STRING([--disable-bludgeon], [Disable bludgeon testing tool]),
-	enable_bludgeon=$enableval,
-	enable_bludgeon=yes)
-AM_CONDITIONAL(ENABLE_BLUDGEON, test "x$enable_bludgeon" = "xyes")
-
-	
-dnl ----------------------------------------------
 dnl Epiphany Extension
 
 AC_ARG_ENABLE([epiphany-extension],
@@ -633,8 +639,6 @@
 thunderbird-extension/Makefile
 doc/Makefile
 doc/api/Makefile
-bludgeon/Makefile
-RDFAdapter/Makefile
 conf-data/Makefile
 beagle-0.0.pc
 beagle-daemon.pc

Modified: branches/beagle-rdf/search/Beagle.Search/Driver.cs
==============================================================================
--- branches/beagle-rdf/search/Beagle.Search/Driver.cs	(original)
+++ branches/beagle-rdf/search/Beagle.Search/Driver.cs	Mon Mar 24 21:09:25 2008
@@ -124,7 +124,7 @@
 			if (!String.IsNullOrEmpty (query) || !icon_enabled)
 				search.Query (query);
 
-			Bus.Session.Register (new ObjectPath (PATH_NAME), search);
+			Bus.Session.Register (BUS_NAME, new ObjectPath (PATH_NAME), search);
 
 			program.Run ();
 		}

Modified: branches/beagle-rdf/search/Makefile.am
==============================================================================
--- branches/beagle-rdf/search/Makefile.am	(original)
+++ branches/beagle-rdf/search/Makefile.am	Mon Mar 24 21:09:25 2008
@@ -42,7 +42,7 @@
 	$(srcdir)/Beagle.Search.Tiles/Audio.cs			\
 	$(srcdir)/Beagle.Search.Tiles/CApplet.cs		\
 	$(srcdir)/Beagle.Search.Tiles/Calendar.cs		\
-	$(srcdir)/Beagle.Search.Tiles/Contact.cs		\	
+	$(srcdir)/Beagle.Search.Tiles/Contact.cs		\
 	$(srcdir)/Beagle.Search.Tiles/Docbook.cs		\
 	$(srcdir)/Beagle.Search.Tiles/File.cs			\
 	$(srcdir)/Beagle.Search.Tiles/Folder.cs			\

Modified: branches/beagle-rdf/tools/Query.cs
==============================================================================
--- branches/beagle-rdf/tools/Query.cs	(original)
+++ branches/beagle-rdf/tools/Query.cs	Mon Mar 24 21:09:25 2008
@@ -69,8 +69,12 @@
 					   (lastQueryTime - queryStartTime).TotalSeconds);
 		}
 
-		if (verbose && response.NumMatches >= 0)
-			Console.WriteLine ("Returned latest {0} results out of total {1} matches", response.Hits.Count, response.NumMatches);
+		if (verbose) {
+			if (response.NumMatches >= 0)
+				Console.WriteLine ("Returned latest {0} results out of total {1} matches", response.Hits.Count, response.NumMatches);
+			else
+				Console.WriteLine ("Returned latest {0} results", response.Hits.Count);
+		}
 
 		if (! display_hits) {
 			count += response.Hits.Count;

Modified: branches/beagle-rdf/tools/StaticQuery.cs
==============================================================================
--- branches/beagle-rdf/tools/StaticQuery.cs	(original)
+++ branches/beagle-rdf/tools/StaticQuery.cs	Mon Mar 24 21:09:25 2008
@@ -147,13 +147,15 @@
 		Queryable queryable = QueryDriver.GetQueryable (request.Hit.Source);
 		ISnippetReader snippet_reader;
 		bool full_text = request.FullText;
+		int ctx_length = request.ContextLength;
+		int snp_length = request.SnippetLength;
 
 		if (queryable == null) {
 			Console.WriteLine ("SnippetExecutor: No queryable object matches '{0}'", request.Hit.Source);
-			snippet_reader = new SnippetReader (null, null, false);
+			snippet_reader = new SnippetReader (null, null, false, -1, -1);
 			full_text = false;
 		} else
-			snippet_reader = queryable.GetSnippet (request.QueryTerms, request.Hit, full_text);
+			snippet_reader = queryable.GetSnippet (request.QueryTerms, request.Hit, full_text, ctx_length, snp_length);
 
 		List<SnippetLine> snippetlines = new List<SnippetLine> ();
 		if (snippet_reader == null)



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