| /**************************************************************************** |
| ** |
| ** Copyright (C) 2016 The Qt Company Ltd. |
| ** Contact: https://www.qt.io/licensing/ |
| ** |
| ** This file is part of the test suite of the Qt Toolkit. |
| ** |
| ** $QT_BEGIN_LICENSE:GPL-EXCEPT$ |
| ** Commercial License Usage |
| ** Licensees holding valid commercial Qt licenses may use this file in |
| ** accordance with the commercial license agreement provided with the |
| ** Software or, alternatively, in accordance with the terms contained in |
| ** a written agreement between you and The Qt Company. For licensing terms |
| ** and conditions see https://www.qt.io/terms-conditions. For further |
| ** information use the contact form at https://www.qt.io/contact-us. |
| ** |
| ** GNU General Public License Usage |
| ** Alternatively, this file may be used under the terms of the GNU |
| ** General Public License version 3 as published by the Free Software |
| ** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT |
| ** included in the packaging of this file. Please review the following |
| ** information to ensure the GNU General Public License requirements will |
| ** be met: https://www.gnu.org/licenses/gpl-3.0.html. |
| ** |
| ** $QT_END_LICENSE$ |
| ** |
| ****************************************************************************/ |
| |
| #include <QtCore/QMimeDatabase> |
| #include <QtCore/QMimeType> |
| #include <QtCore/QCoreApplication> |
| #include <QtCore/QCommandLineParser> |
| #include <QtCore/QCommandLineOption> |
| #include <QtCore/QDebug> |
| |
| #include <iostream> |
| #include <algorithm> |
| #include <iterator> |
| |
| std::wostream &operator<<(std::wostream &str, const QString &s) |
| { |
| str << s.toStdWString(); |
| return str; |
| } |
| |
| template <class T> |
| std::wostream &operator<<(std::wostream &str, const QList<T> &l) |
| { |
| std::copy(l.constBegin(), l.constEnd(), |
| std::ostream_iterator<T, wchar_t>(str, L" ")); |
| return str; |
| } |
| |
| std::wostream &operator<<(std::wostream &str, const QMimeType &type) |
| { |
| str << "Type : " << type.name(); |
| const QStringList aliases = type.aliases(); |
| if (!aliases.isEmpty()) |
| str << " (" << aliases << ')'; |
| str << '\n'; |
| |
| const QStringList parentMimeTypes = type.parentMimeTypes(); |
| if (!parentMimeTypes.isEmpty()) |
| str << "Inherits: " << parentMimeTypes << '\n'; |
| |
| if (!type.comment().isEmpty()) |
| str << "Comment : " << type.comment() << '\n'; |
| |
| const QStringList globPatterns = type.globPatterns(); |
| if (!globPatterns.isEmpty()) |
| str << "Patterns: " << globPatterns << '\n'; |
| |
| if (!type.preferredSuffix().isEmpty()) { |
| str << "Suffix : " << type.preferredSuffix(); |
| const QStringList suffixes = type.suffixes(); |
| if (suffixes.size() > 1) |
| str << " (" << suffixes << ')'; |
| str << '\n'; |
| } |
| |
| if (!type.iconName().isEmpty()) |
| str << "Icon : " << type.iconName() << '\n'; |
| |
| return str; |
| } |
| |
| bool operator<(const QMimeType &t1, const QMimeType &t2) |
| { |
| return t1.name() < t2.name(); |
| } |
| |
| int main(int argc, char *argv[]) |
| { |
| QCoreApplication app(argc, argv); |
| QCoreApplication::setApplicationVersion(QT_VERSION_STR); |
| |
| QCommandLineParser parser; |
| parser.addHelpOption(); |
| parser.addVersionOption(); |
| QCommandLineOption matchContentOnlyOption(QStringList() << "c" << "content", |
| "Use only the file content for determining the mimetype."); |
| parser.addOption(matchContentOnlyOption); |
| QCommandLineOption matchFileOnlyOption(QStringList() << "f" << "filename-only", |
| "Whether use the file name only for determining the mimetype. Not used if -c is specified."); |
| parser.addOption(matchFileOnlyOption); |
| QCommandLineOption dumpAllOption("a", "Dump all mime types."); |
| parser.addOption(dumpAllOption); |
| parser.addPositionalArgument("file", "The file(s) to analyze."); |
| parser.process(app); |
| |
| QMimeDatabase::MatchMode matchMode = QMimeDatabase::MatchDefault; |
| if (parser.isSet(matchContentOnlyOption)) |
| matchMode = QMimeDatabase::MatchContent; |
| else if (parser.isSet(matchFileOnlyOption)) |
| matchMode = QMimeDatabase::MatchExtension; |
| |
| const bool dumpAll = parser.isSet(dumpAllOption); |
| |
| QMimeDatabase mimeDatabase; |
| |
| if (dumpAll) { |
| QList<QMimeType> mimeTypes = mimeDatabase.allMimeTypes(); |
| std::stable_sort(mimeTypes.begin(), mimeTypes.end()); |
| std::wcout << mimeTypes.size() << " mime types found.\n\n"; |
| foreach (const QMimeType &type, mimeTypes) |
| std::wcout << type << '\n'; |
| } else { |
| foreach (const QString &fileName, parser.positionalArguments()) { |
| QMimeType data = mimeDatabase.mimeTypeForFile(fileName, matchMode); |
| std::wcout << "File : " << fileName << '\n' << data << '\n'; |
| } |
| } |
| |
| return 0; |
| } |