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: &" +"DESKTOP, &DOCUMENTS, &DOWNLOAD, &MUSIC, &PICTURES, &" +"PUBLIC_SHARE, &TEMPLATES, &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 " +"&DESKTOP, &DOCUMENTS, &DOWNLOAD, &MUSIC, &PICTURES, &" +"PUBLIC_SHARE, &TEMPLATES, &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: &DESKTOP, &DOCUMENTS, &DOWNLOAD, &MUSIC, &" +"PICTURES, &PUBLIC_SHARE, &TEMPLATES, &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: &DESKTOP, &DOCUMENTS, &DOWNLOAD, &MUSIC, &" +"PICTURES, &PUBLIC_SHARE, &TEMPLATES, &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 (); +}
