2007/7/5, Daniel Labella de la Cruz <[EMAIL PROTECTED]>:
Hi Joe, thank you again for the response... Now I can store extended attribute to indexable, but I found one problem, I think maybe is a bug... Beagle deletes extended attributes introduced by user by example: beagle-shutdown tocuh test.txt setfattr -n user.test -v test_attribute test.txt export BEAGLE_EXERCISE_THE_DOG=1 beagled beagle-query --verbose test.txt -- In this step I can see the xattr:test = test_attribute -- if I do getfattr test.txt I see user.test attribute vim test.txt -- put some chars to file and save bealge-shutdown export BEAGLE_EXERCISE_THE_DOG=1 beagled beagle-query --verbose test.txt -- Now I don't see the property -- if I do getfattr test.txt I don't see user.test attribute and now one more thing, when I add a new extended attribute to a file, beagle don't reindex de file due to that modification don't implies date modification or last access modification. I try to find a way to do it... an the last, the working code to add extended attributes (only for the first index) It only works if the file exists and have extended attributes before launch beagle daemon. How to test: beagle-shutdown touch test.txt setfattr -n user.test -v test_attribute test.txt export BEAGLE_EXERCISE_THE_DOG=1 beagle-query --verbose test.txt here is the code: FileSystemQueryable.cs - Added function public static void AddExtendedPropertiesToIndexable(Indexable indexable, string path) { //Util.ExtendedAttribute.Get(path,XProperties[i]))); string[] XProperties; string[] XPropertyNames; string XValue=""; string XProperty=""; XProperties=Util.ExtendedAttribute.List (path); indexable.AddProperty(Beagle.Property.New ("xattr:XPropCount",""+XProperties.Length)); indexable.AddProperty(Beagle.Property.New("xattr:Path",path)); for( int i=0; i < XProperties.Length ; i++) { XPropertyNames = XProperties[i].Split('.'); XProperty = XPropertyNames[ XPropertyNames.Length-1]; XValue = Util.ExtendedAttribute.Get (path,XProperties[i],true); indexable.AddProperty(Beagle.Property.New("xattr:"+XProperty,XValue)); } } then a I make a call on the next function in the same file... public static void AddStandardPropertiesToIndexable (Indexable indexable, string name, Guid parent_id, bool mutable) { foreach (Property std_prop in Property.StandardFileProperties (name, mutable)) indexable.AddProperty (std_prop); AddExtendedPropertiesToIndexable (indexable, name); if (parent_id == Guid.Empty) return; string str = GuidFu.ToUriString (parent_id); // We use the uri here to recycle terms in the index, // since each directory's uri will already be indexed. Property prop = Property.NewUnsearched ( Property.ParentDirUriPropKey, str); prop.IsMutable = mutable; indexable.AddProperty (prop); } the I modified ExtendedAttribute.cs added List function public static string[] List (string path) { string[] XPropertiesNames; if(! FileSystem.Exists(path)) throw new IOException (path); Syscall.listxattr (path,out XPropertiesNames); return XPropertiesNames; } modification to Get function and added one new call public static string Get (string path, string name) { return Get(path,name,false); } public static string Get (string path, string name,bool getByAbsoluteName) { if (! FileSystem.Exists (path)) throw new IOException (path); if (! getByAbsoluteName) name = AddPrefix (name); byte[] buffer; long size = Syscall.lgetxattr (path, name, out buffer); if (size <= 0) return null; return encoding.GetString (buffer); } that's all, sorry for this long email... Thank you for all!!! 2007/7/2, Joe Shaw <[EMAIL PROTECTED]>: > > Hi, > > Sorry for the delay, I'm digging myself out from a mountain of > neglected email. :( > > On 6/19/07, Daniel Labella de la Cruz <[EMAIL PROTECTED]> wrote: > > Hello!!, I have a problem, I'm trying to put the code on > > FIleSystemQueryable.cs but I don't know if I'm doing somethig wrong or > it > > just don't work.... > > I added this code on ExtendedAttribute.cs inside Util directory for > listing > > extended properties... > > > > public static ArrayList List (string path) > > { > > string[] XPropertiesNames; > > ArrayList XPropertiesList=new ArrayList(); > > if(! FileSystem.Exists(path)) > > throw new IOException (path); > > Syscall.listxattr (path,out XPropertiesNames); > > for (int i=0 ; i<XPropertiesNames.Length ; i++) > > { > > XPropertiesList.Add (XPropertiesNames[i]); > > } > > return XPropertiesList; > > } > > I don't see anything wrong with this function, but I would probably > change it to just return string[], since you wouldn't ever need to > change the return value. > > > and then added the following method to FileSystemQueryable.cs > > > > public static void AddExtendedProperties > (Indexable indexable, > > > > string path) > > { > > ArrayList XPropertyList=new ArrayList(); > > string XPropertyValue; > > string[] PropertyName; > > XPropertyList=Util.ExtendedAttribute.List(path); > > foreach (string XPropertyName in XPropertyList) > > { > > > > XPropertyValue=Util.ExtendedAttribute.Get(path,XPropertyName); > > PropertyName=XPropertyName.Split('.'); > > indexable.AddProperty(Beagle.Property.New > > ("xattr:"+XPropertyValue, > > > > PropertyName[PropertyName.Length-1])); > > > > } > > } > > I'm not really sure what you're trying to use for key-value here. > You're taking the value of the xattr and using it as part of the > property key. If I have an xattr "user.testing.key" = "value", your > Beagle property will be "xattr:value" = "key", and I'm pretty sure > that's not what you want. > > > and then I make a call to this method on AddFile method > > . > > . > > . > > if (indexable != null) { > > Scheduler.Task task; > > //a call to add extended properties > > AddExtendedProperties (indexable,path); > > // > > task = NewAddTask (indexable); > > task.Priority = Scheduler.Priority.Immediate; > > ThisScheduler.Add (task); > > } > > . > > . > > . > > after this, it compile ok, but I don't know if I'm doing somethig > wrong > > querying the extended attributes (maybe I'm querying with wrong > syntax) or > > simply the code I put doesn't work... > > I think the item I mentioned above is why searches aren't working for > you. You might want to search for other things you know will match > (like the file name, or a unique word contained inside the document) > and use beagle-query --verbose. That will give you the list of all > the properties on the document. > > Joe >
_______________________________________________ Dashboard-hackers mailing list Dashboard-hackers@gnome.org http://mail.gnome.org/mailman/listinfo/dashboard-hackers