Hello community,

here is the log from the commit of package tracker-miners for openSUSE:Factory 
checked in at 2020-02-22 19:02:20
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/tracker-miners (Old)
 and      /work/SRC/openSUSE:Factory/.tracker-miners.new.26092 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "tracker-miners"

Sat Feb 22 19:02:20 2020 rev:17 rq:777065 version:2.3.2

Changes:
--------
--- /work/SRC/openSUSE:Factory/tracker-miners/tracker-miners.changes    
2020-01-28 10:53:13.608894336 +0100
+++ /work/SRC/openSUSE:Factory/.tracker-miners.new.26092/tracker-miners.changes 
2020-02-22 19:02:32.973884630 +0100
@@ -1,0 +2,18 @@
+Tue Feb 18 23:41:31 UTC 2020 - Bjørn Lie <[email protected]>
+
+- Update to version 2.3.2:
+  + Blocked parsing of image/x-dds image files, which were
+    previously being passed to GStreamer and triggering system
+    lockups for some people.
+  + Fixed incorrect MIME type for .raw images, which were
+    previously being passed to GStreamer and triggering system
+    lockups for some people.
+  + Improved how the MP3 extractor calculates durations of variable
+    bitrate MP3s, which fixes incorrect durations being shown in
+    GNOME Music.
+  + Fixed a bug in the GStreamer writeback module.
+  + Fix race condition that might leave tracker-miner-fs paused
+    after a writeback operation.
+  + Updated translations.
+
+-------------------------------------------------------------------

Old:
----
  tracker-miners-2.3.1.tar.xz

New:
----
  tracker-miners-2.3.2.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ tracker-miners.spec ++++++
--- /var/tmp/diff_new_pack.QUym5A/_old  2020-02-22 19:02:34.597887775 +0100
+++ /var/tmp/diff_new_pack.QUym5A/_new  2020-02-22 19:02:34.605887791 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package tracker-miners
 #
-# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2020 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -17,7 +17,7 @@
 
 
 Name:           tracker-miners
-Version:        2.3.1
+Version:        2.3.2
 Release:        0
 Summary:        Various miners for Tracker
 License:        GPL-2.0-or-later

++++++ tracker-miners-2.3.1.tar.xz -> tracker-miners-2.3.2.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tracker-miners-2.3.1/NEWS 
new/tracker-miners-2.3.2/NEWS
--- old/tracker-miners-2.3.1/NEWS       2019-10-12 18:04:20.519945000 +0200
+++ new/tracker-miners-2.3.2/NEWS       2020-02-19 00:18:41.586637500 +0100
@@ -1,3 +1,18 @@
+NEW in 2.3.2 - 2020-02-18
+=========================
+
+  * Blocked parsing of image/x-dds image files, which were previously
+    being passed to GStreamer and triggering system lockups for some people
+  * Fixed incorrect MIME type for .raw images, which were previously
+    being passed to GStreamer and triggering system lockups for some people
+  * Improved how the MP3 extractor calculates durations of variable bitrate
+    MP3s, which fixes incorrect durations being shown in GNOME Music.
+  * Fixed a bug in the GStreamer writeback module.
+  * Fix race condition that might leave tracker-miner-fs paused after a
+    writeback operation.
+
+Translations: ms
+
 NEW in 2.3.1 - 2019-10-12
 =========================
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tracker-miners-2.3.1/meson.build 
new/tracker-miners-2.3.2/meson.build
--- old/tracker-miners-2.3.1/meson.build        2019-10-12 18:04:20.524945000 
+0200
+++ new/tracker-miners-2.3.2/meson.build        2020-02-19 00:18:41.588637600 
+0100
@@ -1,5 +1,5 @@
 project('tracker-miners', 'c',
-        version: '2.3.1',
+        version: '2.3.2',
         meson_version: '>=0.47')
 
 gnome = import('gnome')
@@ -360,7 +360,7 @@
 conf.set('libdir', libdir)
 conf.set('libexecdir', join_paths(get_option('prefix'), 
get_option('libexecdir')))
 conf.set('prefix', get_option('prefix'))
-conf.set('TRACKER_API_VERSION', '1.0')
+conf.set('TRACKER_API_VERSION', tracker_api_version)
 conf.set('VERSION', meson.project_version())
 
 # Configure functional tests to run completely from source tree.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tracker-miners-2.3.1/po/LINGUAS 
new/tracker-miners-2.3.2/po/LINGUAS
--- old/tracker-miners-2.3.1/po/LINGUAS 2019-10-12 18:04:20.525945200 +0200
+++ new/tracker-miners-2.3.2/po/LINGUAS 2020-02-19 00:18:41.589637500 +0100
@@ -36,6 +36,7 @@
 lv
 mk
 ml
+ms
 nb
 nds
 ne
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tracker-miners-2.3.1/po/ms.po 
new/tracker-miners-2.3.2/po/ms.po
--- old/tracker-miners-2.3.1/po/ms.po   1970-01-01 01:00:00.000000000 +0100
+++ new/tracker-miners-2.3.2/po/ms.po   2020-02-19 00:18:41.627638600 +0100
@@ -0,0 +1,577 @@
+# Malay translation for tracker-miners.
+# Copyright (C) 2019 tracker-miners's COPYRIGHT HOLDER
+# This file is distributed under the same license as the tracker-miners 
package.
+# abuyop <[email protected]>, 2019.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: tracker-miners tracker-miners-2.3\n"
+"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/tracker-miners/issues\n";
+"POT-Creation-Date: 2019-12-20 19:36+0000\n"
+"PO-Revision-Date: 2019-12-30 03:02+0800\n"
+"Language-Team: Malay <[email protected]>\n"
+"Language: ms\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"Last-Translator: abuyop <[email protected]>\n"
+"X-Generator: Poedit 2.0.6\n"
+
+#: ../data/org.freedesktop.Tracker.Extract.gschema.xml.h:1
+#: ../data/org.freedesktop.Tracker.Miner.Files.gschema.xml.h:1
+#: ../data/org.freedesktop.Tracker.Writeback.gschema.xml.h:1
+msgid "Log verbosity"
+msgstr "Log kejelaan"
+
+#: ../data/org.freedesktop.Tracker.Extract.gschema.xml.h:2
+#: ../data/org.freedesktop.Tracker.Miner.Files.gschema.xml.h:2
+#: ../data/org.freedesktop.Tracker.Writeback.gschema.xml.h:2
+msgid "Log verbosity."
+msgstr "Log kejelaan."
+
+#: ../data/org.freedesktop.Tracker.Extract.gschema.xml.h:3
+#: ../data/org.freedesktop.Tracker.Miner.Files.gschema.xml.h:5
+msgid "Scheduler priority when idle"
+msgstr "Prioriti penjadual ketika melahu"
+
+#: ../data/org.freedesktop.Tracker.Extract.gschema.xml.h:4
+#: ../data/org.freedesktop.Tracker.Miner.Files.gschema.xml.h:6
+msgid ""
+"The scheduler is the kernel component that decides which runnable "
+"application will be executed by the CPU next. Each application has an "
+"associated scheduling policy and priority."
+msgstr ""
+"Penjadual ialah komponen kernel yang menentukan aplikasi boleh jalan manakah "
+"akan dilakukan berikutnya oleh CPU. Setiap aplikasi mempunyai satu dasar dan "
+"prioriti penjadualan berkaitan."
+
+#: ../data/org.freedesktop.Tracker.Extract.gschema.xml.h:5
+msgid "Max bytes to extract"
+msgstr "Bait maksimum untuk diesktrak"
+
+#: ../data/org.freedesktop.Tracker.Extract.gschema.xml.h:6
+msgid "Maximum number of UTF-8 bytes to extract."
+msgstr "Bilangan maksimum bait UTF-8 untuk diekstrak."
+
+#: ../data/org.freedesktop.Tracker.Extract.gschema.xml.h:7
+msgid "Wait for FS miner to be done before extracting"
+msgstr "Tunggu pelombong FS selesai sebelum mengekstrak"
+
+#: ../data/org.freedesktop.Tracker.Extract.gschema.xml.h:8
+msgid ""
+"When true, tracker-extract will wait for tracker-miner-fs to be done "
+"crawling before extracting meta-data. This option is useful on constrained "
+"environment where it is important to list files as fast as possible and can "
+"wait to get meta-data later."
+msgstr ""
+"Bila benar, tracker-extract akan tunggu tracker-miner-fs selesai  merangka "
+"sebelum mengekstrak meta-data. Pilihan ini berguna pada persekitaran "
+"terkekang yang mana adalah penting dapat menyenaraikan fail sepantas yang "
+"boleh dan tunggu dapatkan meta-data kemudian."
+
+#: ../data/org.freedesktop.Tracker.Miner.Files.gschema.xml.h:3
+msgid "Initial sleep"
+msgstr "Tidur awalan"
+
+#: ../data/org.freedesktop.Tracker.Miner.Files.gschema.xml.h:4
+msgid "Initial sleep time, in seconds."
+msgstr "Tempoh tidur awalan, dalam saat."
+
+#: ../data/org.freedesktop.Tracker.Miner.Files.gschema.xml.h:7
+msgid "Throttle"
+msgstr "Dikit"
+
+#: ../data/org.freedesktop.Tracker.Miner.Files.gschema.xml.h:8
+msgid "Indexing speed, the higher the slower."
+msgstr "Mengindeks kelajuan, lebih tinggi lebih perlahan."
+
+#: ../data/org.freedesktop.Tracker.Miner.Files.gschema.xml.h:9
+msgid "Low disk space limit"
+msgstr "Had ruang cakera rendah"
+
+#: ../data/org.freedesktop.Tracker.Miner.Files.gschema.xml.h:10
+msgid ""
+"Disk space threshold in percent at which to pause indexing, or -1 to disable."
+msgstr ""
+"Ambang ruang cakera dalam peratus yang menjeda pengindeksan, atau -1 untuk "
+"lumpuhkan."
+
+#: ../data/org.freedesktop.Tracker.Miner.Files.gschema.xml.h:11
+msgid "Crawling interval"
+msgstr "Sela merangkak"
+
+#: ../data/org.freedesktop.Tracker.Miner.Files.gschema.xml.h:12
+msgid ""
+"Interval in days to check whether the filesystem is up to date in the "
+"database. 0 forces crawling anytime, -1 forces it only after unclean "
+"shutdowns, and -2 disables it entirely."
+msgstr ""
+"Sela dalam hari untuk memeriksa sama ada sistem fail telah dikemas kini "
+"dalam pangkalan data. 0 paksa merangkak pada bila-bila masa, -1 hanya paksa "
+"jika selepas dimatikan tidak mengikut prosedur, dan -2 lumpuhkan seluruhnya."
+
+#: ../data/org.freedesktop.Tracker.Miner.Files.gschema.xml.h:13
+msgid "Removable devices’ data permanence threshold"
+msgstr "Ambang keteguhan data peranti mudah alih"
+
+#: ../data/org.freedesktop.Tracker.Miner.Files.gschema.xml.h:14
+msgid ""
+"Threshold in days after which files from removables devices will be removed "
+"from database if not mounted. 0 means never, maximum is 365."
+msgstr ""
+"Ambang dalam hari selepas fail-fail dari peranti mudah alih akan dibuang "
+"dari pangkalan data jika tidak dilekap. 0 bermaksud tidak sesekali, maksimum "
+"ialah 365."
+
+#: ../data/org.freedesktop.Tracker.Miner.Files.gschema.xml.h:15
+msgid "Enable monitors"
+msgstr "Benarkan pemantau"
+
+#: ../data/org.freedesktop.Tracker.Miner.Files.gschema.xml.h:16
+msgid "Set to false to completely disable any file monitoring"
+msgstr ""
+"Tetapkan pada palus untuk sepenuhnya lumpuhkan mana-mana pemantauan fail"
+
+#: ../data/org.freedesktop.Tracker.Miner.Files.gschema.xml.h:17
+msgid "Enable writeback"
+msgstr "Benarkan tulis-balik"
+
+#: ../data/org.freedesktop.Tracker.Miner.Files.gschema.xml.h:18
+msgid "Set to false to completely disable any file writeback"
+msgstr ""
+"Tetapkan pada palsu untuk sepenuhnya lumpuhkan mana-mana tulis-balik fail"
+
+#: ../data/org.freedesktop.Tracker.Miner.Files.gschema.xml.h:19
+msgid "Index removable devices"
+msgstr "Indek peranti-peranti mudah alih"
+
+#: ../data/org.freedesktop.Tracker.Miner.Files.gschema.xml.h:20
+msgid ""
+"Set to true to enable indexing mounted directories for removable devices."
+msgstr ""
+"Tetapkan pada benar untuk membenarkan pengindeksan direktori-direktori "
+"terlekap untuk peranti-peranti mudah alih."
+
+#: ../data/org.freedesktop.Tracker.Miner.Files.gschema.xml.h:21
+msgid "Index optical discs"
+msgstr "Indeks cakera optik"
+
+#: ../data/org.freedesktop.Tracker.Miner.Files.gschema.xml.h:22
+msgid ""
+"Set to true to enable indexing CDs, DVDs, and generally optical media (if "
+"removable devices are not indexed, optical discs won’t be either)"
+msgstr ""
+"Tetapkan pada benar untuk membenarkan pengindeksan CD, DVD, dan secara "
+"umumnya media optik (jika peranti-peranti mudah alih tidak diindekskan, "
+"cakera optik juga begitu)"
+
+#: ../data/org.freedesktop.Tracker.Miner.Files.gschema.xml.h:23
+msgid "Index when running on battery"
+msgstr "Indeks ketika berjalan dengan kuasa bateri"
+
+#: ../data/org.freedesktop.Tracker.Miner.Files.gschema.xml.h:24
+msgid "Set to true to index while running on battery"
+msgstr ""
+"Tetapkan pada benar untuk mengindeks ketika berjalan dengan kuasa bateri"
+
+#: ../data/org.freedesktop.Tracker.Miner.Files.gschema.xml.h:25
+msgid "Perform initial indexing when running on battery"
+msgstr "Buat pengindeksan awal ketika berjalan dengan kuasa bateri"
+
+#: ../data/org.freedesktop.Tracker.Miner.Files.gschema.xml.h:26
+msgid "Set to true to index while running on battery for the first time only"
+msgstr ""
+"Tetapkan pada benar untuk mengindeks ketika berjalan dengan kuasa bateri "
+"buat pertama kali sahaja"
+
+#: ../data/org.freedesktop.Tracker.Miner.Files.gschema.xml.h:27
+msgid "Directories to index recursively"
+msgstr "Direktori-direktori untuk diindeks secara rekursif"
+
+#: ../data/org.freedesktop.Tracker.Miner.Files.gschema.xml.h:28
+msgid ""
+"List of directories to index recursively, Special values include: &amp;"
+"DESKTOP, &amp;DOCUMENTS, &amp;DOWNLOAD, &amp;MUSIC, &amp;PICTURES, &amp;"
+"PUBLIC_SHARE, &amp;TEMPLATES, &amp;VIDEOS.\n"
+"\n"
+"See /etc/xdg/user-dirs.defaults and $HOME/.config/user-dirs.default"
+msgstr ""
+"Senarai direktori untuk diindeks secara rekursif, Nilai khas termasuklah "
+"&amp;DESKTOP, &amp;DOCUMENTS, &amp;DOWNLOAD, &amp;MUSIC, &amp;PICTURES, &amp;"
+"PUBLIC_SHARE, &amp;TEMPLATES, &amp;VIDEOS.\n"
+"\n"
+"Sila rujuk /etc/xdg/user-dirs.defaults dan $HOME/.config/user-dirs.default"
+
+#: ../data/org.freedesktop.Tracker.Miner.Files.gschema.xml.h:31
+msgid "Directories to index non-recursively"
+msgstr "Direktori-direktori untuk diindeks secara bukan-rekursif"
+
+#: ../data/org.freedesktop.Tracker.Miner.Files.gschema.xml.h:32
+msgid ""
+"List of directories to index without inspecting subfolders, Special values "
+"include: &amp;DESKTOP, &amp;DOCUMENTS, &amp;DOWNLOAD, &amp;MUSIC, &amp;"
+"PICTURES, &amp;PUBLIC_SHARE, &amp;TEMPLATES, &amp;VIDEOS.\n"
+"\n"
+"See /etc/xdg/user-dirs.defaults and $HOME/.config/user-dirs.default"
+msgstr ""
+"Senarai direktori untuk diindeks tanpa memeriksa sub-folder, Nilai khas "
+"termasuklah: &amp;DESKTOP, &amp;DOCUMENTS, &amp;DOWNLOAD, &amp;MUSIC, &amp;"
+"PICTURES, &amp;PUBLIC_SHARE, &amp;TEMPLATES, &amp;VIDEOS.\n"
+"\n"
+"Sila rujuk /etc/xdg/user-dirs.defaults and $HOME/.config/user-dirs.default"
+
+#: ../data/org.freedesktop.Tracker.Miner.Files.gschema.xml.h:35
+msgid "Ignored files"
+msgstr "Fail-fail diabaikan"
+
+#: ../data/org.freedesktop.Tracker.Miner.Files.gschema.xml.h:36
+msgid "List of file patterns to avoid"
+msgstr "Senarai pola fail yang dihindari"
+
+#: ../data/org.freedesktop.Tracker.Miner.Files.gschema.xml.h:37
+msgid "Ignored directories"
+msgstr "Direktori-direktori diabaikan"
+
+#: ../data/org.freedesktop.Tracker.Miner.Files.gschema.xml.h:38
+msgid "List of directories to avoid"
+msgstr "Senarai direktori-direktori yang dihindari"
+
+#: ../data/org.freedesktop.Tracker.Miner.Files.gschema.xml.h:39
+msgid "Ignored directories with content"
+msgstr "Direktori-direktori yang diabaikan dengan kandungan"
+
+#: ../data/org.freedesktop.Tracker.Miner.Files.gschema.xml.h:40
+msgid "Avoid any directory containing a file blacklisted here"
+msgstr ""
+"Hindari mana-mana direktori yang mengandungi satu fail tersenarai-hitam di "
+"sini"
+
+#: ../src/libtracker-miners-common/tracker-utils.c:90
+msgid "unknown time"
+msgstr "masa tidak diketahui"
+
+#: ../src/libtracker-miners-common/tracker-utils.c:104
+#: ../src/libtracker-miners-common/tracker-utils.c:155
+msgid "less than one second"
+msgstr "kurang dari satu saat"
+
+#. Translators: this is %d days
+#: ../src/libtracker-miners-common/tracker-utils.c:119
+#, c-format
+msgid " %dd"
+msgstr " %dh"
+
+#. Translators: this is %2.2d hours
+#: ../src/libtracker-miners-common/tracker-utils.c:123
+#, c-format
+msgid " %2.2dh"
+msgstr " %2.2dj"
+
+#. Translators: this is %2.2d minutes
+#: ../src/libtracker-miners-common/tracker-utils.c:127
+#, c-format
+msgid " %2.2dm"
+msgstr " %2.2dm"
+
+#. Translators: this is %2.2d seconds
+#: ../src/libtracker-miners-common/tracker-utils.c:131
+#, c-format
+msgid " %2.2ds"
+msgstr " %2.2ds"
+
+#: ../src/libtracker-miners-common/tracker-utils.c:135
+#, c-format
+msgid " %d day"
+msgid_plural " %d days"
+msgstr[0] "%d hari"
+
+#: ../src/libtracker-miners-common/tracker-utils.c:139
+#, c-format
+msgid " %2.2d hour"
+msgid_plural " %2.2d hours"
+msgstr[0] " %2.2d jam"
+
+#: ../src/libtracker-miners-common/tracker-utils.c:143
+#, c-format
+msgid " %2.2d minute"
+msgid_plural " %2.2d minutes"
+msgstr[0] " %2.2d minit"
+
+#: ../src/libtracker-miners-common/tracker-utils.c:147
+#, c-format
+msgid " %2.2d second"
+msgid_plural " %2.2d seconds"
+msgstr[0] " %2.2d saat"
+
+#: ../src/miners/fs/org.freedesktop.Tracker1.Miner.Files.service.in.in.h:1
+msgid "File System"
+msgstr "Sistem Fail"
+
+#: ../src/miners/fs/org.freedesktop.Tracker1.Miner.Files.service.in.in.h:2
+msgid "File system data miner"
+msgstr "Pelombong data sistem fail"
+
+#: ../src/miners/fs/tracker-main.c:73 ../src/miners/rss/tracker-main.c:43
+#: ../src/tracker-writeback/tracker-main.c:55
+msgid ""
+"Logging, 0 = errors only, 1 = minimal, 2 = detailed and 3 = debug (default=0)"
+msgstr ""
+"Pengelogan, 0 = ralat sahaja, 1 = minimum, 2 = terperinci dan 3 = "
+"nyahpepijat (lalai=0)"
+
+#: ../src/miners/fs/tracker-main.c:78
+msgid "Initial sleep time in seconds, 0->1000 (default=15)"
+msgstr "tempoh tidur awalan dalam saat, 0->1000 (lalai=15)"
+
+#: ../src/miners/fs/tracker-main.c:83
+msgid "Runs until all configured locations are indexed and then exits"
+msgstr ""
+"Jalankan sehingga semua lokasi terkonfigur telah diindeks dan kemudian keluar"
+
+#: ../src/miners/fs/tracker-main.c:87
+msgid "Checks if FILE is eligible for being mined based on configuration"
+msgstr "Periksa jika FAIL sesuai dilombong berdasarkan konfigurasi"
+
+#: ../src/miners/fs/tracker-main.c:88 ../src/tracker-extract/tracker-main.c:88
+msgid "FILE"
+msgstr "FAIL"
+
+#: ../src/miners/fs/tracker-main.c:91 ../src/miners/rss/tracker-main.c:57
+#: ../src/tracker-extract/tracker-main.c:102
+msgid "Runs for a specific domain ontology"
+msgstr "Jalan dalam satu ontologi domain khusus"
+
+#: ../src/miners/fs/tracker-main.c:95 ../src/tracker-extract/tracker-main.c:106
+#: ../src/tracker-writeback/tracker-main.c:51
+msgid "Displays version information"
+msgstr "Papar maklumat versi"
+
+#: ../src/miners/fs/tracker-main.c:540
+#, c-format
+msgid "Data object “%s” currently exists"
+msgstr "Objek data \"%s\" buat masa ini wujud"
+
+#: ../src/miners/fs/tracker-main.c:541
+#, c-format
+msgid "Data object “%s” currently does not exist"
+msgstr "Objek data \"%s\" buat masa ini tidak wujud"
+
+#: ../src/miners/fs/tracker-main.c:556
+msgid "Directory is eligible to be mined (based on rules)"
+msgstr "Direktori adalah sesuai dilombongkan (berdasarkan pada peraturan)"
+
+#: ../src/miners/fs/tracker-main.c:557
+msgid "Directory is NOT eligible to be mined (based on rules)"
+msgstr ""
+"Direktori adalah TIDAK sesuai dilombongkan (berdasarkan pada peraturan)"
+
+#: ../src/miners/fs/tracker-main.c:577
+msgid "Directory is eligible to be mined (based on contents)"
+msgstr "Direktori adalah sesuai dilombongkan (berdasarkan pada kandungan)"
+
+#: ../src/miners/fs/tracker-main.c:578
+msgid "Directory is NOT eligible to be mined (based on contents)"
+msgstr ""
+"Direktori adalah TIDAK sesuai dilombongkan (berdasarkan pada kandungan)"
+
+#: ../src/miners/fs/tracker-main.c:625
+msgid "Directory is eligible to be monitored (based on config)"
+msgstr "Direktori adalah sesuai dilombongkan (berdasarkan pada konfig)"
+
+#: ../src/miners/fs/tracker-main.c:626
+msgid "Directory is NOT eligible to be monitored (based on config)"
+msgstr "Direktori adalah TIDAK sesuai dilombongkan (berdasarkan pada konfig)"
+
+#: ../src/miners/fs/tracker-main.c:630
+msgid "File is eligible to be monitored (based on config)"
+msgstr "Fail adalah sesuai dipantau (berdasarkan pada konfig)"
+
+#: ../src/miners/fs/tracker-main.c:631
+msgid "File is NOT eligible to be monitored (based on config)"
+msgstr "Fail adalah TIDAK sesuai dipantau (berdasarkan pada konfig)"
+
+#: ../src/miners/fs/tracker-main.c:635
+msgid "File or Directory is eligible to be monitored (based on config)"
+msgstr "Fail atau Direktori adalah sesuai dipantau (berdasarkan pada konfig)"
+
+#: ../src/miners/fs/tracker-main.c:636
+msgid "File or Directory is NOT eligible to be monitored (based on config)"
+msgstr ""
+"Fail atau Direktori adalah TIDAK sesuai dipantau (berdasarkan pada konfig)"
+
+#: ../src/miners/fs/tracker-main.c:651
+msgid "File is eligible to be mined (based on rules)"
+msgstr "Fail adalah sesuai dilombongkan (berdasarkan pada peraturan)"
+
+#: ../src/miners/fs/tracker-main.c:652
+msgid "File is NOT eligible to be mined (based on rules)"
+msgstr "Fail adalah TIDAK sesuai dilombongkan (berdasarkan pada peraturan)"
+
+#: ../src/miners/fs/tracker-main.c:661
+msgid "Would be indexed"
+msgstr "Perlu diindeks"
+
+#: ../src/miners/fs/tracker-main.c:662 ../src/miners/fs/tracker-main.c:664
+msgid "Yes"
+msgstr "Ya"
+
+#: ../src/miners/fs/tracker-main.c:662 ../src/miners/fs/tracker-main.c:664
+msgid "No"
+msgstr "Tidak"
+
+#: ../src/miners/fs/tracker-main.c:663
+msgid "Would be monitored"
+msgstr "Mahu dipantau"
+
+#. Translators: this messagge will apper immediately after the
+#. * usage string - Usage: COMMAND <THIS_MESSAGE>
+#.
+#: ../src/miners/fs/tracker-main.c:793
+msgid "— start the tracker indexer"
+msgstr "— mulakan pengindeks penjejak"
+
+#: ../src/miners/fs/tracker-miner-fs.desktop.in.in.h:1
+msgid "Tracker File System Miner"
+msgstr "Pelombong Sistem Fail Penjejak"
+
+#: ../src/miners/fs/tracker-miner-fs.desktop.in.in.h:2
+msgid "Crawls and processes files on the file system"
+msgstr "Merangkak dan proses fail-fail dalam sistem fail"
+
+#: ../src/miners/rss/org.freedesktop.Tracker1.Miner.RSS.service.in.in.h:1
+msgid "RSS/ATOM Feeds"
+msgstr "Suapan-suapan RSS/ATOM"
+
+#: ../src/miners/rss/org.freedesktop.Tracker1.Miner.RSS.service.in.in.h:2
+msgid "Fetch RSS/ATOM Feeds"
+msgstr "Dapatkan Suapan-suapan RSS/ATOM"
+
+#. Translators: this is a "feed" as in RSS
+#: ../src/miners/rss/tracker-main.c:49
+msgid "Add feed"
+msgstr "Tambah suapan"
+
+#: ../src/miners/rss/tracker-main.c:50
+msgid "URL"
+msgstr "URL"
+
+#: ../src/miners/rss/tracker-main.c:53
+msgid "Title to use (must be used with --add-feed)"
+msgstr "Tajuk yang digunakan (mesti digunakan dengan --add-feed)"
+
+#. Translators: this messagge will apper immediately after the
+#. * usage string - Usage: COMMAND <THIS_MESSAGE>
+#.
+#: ../src/miners/rss/tracker-main.c:93
+msgid "— start the feeds indexer"
+msgstr "— mulakan pengindeks suapan"
+
+#: ../src/miners/rss/tracker-main.c:127
+msgid "Could not establish a connection to Tracker"
+msgstr "Tidak dapat jalinkan satu sambungan dengan Penjejak"
+
+#: ../src/miners/rss/tracker-main.c:128
+msgid "No error given"
+msgstr "Tiada ralat diberi"
+
+#: ../src/miners/rss/tracker-main.c:155
+msgid "Could not add feed"
+msgstr "Tidak dapat tambah suapan"
+
+#: ../src/miners/rss/tracker-miner-rss.desktop.in.in.h:1
+msgid "Tracker RSS/ATOM Feeds Miner"
+msgstr "Pelombong Suapan RSS/ATOM Penjejak"
+
+#: ../src/miners/rss/tracker-miner-rss.desktop.in.in.h:2
+msgid "Fetch RSS/ATOM feeds"
+msgstr "Dapatan suapan-suapan RSS/ATOM"
+
+#: 
../src/tracker-extract/org.freedesktop.Tracker1.Miner.Extract.service.in.in.h:1
+msgid "Extractor"
+msgstr "Pengekstrak"
+
+#: 
../src/tracker-extract/org.freedesktop.Tracker1.Miner.Extract.service.in.in.h:2
+msgid "Metadata extractor"
+msgstr "Pengekstrak data meta"
+
+#: ../src/tracker-extract/tracker-extract.c:683
+msgid "Metadata extraction failed"
+msgstr "Pengekstrakan data meta gagal"
+
+#: ../src/tracker-extract/tracker-extract.c:763
+msgid "No metadata or extractor modules found to handle this file"
+msgstr ""
+"Tiada data meta atau modul pengekstrak ditemui untuk mengendalikan fail ini"
+
+#: ../src/tracker-extract/tracker-main.c:82
+msgid ""
+"Logging, 0 = errors only, 1 = minimal, 2 = detailed and 3 = debug (default = "
+"0)"
+msgstr ""
+"Pengelogan, 0 = ralat sahaja, 1 = minimum, 2 = terperinci dan 3 = "
+"nyahpepijat (lalai = 0)"
+
+#: ../src/tracker-extract/tracker-main.c:87
+msgid "File to extract metadata for"
+msgstr "Fail untuk diekstrak data metanya"
+
+#: ../src/tracker-extract/tracker-main.c:91
+msgid "MIME type for file (if not provided, this will be guessed)"
+msgstr "Jenis MIME bagi fail (jika tidak disediakan, ia akan diteka)"
+
+#: ../src/tracker-extract/tracker-main.c:92
+msgid "MIME"
+msgstr "MIME"
+
+#: ../src/tracker-extract/tracker-main.c:95
+msgid "Force a module to be used for extraction (e.g. “foo” for “foo.so”)"
+msgstr ""
+"Paksa satu modul yang digunakan untuk pengekstrakan (iaitu “foo” untuk “foo."
+"so”)"
+
+#: ../src/tracker-extract/tracker-main.c:96
+msgid "MODULE"
+msgstr "MODUL"
+
+#: ../src/tracker-extract/tracker-main.c:98
+msgid "Output results format: “sparql”, “turtle” or “json-ld”"
+msgstr "Format keputusan output: “sparql”, “turtle” atau “json-ld”"
+
+#: ../src/tracker-extract/tracker-main.c:99
+msgid "FORMAT"
+msgstr "FORMAT"
+
+#: ../src/tracker-extract/tracker-main.c:238
+#, c-format
+msgid "Unsupported serialization format “%s”\n"
+msgstr "Format penyirian \"%s\" tidak disokong\n"
+
+#. Translators: this message will appear immediately after the
+#. usage string - Usage: COMMAND [OPTION]... <THIS_MESSAGE>
+#: ../src/tracker-extract/tracker-main.c:327
+msgid "— Extract file meta data"
+msgstr "— Ekstrak data meta fail"
+
+#: ../src/tracker-extract/tracker-main.c:342
+msgid "Filename and mime type must be provided together"
+msgstr "Nama fail dan jenis mime mesti disediakan bersama-sama"
+
+#: ../src/tracker-extract/tracker-extract.desktop.in.in.h:1
+msgid "Tracker Metadata Extractor"
+msgstr "Pengekstrak Data Meta Penjejak"
+
+#: ../src/tracker-extract/tracker-extract.desktop.in.in.h:2
+msgid "Extracts metadata from local files"
+msgstr "Ekstrak data meta dari fail-fail setempat"
+
+#: ../src/tracker-writeback/tracker-main.c:62
+msgid "Disable shutting down after 30 seconds of inactivity"
+msgstr "Lumpuhkan penutupan komputer selepas 30 saat ketidakaktifan"
+
+#. Translators: this message will appear immediately after the
+#. * usage string - Usage: COMMAND <THIS_MESSAGE>
+#.
+#: ../src/tracker-writeback/tracker-main.c:98
+msgid "— start the tracker writeback service"
+msgstr "— mulakan perkhidmatan tulis-balik penjejak"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/tracker-miners-2.3.1/src/libtracker-extract/tracker-module-manager.c 
new/tracker-miners-2.3.2/src/libtracker-extract/tracker-module-manager.c
--- old/tracker-miners-2.3.1/src/libtracker-extract/tracker-module-manager.c    
2019-10-12 18:04:20.732951200 +0200
+++ new/tracker-miners-2.3.2/src/libtracker-extract/tracker-module-manager.c    
2020-02-19 00:18:41.652639400 +0100
@@ -28,8 +28,10 @@
 #define SHUTDOWN_FUNCTION  "tracker_extract_module_shutdown"
 
 typedef struct {
+       const gchar *rule_path;
        const gchar *module_path; /* intern string */
-       GList *patterns;
+       GList *allow_patterns;
+       GList *block_patterns;
        GStrv fallback_rdf_types;
 } RuleInfo;
 
@@ -65,12 +67,13 @@
 }
 
 static gboolean
-load_extractor_rule (GKeyFile  *key_file,
-                     GError   **error)
+load_extractor_rule (GKeyFile    *key_file,
+                     const gchar *rule_path,
+                     GError     **error)
 {
        GError *local_error = NULL;
-       gchar *module_path, **mimetypes;
-       gsize n_mimetypes, i;
+       gchar *module_path, **allow_mimetypes, **block_mimetypes;
+       gsize n_allow_mimetypes, n_block_mimetypes, i;
        RuleInfo rule = { 0 };
 
        module_path = g_key_file_get_string (key_file, "ExtractorRule", 
"ModulePath", &local_error);
@@ -102,9 +105,9 @@
                module_path = tmp;
        }
 
-       mimetypes = g_key_file_get_string_list (key_file, "ExtractorRule", 
"MimeTypes", &n_mimetypes, &local_error);
+       allow_mimetypes = g_key_file_get_string_list (key_file, 
"ExtractorRule", "MimeTypes", &n_allow_mimetypes, &local_error);
 
-       if (!mimetypes) {
+       if (!allow_mimetypes) {
                g_free (module_path);
 
                if (local_error) {
@@ -114,20 +117,33 @@
                return FALSE;
        }
 
+       /* This key is optional */
+       block_mimetypes = g_key_file_get_string_list (key_file, 
"ExtractorRule", "BlockMimeTypes", &n_block_mimetypes, &local_error);
+
+       rule.rule_path = g_strdup (rule_path);
+
        rule.fallback_rdf_types = g_key_file_get_string_list (key_file, 
"ExtractorRule", "FallbackRdfTypes", NULL, NULL);
 
        /* Construct the rule */
        rule.module_path = g_intern_string (module_path);
 
-       for (i = 0; i < n_mimetypes; i++) {
+       for (i = 0; i < n_allow_mimetypes; i++) {
+               GPatternSpec *pattern;
+
+               pattern = g_pattern_spec_new (allow_mimetypes[i]);
+               rule.allow_patterns = g_list_prepend (rule.allow_patterns, 
pattern);
+       }
+
+       for (i = 0; i < n_block_mimetypes; i++) {
                GPatternSpec *pattern;
 
-               pattern = g_pattern_spec_new (mimetypes[i]);
-               rule.patterns = g_list_prepend (rule.patterns, pattern);
+               pattern = g_pattern_spec_new (block_mimetypes[i]);
+               rule.block_patterns = g_list_prepend (rule.block_patterns, 
pattern);
        }
 
        g_array_append_val (rules, rule);
-       g_strfreev (mimetypes);
+       g_strfreev (allow_mimetypes);
+       g_strfreev (block_mimetypes);
        g_free (module_path);
 
        return TRUE;
@@ -189,7 +205,7 @@
                key_file = g_key_file_new ();
 
                if (!g_key_file_load_from_file (key_file, path, 
G_KEY_FILE_NONE, &error) ||
-                   !load_extractor_rule (key_file, &error)) {
+                   !load_extractor_rule (key_file, path, &error)) {
                        g_warning ("  Could not load extractor rule file '%s': 
%s", name, error->message);
                        g_clear_error (&error);
                } else {
@@ -241,15 +257,27 @@
        /* Apply the rules! */
        for (i = 0; i < rules->len; i++) {
                GList *l;
+               gboolean matched_allow_pattern = FALSE, matched_block_pattern = 
FALSE;
 
                info = &g_array_index (rules, RuleInfo, i);
 
-               for (l = info->patterns; l; l = l->next) {
+               for (l = info->allow_patterns; l; l = l->next) {
+                       if (g_pattern_match (l->data, len, mimetype, reversed)) 
{
+                               matched_allow_pattern = TRUE;
+                               break;
+                       }
+               }
+
+               for (l = info->block_patterns; l; l = l->next) {
                        if (g_pattern_match (l->data, len, mimetype, reversed)) 
{
-                               /* Match, store for future queries and return */
-                               mimetype_rules = g_list_prepend 
(mimetype_rules, info);
+                               matched_block_pattern = TRUE;
+                               break;
                        }
                }
+
+               if (matched_allow_pattern && !matched_block_pattern) {
+                       mimetype_rules = g_list_prepend (mimetype_rules, info);
+               };
        }
 
        if (mimetype_rules) {
@@ -262,6 +290,29 @@
        return mimetype_rules;
 }
 
+/**
+ * tracker_extract_module_manager_get_matching_rules:
+ * @mimetype: a MIME type string
+ *
+ * Returns: (transfer none): a list of extract .rule files that support the 
given type.
+ **/
+GList *
+tracker_extract_module_manager_get_matching_rules (const gchar *mimetype)
+{
+       GList *rule_list, *l;
+       GList *rule_path_list = NULL;
+
+       rule_list = lookup_rules (mimetype);
+
+       for (l = rule_list; l; l = l->next) {
+               RuleInfo *info = l->data;
+
+               rule_path_list = g_list_prepend (rule_path_list, (char 
*)(info->rule_path));
+       }
+
+       return g_list_reverse (rule_path_list);
+}
+
 GStrv
 tracker_extract_module_manager_get_fallback_rdf_types (const gchar *mimetype)
 {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/tracker-miners-2.3.1/src/libtracker-extract/tracker-module-manager.h 
new/tracker-miners-2.3.2/src/libtracker-extract/tracker-module-manager.h
--- old/tracker-miners-2.3.1/src/libtracker-extract/tracker-module-manager.h    
2019-10-12 18:04:20.734951300 +0200
+++ new/tracker-miners-2.3.2/src/libtracker-extract/tracker-module-manager.h    
2020-02-19 00:18:41.653639600 +0100
@@ -47,6 +47,8 @@
 TrackerMimetypeInfo * tracker_extract_module_manager_get_mimetype_handlers  
(const gchar *mimetype);
 GStrv                 tracker_extract_module_manager_get_fallback_rdf_types 
(const gchar *mimetype);
 
+GList *tracker_extract_module_manager_get_matching_rules (const gchar 
*mimetype);
+
 GModule * tracker_mimetype_info_get_module (TrackerMimetypeInfo          *info,
                                             TrackerExtractMetadataFunc   
*extract_func);
 gboolean  tracker_mimetype_info_iter_next  (TrackerMimetypeInfo          
*info);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/tracker-miners-2.3.1/src/libtracker-miners-common/tracker-file-utils.c 
new/tracker-miners-2.3.2/src/libtracker-miners-common/tracker-file-utils.c
--- old/tracker-miners-2.3.1/src/libtracker-miners-common/tracker-file-utils.c  
2019-10-12 18:04:20.739951400 +0200
+++ new/tracker-miners-2.3.2/src/libtracker-miners-common/tracker-file-utils.c  
2020-02-19 00:18:41.659639600 +0100
@@ -253,7 +253,7 @@
 
 #define __bsize f_frsize
 
-#if HAVE_STATVFS64
+#ifdef HAVE_STATVFS64
 #define __statvfs statvfs64
 #else
 #define __statvfs statvfs
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/tracker-miners-2.3.1/src/libtracker-miners-common/tracker-sched.c 
new/tracker-miners-2.3.2/src/libtracker-miners-common/tracker-sched.c
--- old/tracker-miners-2.3.1/src/libtracker-miners-common/tracker-sched.c       
2019-10-12 18:04:20.740951500 +0200
+++ new/tracker-miners-2.3.2/src/libtracker-miners-common/tracker-sched.c       
2020-02-19 00:18:41.661639700 +0100
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2011, Nokia <[email protected]>
+ * Copyright (C) 2020, Sam Thursfield <[email protected]>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -21,49 +22,52 @@
 
 #ifdef __linux__
 
-#include <errno.h>
-#include <sched.h>
+#include <pthread.h>
 
 #include "tracker-sched.h"
 
+/* Sets the priority of the current thread to SCHED_IDLE.
+ *
+ * Threads spawned from a SCHED_IDLE thread will inherit the same priority,
+ * so you just need to call this function when the main thread starts to
+ * set priority for the whole process.
+ */
 gboolean
 tracker_sched_idle (void)
 {
        struct sched_param sp;
+       int result, policy;
 
-       /* Set process scheduling parameters:
-        * This is used so we don't steal scheduling priority from
-        * the most important applications - like the phone
-        * application which has a real time requirement here. This
-        * is detailed in Nokia bug #95573
-        */
-       g_message ("Setting scheduler policy to SCHED_IDLE");
-
-       if (sched_getparam (0, &sp) == 0) {
-               if (sched_setscheduler (0, SCHED_IDLE, &sp) != 0) {
-//LCOV_EXCL_START
-                       const gchar *str = g_strerror (errno);
+       result = pthread_getschedparam (pthread_self (), &policy, &sp);
+
+       if (result == 0) {
+               result = pthread_setschedparam (pthread_self(), SCHED_IDLE, 
&sp);
+       }
 
-                       g_warning ("Could not set scheduler policy, %s",
-                                  str ? str : "no error given");
+       if (result == 0) {
+               g_message ("Set scheduler policy to SCHED_IDLE");
 
-                       return FALSE;
-               }
+               return TRUE;
        } else {
-               const gchar *str = g_strerror (errno);
+               const gchar *str = g_strerror (result);
 
-               g_warning ("Could not get scheduler policy, %s",
-                          str ? str : "no error given");
+               g_message ("Error setting scheduler policy: %s", str ? str : 
"no error given");
 
                return FALSE;
        }
-//LCOV_EXCL_END
-
-       return TRUE;
 }
 
 #else /* __linux__ */
 
+/* Although pthread_setschedparam() should exist on any POSIX compliant OS,
+ * the SCHED_IDLE policy is Linux-specific. The POSIX standard only requires
+ * the existence of realtime and 'other' policies.
+ *
+ * We could set the priority to 0. On FreeBSD the default priority is already
+ * 0, and this may be true on other platforms, so we currently don't bother.
+ * See https://gitlab.gnome.org/GNOME/tracker-miners/merge_requests/140 for
+ * more discussion.
+ */
 #include <glib.h>
 
 #include "tracker-sched.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/tracker-miners-2.3.1/src/libtracker-miners-common/tracker-seccomp.c 
new/tracker-miners-2.3.2/src/libtracker-miners-common/tracker-seccomp.c
--- old/tracker-miners-2.3.1/src/libtracker-miners-common/tracker-seccomp.c     
2019-10-12 18:04:20.741951500 +0200
+++ new/tracker-miners-2.3.2/src/libtracker-miners-common/tracker-seccomp.c     
2020-02-19 00:18:41.662639600 +0100
@@ -114,6 +114,7 @@
        ALLOW_RULE (rt_sigprocmask);
        ALLOW_RULE (sched_yield);
        ALLOW_RULE (sched_getaffinity);
+       ERROR_RULE (sched_setattr, EPERM);
        ALLOW_RULE (nanosleep);
        ALLOW_RULE (waitid);
        ALLOW_RULE (waitpid);
@@ -138,7 +139,6 @@
        /* Descriptors */
        ALLOW_RULE (close);
        ALLOW_RULE (read);
-       ALLOW_RULE (pread64);
        ALLOW_RULE (lseek);
        ALLOW_RULE (_llseek);
        ALLOW_RULE (fadvise64);
@@ -209,6 +209,14 @@
                              SCMP_CMP(2, SCMP_CMP_MASKED_EQ, O_RDWR, O_RDWR)) 
< 0)
                goto out;
 
+       /* Syscalls may differ between libcs */
+#if !defined(__GLIBC__)
+       ALLOW_RULE (rt_sigreturn);
+       ALLOW_RULE (readv);
+#else
+       ALLOW_RULE (pread64);
+#endif
+
        g_debug ("Loading seccomp rules.");
 
        if (seccomp_load (ctx) >= 0) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/tracker-miners-2.3.1/src/miners/fs/tracker-miner-files.c 
new/tracker-miners-2.3.2/src/miners/fs/tracker-miner-files.c
--- old/tracker-miners-2.3.1/src/miners/fs/tracker-miner-files.c        
2019-10-12 18:04:20.754952000 +0200
+++ new/tracker-miners-2.3.2/src/miners/fs/tracker-miner-files.c        
2020-02-19 00:18:41.670640000 +0100
@@ -286,31 +286,10 @@
                           GFile                   *source_file)
 {
        TrackerMinerFiles *mf = TRACKER_MINER_FILES (fs);
-       GCancellable *cancellable;
 
        switch (type) {
        case TRACKER_MINER_FS_EVENT_CREATED:
-               break;
        case TRACKER_MINER_FS_EVENT_UPDATED:
-               /* If the file is in the writeback task pool, this is the
-                * file update applying it, so the event should be filtered
-                * out.
-                */
-               if (g_hash_table_lookup_extended (mf->private->writeback_tasks, 
file,
-                                                 NULL, (gpointer*) 
&cancellable)) {
-                       if (!cancellable) {
-                               /* The task was already notified, we can remove
-                                * it now, so later updates will be processed.
-                                */
-                               g_hash_table_remove 
(mf->private->writeback_tasks, file);
-                               sync_writeback_pause_state (mf);
-                       }
-
-                       /* There is a writeback task, pending or satisfied.
-                        * Either way, this update should be ignored.
-                        */
-                       return TRUE;
-               }
                break;
        case TRACKER_MINER_FS_EVENT_DELETED:
                writeback_remove_recursively (mf, file);
@@ -907,10 +886,12 @@
                priv->grace_period_timeout_id = 0;
        }
 
-       g_signal_handlers_disconnect_by_func (priv->extract_watchdog,
-                                             on_extractor_lost,
-                                             NULL);
-       g_clear_object (&priv->extract_watchdog);
+       if (priv->extract_watchdog) {
+               g_signal_handlers_disconnect_by_func (priv->extract_watchdog,
+                                                     on_extractor_lost,
+                                                     NULL);
+               g_clear_object (&priv->extract_watchdog);
+       }
 
        if (priv->config) {
                g_signal_handlers_disconnect_by_func (priv->config,
@@ -3595,10 +3576,6 @@
                g_free (uri);
        }
 
-       /* Drop the cancellable, it will be detected on the next file
-        * update in miner_files_filter_event().
-        */
        g_hash_table_steal (mf->private->writeback_tasks, file);
-       g_hash_table_insert (mf->private->writeback_tasks, file, NULL);
        g_object_unref (cancellable);
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tracker-miners-2.3.1/src/tracker-extract/10-raw.rule 
new/tracker-miners-2.3.2/src/tracker-extract/10-raw.rule
--- old/tracker-miners-2.3.1/src/tracker-extract/10-raw.rule    2019-10-12 
18:04:20.763952300 +0200
+++ new/tracker-miners-2.3.2/src/tracker-extract/10-raw.rule    2020-02-19 
00:18:41.678640100 +0100
@@ -1,4 +1,4 @@
 [ExtractorRule]
 ModulePath=libextract-raw.so
-MimeTypes=image/x-dcraw;image/x-adobe-dng;image/x-canon-cr2;image/x-canon-crw;image/x-epson-erf;image/x-fuji-raf;image/x-minolta-mrw;image/x-nikon-nef;image/x-olympus-orf;image/x-panasonic-raw;image/x-pentax-pef;image/x-raw;image/x-samsung-raw;image/x-sigma-x3f;image/x-sony-arw;image/x-sony-srf;image/x-sony-sr2;
+MimeTypes=image/x-dcraw;image/x-adobe-dng;image/x-canon-cr2;image/x-canon-crw;image/x-epson-erf;image/x-fuji-raf;image/x-minolta-mrw;image/x-nikon-nef;image/x-olympus-orf;image/x-panasonic-rw;image/x-pentax-pef;image/x-raw;image/x-samsung-raw;image/x-sigma-x3f;image/x-sony-arw;image/x-sony-srf;image/x-sony-sr2;
 FallbackRdfTypes=nfo:Image;nmm:Photo;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/tracker-miners-2.3.1/src/tracker-extract/90-gstreamer-image-generic.rule 
new/tracker-miners-2.3.2/src/tracker-extract/90-gstreamer-image-generic.rule
--- 
old/tracker-miners-2.3.1/src/tracker-extract/90-gstreamer-image-generic.rule    
    2019-10-12 18:04:20.764952200 +0200
+++ 
new/tracker-miners-2.3.2/src/tracker-extract/90-gstreamer-image-generic.rule    
    2020-02-19 00:18:41.679640300 +0100
@@ -1,4 +1,5 @@
 [ExtractorRule]
 ModulePath=libextract-gstreamer.so
 MimeTypes=image/*;
+BlockMimeTypes=image/x-dds;
 FallbackRdfTypes=nfo:Image;nmm:Photo;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/tracker-miners-2.3.1/src/tracker-extract/tracker-extract-mp3.c 
new/tracker-miners-2.3.2/src/tracker-extract/tracker-extract-mp3.c
--- old/tracker-miners-2.3.1/src/tracker-extract/tracker-extract-mp3.c  
2019-10-12 18:04:20.772952600 +0200
+++ new/tracker-miners-2.3.2/src/tracker-extract/tracker-extract-mp3.c  
2020-02-19 00:18:41.684640400 +0100
@@ -950,6 +950,43 @@
        return TRUE;
 }
 
+static gboolean
+mp3_parse_xing_header (const gchar          *data,
+                       size_t                frame_pos,
+                       gchar                 mpeg_version,
+                       gint                  n_channels,
+                       guint32              *nr_frames)
+{
+       guint32 field_flags;
+       size_t pos;
+       guint xing_header_offset;
+
+       if (mpeg_version == MPEG_V1) {
+               xing_header_offset = (n_channels == 1) ? 21: 36;
+       } else {
+               xing_header_offset = (n_channels == 1) ? 13: 21;
+       }
+
+       pos = frame_pos + xing_header_offset;
+
+       /* header starts with "Xing" or "Info" */
+       if ((data[pos] == 0x58 && data[pos+1] == 0x69 && data[pos+2] == 0x6E && 
data[pos+3] == 0x67) ||
+           (data[pos] == 0x49 && data[pos+1] == 0x6E && data[pos+2] == 0x46 && 
data[pos+3] == 0x6F)) {
+               g_debug ("XING header found");
+       } else {
+               return FALSE;
+       }
+
+       /* Try to extract the number of frames if the frames field flag is set 
*/
+       pos += 4;
+       field_flags = extract_uint32 (&data[pos]);
+       if ((field_flags & 0x0001) > 0) {
+               *nr_frames = extract_uint32 (&data[pos+4]);
+       }
+
+       return TRUE;
+}
+
 /*
  * For the MP3 frame header description, see
  * http://www.mp3-tech.org/programmer/frame_header.html
@@ -978,6 +1015,7 @@
        guint frames = 0;
        size_t pos = 0;
        gint n_channels;
+       guint32 xing_nr_frames = 0;
 
        pos = seek_pos;
 
@@ -1076,18 +1114,29 @@
                return FALSE;
        }
 
-       tracker_resource_set_string (resource, "nfo:codec", "MPEG");
-
        n_channels = ((header & ch_mask) == ch_mask) ? 1 : 2;
 
+       /* If the file is encoded in variable bit mode (VBR),
+          try to get the number of frames from the xing header
+          to compute the file duration.  */
+       if (vbr_flag) {
+               mp3_parse_xing_header (data, seek_pos, mpeg_ver, n_channels, 
&xing_nr_frames);
+       }
+
+       tracker_resource_set_string (resource, "nfo:codec", "MPEG");
+
        tracker_resource_set_int (resource, "nfo:channels", n_channels);
 
        avg_bps /= frames;
 
-       if ((!vbr_flag && frames > VBR_THRESHOLD) || (frames > 
MAX_FRAMES_SCAN)) {
+       if (vbr_flag && xing_nr_frames > 0) {
+               /* If the file is encoded with variable bitrate mode (VBR)
+                  and the number of frame is known */
+               length = spfp8 * 8 * xing_nr_frames / sample_rate;
+       } else if ((!vbr_flag && frames > VBR_THRESHOLD) || (frames > 
MAX_FRAMES_SCAN)) {
                /* If not all frames scanned
                 * Note that bitrate is always > 0, checked before */
-               length = (filedata->size - filedata->id3v2_size) / (avg_bps ? 
avg_bps : bitrate) / 125;
+               length = (filedata->size - filedata->id3v2_size) / (avg_bps ? 
avg_bps : (bitrate / 1000)) / 125;
        } else {
                /* Note that sample_rate is always > 0, checked before */
                length = spfp8 * 8 * frames / sample_rate;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/tracker-miners-2.3.1/src/tracker-writeback/tracker-writeback-gstreamer.c 
new/tracker-miners-2.3.2/src/tracker-writeback/tracker-writeback-gstreamer.c
--- 
old/tracker-miners-2.3.1/src/tracker-writeback/tracker-writeback-gstreamer.c    
    2019-10-12 18:04:20.782952800 +0200
+++ 
new/tracker-miners-2.3.2/src/tracker-writeback/tracker-writeback-gstreamer.c    
    2020-02-19 00:18:41.690640400 +0100
@@ -847,7 +847,7 @@
 {
        gchar *artist_urn, *val, *query;
 
-       query = g_strdup_printf ("SELECT ?albumArtist WHERE {<%s> 
nmm:albumArtist ?albumName}", urn);
+       query = g_strdup_printf ("SELECT ?albumArtist WHERE {<%s> 
nmm:albumArtist ?albumArtist}", urn);
        artist_urn = writeback_gstreamer_get_from_query (connection, urn, 
query, "album artist");
        val = writeback_gstreamer_get_artist_name (connection, artist_urn);
        g_free(query);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/tracker-miners-2.3.1/tests/libtracker-extract/meson.build 
new/tracker-miners-2.3.2/tests/libtracker-extract/meson.build
--- old/tracker-miners-2.3.1/tests/libtracker-extract/meson.build       
2019-10-12 18:04:20.960958000 +0200
+++ new/tracker-miners-2.3.2/tests/libtracker-extract/meson.build       
2020-02-19 00:18:41.732641700 +0100
@@ -1,5 +1,6 @@
 libtracker_extract_tests = [
     'extract-info',
+    'module-manager',
     'guarantee',
     'utils',
     'xmp',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/tracker-miners-2.3.1/tests/libtracker-extract/test-extract-rules/90-audio-generic.rule
 
new/tracker-miners-2.3.2/tests/libtracker-extract/test-extract-rules/90-audio-generic.rule
--- 
old/tracker-miners-2.3.1/tests/libtracker-extract/test-extract-rules/90-audio-generic.rule
  1970-01-01 01:00:00.000000000 +0100
+++ 
new/tracker-miners-2.3.2/tests/libtracker-extract/test-extract-rules/90-audio-generic.rule
  2020-02-19 00:18:41.733641900 +0100
@@ -0,0 +1,4 @@
+[ExtractorRule]
+ModulePath=TEST_MODULE_AUDIO
+MimeTypes=audio/*;
+FallbackRdfTypes=nfo:Audio;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/tracker-miners-2.3.1/tests/libtracker-extract/test-extract-rules/90-image-generic.rule
 
new/tracker-miners-2.3.2/tests/libtracker-extract/test-extract-rules/90-image-generic.rule
--- 
old/tracker-miners-2.3.1/tests/libtracker-extract/test-extract-rules/90-image-generic.rule
  1970-01-01 01:00:00.000000000 +0100
+++ 
new/tracker-miners-2.3.2/tests/libtracker-extract/test-extract-rules/90-image-generic.rule
  2020-02-19 00:18:41.733641900 +0100
@@ -0,0 +1,5 @@
+[ExtractorRule]
+ModulePath=TEST_MODULE_IMAGE
+MimeTypes=image/*;
+BlockMimeTypes=image/x-blocked;
+FallbackRdfTypes=nfo:Image;nmm:Photo;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/tracker-miners-2.3.1/tests/libtracker-extract/tracker-module-manager-test.c 
new/tracker-miners-2.3.2/tests/libtracker-extract/tracker-module-manager-test.c
--- 
old/tracker-miners-2.3.1/tests/libtracker-extract/tracker-module-manager-test.c 
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/tracker-miners-2.3.2/tests/libtracker-extract/tracker-module-manager-test.c 
    2020-02-19 00:18:41.733641900 +0100
@@ -0,0 +1,88 @@
+/*
+ * Copyright (C) 2019, Sam Thursfield <[email protected]>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA  02110-1301, USA.
+ */
+
+#include "config-miners.h"
+
+#include <glib.h>
+
+#include <libtracker-miners-common/tracker-common.h>
+#include <libtracker-extract/tracker-module-manager.h>
+
+#define assert_path_basename(path, cmp, expected_value) {    \
+       g_autofree gchar *basename = g_path_get_basename (path); \
+       g_assert_cmpstr (basename, cmp, expected_value);         \
+}
+
+static gchar *
+get_test_rules_dir (void)
+{
+       return g_build_path (G_DIR_SEPARATOR_S, TOP_SRCDIR, "tests", 
"libtracker-extract", "test-extract-rules", NULL);
+}
+
+static void
+init_module_manager (void) {
+       gboolean success;
+       g_autofree gchar *test_rules_dir = NULL;
+
+       test_rules_dir = get_test_rules_dir ();
+       g_setenv ("TRACKER_EXTRACTOR_RULES_DIR", test_rules_dir, TRUE);
+
+       success = tracker_extract_module_manager_init ();
+       g_assert (success);
+}
+
+static void
+test_extract_rules (void)
+{
+       GList *l;
+
+       // The audio/* rule should match this, but the image/* rule should not.
+       l = tracker_extract_module_manager_get_matching_rules("audio/mpeg");
+
+       g_assert_cmpint (g_list_length (l), ==, 1);
+       assert_path_basename (l->data, ==, "90-audio-generic.rule");
+
+       // The image/* rule should match this, but the audio/* rule should not.
+       l = tracker_extract_module_manager_get_matching_rules("image/png");
+
+       g_assert_cmpint (g_list_length (l), ==, 1);
+       assert_path_basename (l->data, ==, "90-image-generic.rule");
+
+       // No rule should match this.
+       l = tracker_extract_module_manager_get_matching_rules("text/generic");
+       g_assert_cmpint (g_list_length (l), ==, 0);
+
+       // The image/x-blocked MIME type is explicitly blocked, so no rule 
should match.
+       l = 
tracker_extract_module_manager_get_matching_rules("image/x-blocked");
+       g_assert_cmpint (g_list_length (l), ==, 0);
+}
+
+int
+main (int argc, char **argv)
+{
+       gchar *used_filename;
+
+       g_test_init (&argc, &argv, NULL);
+       tracker_log_init (3, &used_filename);
+       init_module_manager ();
+
+       g_test_add_func ("/libtracker-extract/module-manager/extract-rules",
+                        test_extract_rules);
+       return g_test_run ();
+}


Reply via email to