2016-03-01 Carlos Garnacho Release 1.7.4 tracker-miner-fs: Ignore git repositories by default Any file with a .git folder will be ignored. Feel free to change this in gsettings if you found this useful. tracker-miner-fs: Ignore #*# (vim backup) files by default Update to FTS5 Our old stale copy of the FTS3/4 module is now deleted, replaced by a shinier FTS5 embedded module. If at configure time we detect that SQLite doesn't offer the FTS5 module, we will load our own, just as we used to do with FTS4. FTS5 brings a few differences in the ways it's meant to be extended, the tokenizer has been updated to cope with the differences. Also, FTS5 offers no offsets() builtin function, nor matchinfo() which we used to implement ranking. It offers though ways to implement additional functions, and builtin rank support which can be tweaked to achieve the same functional results than we did. Other than that, the ways to interact with the FTS virtual table are roughly similar to those in FTS4, insertions and deletions have been updated to do things the FTS5 way. Since it's not worth to bump the database format (data is reproducted from the journal, so we drop some embedded data such as nie:plainTextContent), the nco:hobby property has been modified to no longer be fulltext indexed, AFAIK there's no users ever setting/ accessing that, and the FTS properties change will trigger the regeneration of the FTS view and virtual tables, resulting in a seamless update to FTS5. However, we don't leave completely unscathed from the fts3_tokenizer() change. Since the older FTS3/4 tokenizer is not registered, we can't just drop the older FTS table. So it is left dangling and never accessed again, in favor of the newer fts5 table. This is obviously not a problem when creating the database from scratch. In the way, a few bugs were found. per-property weights in ranking were being given in a scrambled way (although stable across database generations). And deletion of FTS properties (or entire rows) could result in the tokens not being fully removed from the FTS table, resulting in confused searches. These are now fixed. Impact to users of tracker should be none. All the FTS Sparql-to-SQL translation has been updated to just use FTS5 syntax and tables. libtracker-data: Handle tracker:fulltextIndexed changes We no longer have a reason to deem this change incompatible. Since no actual text is stored in the FTS tables, and it merely updates its tokenization info from the original class tables, we can just drop this info and reconstruct at will. So there's no longer need to consider tracker:fulltextIndexed changes as incompatible. 2016-02-27 Cédric Valmary Updated Occitan translation 2016-02-26 Marinus Schraal tracker-extract: Use tracker-guarantee to ensure a title in playlists Resort to the basename in order to guarantee a title. https://bugzilla.gnome.org/show_bug.cgi?id=761466 tracker-extract: Fix year-only date extraction in gstreamer module ISO 8601 takes hours and months starting at 1. Passing 0 results in wrong parsing of the resulting date string. https://bugzilla.gnome.org/show_bug.cgi?id=761236 2016-02-25 Carlos Garnacho libtracker-miner: lower g_critical() severity And check for another condition where it might happen (if tracker_crawler_start() happens on a non-existing dir). The severity of this situation is not really critical, so it's been lowered to a g_debug(). libtracker-miner: Cancel crawling/querying on both cancellation paths When a currently inspected folder is cancelled, we could either jump to the next pending dir (if any) or the next crawling root, we must cancel these two operations prior to both. libtracker-miner: Use g_file_equal instead of direct comparison We might be passed a non-canonical directory to file_notifier_current_root_check_remove_directory(), g_file_equal will be safer. libtracker-miner: Plug fd leak when cancelling crawlers early The enumerators would just be freed but not closed, leaking fds in the underlying implementations. libtracker-direct: Handle cancellation Always go through the async path, and manage the cancellable in both the IO scheduler and the jobs. If we try to handle cancellation in the direct path, the cursor will be unref'ed (and try to grab the DB lock again) while the lock is held. There's no way cancellation can work while holding the lock, so just removed this path. 2016-02-24 Carlos Garnacho libtracker-miner: Do not break ordering with bulk operations The way bulk operations break the ordering of the sparql updates may bring certain glitches. eg. if a delete (bulk) operation happens on a folder while the sparql buffer already contains updates corresponding to files within that folder, the way we order operations results in the delete happening first, and the inserts/updates happening afterwards. This may leave the database in inconsistent states. So make bulk operations a 1 file thing, this could maybe be smarter and try to compress consecutive similar operations, but there's not much added value in it. Plus, the bulk operations we issue in the miner would never match that criteria. Because we no longer break the ordering with bulk operations, things like the error map are no longer necessary, so we can remove some icky code here. BulkOperationMerge and its functions could be further simplified, that's left for a later cleanup. libtracker-miner: Cancel ops in current buffers if a delete affects the file If a folder being deleted affects operations currently in the currently issued tasks (eg. those we emitted ::process-file on) and writeback buffers, those operations would still attempt to proceed, with different degrees of success. libtracker-miner: Stop crawling if a delete op affects the current directory Otherwise the crawler will still attempt to go through the processed folders, adding unnecesary processing and potentially leaving inconsistent state in the TrackerFileSystem if a similar file layout appeared in the future. libtracker-miner: Fix TrackerFileNotifier cancellable maintenance Resetting and reusing is not deemed safe. It is better to create new cancellables and let the old ones be last unref'ed after async callbacks finish. libtracker-miner: Delete directory altogether on interrupted crawling We can't tell the extracted data is complete or valid, so give up on that data entirely. libtracker-miner: Set uri in warning It's useful to know the file it comes from.