From be81082f38ef97ddd04150e2a1ae59848be38953 Mon Sep 17 00:00:00 2001 From: Jean-Francois Dockes Date: Mon, 17 Jun 2019 08:12:33 +0200 Subject: [PATCH] default config: fixed some mtypes without icons or catgs --- src/sampleconf/mimeconf | 66 ++++++++--- src/sampleconf/mimeview | 45 ++++++-- src/testmains/trrclconfig.cpp | 208 ++++++++++++++++++++++++++++++++++ 3 files changed, 295 insertions(+), 24 deletions(-) create mode 100644 src/testmains/trrclconfig.cpp diff --git a/src/sampleconf/mimeconf b/src/sampleconf/mimeconf index 471f3d35..218608bb 100644 --- a/src/sampleconf/mimeconf +++ b/src/sampleconf/mimeconf @@ -202,16 +202,24 @@ text/xml = internal text/plain [icons] application/epub+zip = book application/javascript = source +application/javascript = source application/msword = wordprocessing application/ogg = sownd application/pdf = pdf application/postscript = postscript application/sql = source application/vnd.ms-excel = spreadsheet +application/vnd.ms-office = document +application/vnd.ms-outlook = document application/vnd.ms-powerpoint = presentation application/vnd.oasis.opendocument.presentation = presentation application/vnd.oasis.opendocument.spreadsheet = spreadsheet application/vnd.oasis.opendocument.text = wordprocessing +application/vnd.oasis.opendocument.graphics = presentation +application/vnd.oasis.opendocument.presentation-flat-xml = presentation +application/vnd.oasis.opendocument.spreadsheet-flat-xml = spreadsheet +application/vnd.oasis.opendocument.text-flat-xml = wordprocessing +application/vnd.oasis.opendocument.text-template = wordprocessing application/vnd.openxmlformats-officedocument.presentationml.presentation = presentation application/vnd.openxmlformats-officedocument.presentationml.template = presentation application/vnd.openxmlformats-officedocument.spreadsheetml.sheet = spreadsheet @@ -229,6 +237,7 @@ application/vnd.sun.xml.writer = wordprocessing application/vnd.sun.xml.writer.global = wordprocessing application/vnd.sun.xml.writer.template = wordprocessing application/vnd.wordperfect = wordprocessing +application/x-7z-compressed = archive application/x-abiword = wordprocessing application/x-awk = source application/x-chm = book @@ -255,9 +264,13 @@ application/x-tex = wordprocessing application/x-webarchive = archive application/xml = document application/zip = archive -application/x-7z-compressed = archive +audio/aac = sownd +audio/ape = sownd +audio/mp4 = sownd audio/mpeg = sownd audio/x-karaoke = sownd +audio/x-musepack = sownd +audio/x-wavpack = sownd image/bmp = image image/gif = image image/jp2 = image @@ -266,35 +279,40 @@ image/png = image image/svg+xml = drawing image/tiff = image image/vnd.djvu = document +image/x-nikon-nef = image image/x-xcf = image image/x-xpmi = image -image/x-nikon-nef = image inode/directory = folder inode/symlink = emblem-symbolic-link message/rfc822 = message +text/css = html text/html = html text/html|chm = bookchap text/html|epub = bookchap text/html|gnuinfo = bookchap text/plain = txt text/rtf = wordprocessing +text/x-bibtex = txt text/x-c = source text/x-c+ = source text/x-c++ = source +text/x-chm-html = html +text/x-csharp = source text/x-csv = txt -text/x-fictionbook = document +text/x-fictionbook = book text/x-html-aptosid-man = aptosid-book text/x-ini = txt -text/x-bibtex = txt -text/x-lua = source text/x-java = source +text/x-lua = source text/x-mail = message text/x-man = document text/x-perl = source +text/x-php = source text/x-purple-html-log = pidgin text/x-purple-log = pidgin text/x-python = text-x-python text/x-shellscript = source +text/x-srt = source text/x-tex = wordprocessing text/xml = document video/3gpp = video @@ -316,11 +334,14 @@ video/x-msvideo = video # "guifilters" section below. text = \ application/epub+zip \ + application/javascript \ application/msword \ application/pdf \ application/postscript \ application/sql \ application/vnd.oasis.opendocument.text \ + application/vnd.oasis.opendocument.text-flat-xml \ + application/vnd.oasis.opendocument.text-template \ application/vnd.openxmlformats-officedocument.wordprocessingml.document \ application/vnd.openxmlformats-officedocument.wordprocessingml.template \ application/vnd.sun.xml.writer \ @@ -328,6 +349,7 @@ text = \ application/vnd.sun.xml.writer.template \ application/vnd.wordperfect \ application/x-abiword \ + application/vnd.ms-office \ application/x-awk \ application/x-chm \ application/x-dvi \ @@ -338,6 +360,7 @@ text = \ application/x-mobipocket-ebook \ application/x-okular-notes \ application/x-perl \ + application/x-php \ application/x-scribus \ application/x-shellscript \ application/x-tex \ @@ -347,6 +370,7 @@ text = \ text/x-tex \ image/vnd.djvu \ text/calendar \ + text/css \ text/html \ text/plain \ text/rtf \ @@ -354,6 +378,8 @@ text = \ text/x-c \ text/x-c++ \ text/x-c+ \ + text/x-chm-html \ + text/x-csharp \ text/x-lua \ text/x-fictionbook \ text/x-html-aptosid-man \ @@ -362,25 +388,30 @@ text = \ text/x-java \ text/x-man \ text/x-perl \ + text/x-php \ text/x-python \ - text/x-shellscript + text/x-shellscript \ + text/x-srt \ spreadsheet = \ application/vnd.ms-excel \ application/vnd.oasis.opendocument.spreadsheet \ + application/vnd.oasis.opendocument.spreadsheet-flat-xml \ application/vnd.openxmlformats-officedocument.spreadsheetml.sheet \ application/vnd.openxmlformats-officedocument.spreadsheetml.template \ application/vnd.sun.xml.calc \ application/vnd.sun.xml.calc.template \ - application/x-gnumeric + application/x-gnumeric \ presentation = \ application/vnd.ms-powerpoint \ + application/vnd.oasis.opendocument.graphics \ application/vnd.oasis.opendocument.presentation \ + application/vnd.oasis.opendocument.presentation-flat-xml \ application/vnd.openxmlformats-officedocument.presentationml.presentation \ application/vnd.openxmlformats-officedocument.presentationml.template \ application/vnd.sun.xml.impress \ - application/vnd.sun.xml.impress.template + application/vnd.sun.xml.impress.template \ media = \ application/ogg \ @@ -389,25 +420,30 @@ media = \ image/* \ video/* \ -message = message/rfc822 \ - text/x-gaim-log \ - text/x-mail \ - text/x-purple-log \ - text/x-purple-html-log \ +message = \ + message/rfc822 \ + text/x-gaim-log \ + text/x-mail \ + text/x-purple-html-log \ + text/x-purple-log \ -other = application/vnd.sun.xml.draw \ +other = \ + application/vnd.ms-outlook \ + application/vnd.sun.xml.draw \ application/vnd.sun.xml.draw.template \ application/vnd.sun.xml.math \ + application/x-7z-compressed \ application/x-dia-diagram \ application/x-fsdirectory \ application/x-mimehtml \ application/x-rar \ application/x-tar \ application/x-webarchive \ + application/x-zerosize \ application/zip \ - application/x-7z-compressed \ inode/directory \ inode/symlink \ + inode/x-empty \ [guifilters] # This defines the top level filters in the GUI (accessed by the the diff --git a/src/sampleconf/mimeview b/src/sampleconf/mimeview index 74a7d75a..cf919a43 100644 --- a/src/sampleconf/mimeview +++ b/src/sampleconf/mimeview @@ -58,6 +58,11 @@ application/vnd.ms-powerpoint = libreoffice %f application/vnd.oasis.opendocument.text = libreoffice %f application/vnd.oasis.opendocument.presentation = libreoffice %f application/vnd.oasis.opendocument.spreadsheet = libreoffice %f +application/vnd.oasis.opendocument.graphics = libreoffice %f +application/vnd.oasis.opendocument.presentation-flat-xml = libreoffice %f +application/vnd.oasis.opendocument.spreadsheet-flat-xml = libreoffice %f +application/vnd.oasis.opendocument.text-flat-xml = libreoffice %f +application/vnd.oasis.opendocument.text-template = libreoffice %f application/vnd.openxmlformats-officedocument.wordprocessingml.document = \ libreoffice %f @@ -102,20 +107,28 @@ application/x-gnumeric = gnumeric %f application/x-flac = rhythmbox %f audio/mpeg = rhythmbox %f +audio/aac = rhythmbox %f +audio/ape = rhythmbox %f +audio/mp4 = rhythmbox %f +audio/x-musepack = rhythmbox %f +audio/x-wavpack = rhythmbox %f application/ogg = rhythmbox %f + audio/x-karaoke = kmid %f -image/jpeg = gwenview %f -image/png = gwenview %f -image/tiff = gwenview %f -image/gif = gwenview %f -image/svg+xml = inkview %f +image/jpeg = ristretto %f +image/jp2 = ristretto %f +image/png = ristretto %f +image/tiff = ristretto %f +image/gif = ristretto %f image/vnd.djvu = djview %f +image/bmp = ristretto %f +image/x-ms-bmp = ristretto %f +image/x-xpmi = ristretto %f + image/x-xcf = gimp %f -image/bmp = gwenview %f -image/x-ms-bmp = gwenview %f -image/x-xpmi = gwenview %f image/x-nikon-nef = ufraw %f +image/svg+xml = inkview %f # Opening mail messages: # - Thunderbird will only open a single-message file if it has an .eml @@ -146,15 +159,26 @@ application/x-tar = ark %f application/zip = ark %f application/x-7z-compressed = ark %f +application/javascript = emacsclient --no-wait %f application/x-awk = emacsclient --no-wait %f +application/x-bibtex = emacsclient --no-wait %f +application/x-csharp = emacsclient --no-wait %f +application/x-java = emacsclient --no-wait %f application/x-perl = emacsclient --no-wait %f -text/x-perl = emacsclient --no-wait %f +application/x-php = emacsclient --no-wait %f application/x-shellscript = emacsclient --no-wait %f +text/x-bibtex = emacsclient --no-wait %f +text/css = emacsclient --no-wait %f +text/x-csharp = emacsclient --no-wait %f +text/x-java = emacsclient --no-wait %f +text/x-perl = emacsclient --no-wait %f text/x-shellscript = emacsclient --no-wait %f text/x-srt = emacsclient --no-wait %f # Or firefox -remote "openFile(%u)" text/html = firefox %u +application/x-chm-html = %u +text/x-chm-html = %u # gnu info nodes are translated to html with a "gnuinfo" # rclaptg. rclshowinfo knows how to start the info command on the right @@ -163,6 +187,9 @@ text/html|gnuinfo = rclshowinfo %F %(title);ignoreipath=1 application/x-webarchive = konqueror %f text/x-fictionbook = ebook-viewer %f + +application/x-javascript = emacsclient --no-wait %f +application/sql = emacsclient --no-wait %f application/x-tex = emacsclient --no-wait %f application/xml = emacsclient --no-wait %f text/xml = emacsclient --no-wait %f diff --git a/src/testmains/trrclconfig.cpp b/src/testmains/trrclconfig.cpp new file mode 100644 index 00000000..c9d01696 --- /dev/null +++ b/src/testmains/trrclconfig.cpp @@ -0,0 +1,208 @@ +/* Copyright (C) 2017-2019 J.F.Dockes + * + * License: GPL 2.1 + * + * This program 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 program 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 program; if not, write to the + * Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ +#include +#include + +#include +#include +#include + +using namespace std; + +#include "log.h" + +#include "rclinit.h" +#include "rclconfig.h" +#include "cstr.h" + +static char *thisprog; + +static char usage [] = "\n" + "-c: check a few things in the configuration files\n" + "[-s subkey] -q param : query parameter value\n" + "-f : print some field data\n" + " : default: print parameters\n" + + ; +static void +Usage(void) +{ + fprintf(stderr, "%s: usage: %s\n", thisprog, usage); + exit(1); +} + +static int op_flags; +#define OPT_MOINS 0x1 +#define OPT_s 0x2 +#define OPT_q 0x4 +#define OPT_c 0x8 +#define OPT_f 0x10 + +int main(int argc, char **argv) +{ + string pname, skey; + + thisprog = argv[0]; + argc--; argv++; + + while (argc > 0 && **argv == '-') { + (*argv)++; + if (!(**argv)) + /* Cas du "adb - core" */ + Usage(); + while (**argv) + switch (*(*argv)++) { + case 'c': op_flags |= OPT_c; break; + case 'f': op_flags |= OPT_f; break; + case 's': op_flags |= OPT_s; if (argc < 2) Usage(); + skey = *(++argv); + argc--; + goto b1; + case 'q': op_flags |= OPT_q; if (argc < 2) Usage(); + pname = *(++argv); + argc--; + goto b1; + default: Usage(); break; + } + b1: argc--; argv++; + } + + if (argc != 0) + Usage(); + + string reason; + RclConfig *config = recollinit(0, 0, 0, reason); + if (config == 0 || !config->ok()) { + cerr << "Configuration problem: " << reason << endl; + exit(1); + } + if (op_flags & OPT_s) + config->setKeyDir(skey); + if (op_flags & OPT_q) { + string value; + if (!config->getConfParam(pname, value)) { + fprintf(stderr, "getConfParam failed for [%s]\n", pname.c_str()); + exit(1); + } + printf("[%s] -> [%s]\n", pname.c_str(), value.c_str()); + } else if (op_flags & OPT_f) { + set stored = config->getStoredFields(); + set indexed = config->getIndexedFields(); + cout << "Stored fields: "; + for (set::const_iterator it = stored.begin(); + it != stored.end(); it++) { + cout << "[" << *it << "] "; + } + cout << endl; + cout << "Indexed fields: "; + for (set::const_iterator it = indexed.begin(); + it != indexed.end(); it++) { + const FieldTraits *ftp; + config->getFieldTraits(*it, &ftp); + if (ftp) + cout << "[" << *it << "]" << " -> [" << ftp->pfx << "] "; + else + cout << "[" << *it << "]" << " -> [" << "(none)" << "] "; + + } + cout << endl; + } else if (op_flags & OPT_c) { + // Checking the configuration consistency + + // Find and display category names + vector catnames; + config->getMimeCategories(catnames); + cout << "Categories: "; + for (vector::const_iterator it = catnames.begin(); + it != catnames.end(); it++) { + cout << *it << " "; + } + cout << endl; + + // Compute union of all types from each category. Check that there + // are no duplicates while we are at it. + set allmtsfromcats; + for (vector::const_iterator it = catnames.begin(); + it != catnames.end(); it++) { + vector cts; + config->getMimeCatTypes(*it, cts); + for (vector::const_iterator it1 = cts.begin(); + it1 != cts.end(); it1++) { + // Already in map -> duplicate + if (allmtsfromcats.find(*it1) != allmtsfromcats.end()) { + cout << "Duplicate: [" << *it1 << "]" << endl; + } + allmtsfromcats.insert(*it1); + } + } + + // Retrieve complete list of mime types + vector mtypes = config->getAllMimeTypes(); + + // And check that each mime type is found in exactly one category + // And have an icon + for (const auto& mtype: mtypes) { + if (allmtsfromcats.find(mtype) == allmtsfromcats.end()) { + cout << "Not found in catgs: [" << mtype << "]" << endl; + } + // We'd like to check for types with no icons, but + // getMimeIconPath() returns the valid 'document' by + // default, we'd have to go look into the confsimple + // directly. + // string path = config->getMimeIconPath(mtype, string()); + // cout << mtype << " -> " << path << endl; + } + + // List mime types not in mimeview + for (vector::const_iterator it = mtypes.begin(); + it != mtypes.end(); it++) { + if (config->getMimeViewerDef(*it, "", false).empty()) { + cout << "No viewer: [" << *it << "]" << endl; + } + } + + // Check that each mime type has an indexer + for (vector::const_iterator it = mtypes.begin(); + it != mtypes.end(); it++) { + if (config->getMimeHandlerDef(*it, false).empty()) { + cout << "No filter: [" << *it << "]" << endl; + } + } + + // Check that each mime type has a defined icon + for (vector::const_iterator it = mtypes.begin(); + it != mtypes.end(); it++) { + if (config->getMimeIconPath(*it, "") == "document") { + cout << "No or generic icon: [" << *it << "]" << endl; + } + } + + } else { + config->setKeyDir(cstr_null); + vector names = config->getConfNames(); + for (vector::iterator it = names.begin(); + it != names.end();it++) { + string value; + config->getConfParam(*it, value); + cout << *it << " -> [" << value << "]" << endl; + } + } + exit(0); +}