Re: [Tracker] [Patch] Correct locales support
- From: Jamie McCracken <jamiemcc blueyonder co uk>
- To: Marcus Fritzsch <fritschy googlemail com>
- Cc: tracker-list gnome org
- Subject: Re: [Tracker] [Patch] Correct locales support
- Date: Sat, 02 Sep 2006 19:33:12 +0100
Marcus Fritzsch wrote:
On 8/31/06, Jamie McCracken <jamiemcc blueyonder co uk> wrote:
Marcus Fritzsch wrote:
> Just a fast shot ;)
>
> On 8/31/06, Laurent Aguerreche <laurent aguerreche free fr> wrote:
>> Le mercredi 30 août 2006 à 17:01 +0100, Jamie McCracken a écrit :
>> > Laurent Aguerreche wrote:
>> > > Le mardi 29 août 2006 à 12:39 +0100, Jamie McCracken a écrit :
>> > >> Laurent Aguerreche wrote:
>> > >>
>> > >>> They correctly appear with 'g_async_queue_try_pop
>> > >>> (tracker->file_process_queue)' during process but are not
>> indexed since:
>> > >>> - info->mtime == info->indextime == 0...
>> > >>> - action is TRACKER_ACTION_FILE_CHECK
>> > >>> so index_file() is not called.
>> > >>>
>> > >> this is likely a problem in the stat call - it wont find the file
>> with a
>> > >> non-utf8 filename in those cases
>> > >>
>> > >> The solution would be to use g_filename_from_utf8
>> > >>
>>
(http://developer.gnome.org/doc/API/2.0/glib/glib-Character-Set-Conversion.html)
>>
>> > >> to convert utf8 filename back to user's encoding before
>> calling stat
>> > >> and before calling the metadata extraction stuff.
>> > >>
>> > >> its tricky because we must avoid passing any non utf8 string
to any
>> > >> other glib function
>> > >>
>> > >> I dont have time at the moment to fix these as I am at work so
>> patches
>> > >> welcome.
>> > >
>> > > I almost finished.
>> > >
>> >
>> > great!
>> >
>> > > Basically all calls to system (lstat, stat,
>> g_file_test(G_FILE_EXISTS),
>> > > etc.) need to use strings in locale, not in UTF-8 in trackerd.
>> >
>> > yes - we used g_filename_to_utf8 in tracker so you must use
>> > g_filename_from_utf8 to do the reverse
>> >
>> > >
>> > > For clients, any sent string must be encoded in utf8.
>> > >
>> > > It seems there is still some issues with tracker-extract but they
>> should
>> > > go quickly.
>> >
>> > tracker-extract uses glib and libextractor also uses glib so I dont
>> know
>> > whether it needs changing - please experiment for whats best
>> >
>> > >
>> > >
>> > > But sometimes I wonder where to declare variables or why many
>> lines are
>> > > left empty!
>> > > Do you want to declare variables as close as their first use or at
>> > > beginning of block only?
>> > > It should be interesting to define some coding style rules and
follow
>> > > them.
>> >
>> > if they are used throughout the function then they should
obviously be
>> > declared at the top. If they are local to a small code block then I
>> dont
>> > mind
>> >
>> > lines are left empty for neatness
>> >
>> > coding rules are to follow whats there already (lower case functions
>> and
>> > vars, 8 space tab indent, "{" on same line as if/while block etc)
>> >
>> > thanks for investing your time in this area!
>> >
>>
>>
>> This is the patch.
>>
>> * many g_filename_to_utf8() or g_locale_to_utf8() added;
>> * setlocale(LC_ALL, "") added to get a working g_get_charset() in any
>> program;
>> * some g_utf8_validate() removed when g_locale_to_utf8() or
>> g_filename_to_utf8() need to be called;
>> * some code refactoring in clients;
>> * some headers removed or added in clients...;
>> * realpath(path,NULL) instead of realpath(path,tmp) in clients because
>> some systems are not limited with deep of directories. NULL
handling is
>> a GNU extension.
>> * in tracker-extract.c, there were lines like:
>> EXTRACTOR_removeEmptyKeywords (keywords);
>> but this function modify keywords list and send a new one! So it
needs
>> to be use that way:
>> keywords = EXTRACTOR_removeEmptyKeywords (keywords);
>> * stat() => g_stat(), lstat() => g_lstat()
>> * some tests removed:
>>
>> char **foo;
>> for (foo = bar; *foo; foo++) {
>> if (*foo) { /* it is always true... */
>> ...
>> }
>> }
>>
>>
>> Now Tracker seems to fully work on non UTF-8 systems but FAM
backend has
>> some problems:
>> - let it index and all your files and extract metadata;
>> - then do something like:
>> $ echo 'foo' > bar
>> - fam_callback() is called but I can only see plenty of lines:
>>
>> tracker_exec_sql failed: Table 'tmpfiles' already exists [Call
>> GetPendingFiles()]
>> tracker_exec_sql failed: Table 'tmpfiles' already exists [Call
>> GetPendingFiles()]
>> tracker_exec_sql failed: Table 'tmpfiles' already exists [Call
>> GetPendingFiles()]
>> etc.
>>
>> and it never stops... Is is amazing to see that this bug doesn't
happen
>> if I add breakpoints into fam_callback() and then run it in gdb...
>
> My actual question: is using
>
> static FAMConnection fc;
>
> really useful as
>
> if (&fc != NULL) ...
>
> Which is used on lines 102 and 131 in src/trackerd/tracker-fam.c
>
yes good spot - they are redundant.
Huh, lucky me ;)
Sorry for that short (and patch-less) mail, I have quite little time
currently.
now fixed in CVS
--
Mr Jamie McCracken
http://jamiemcc.livejournal.com/
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]