File indexing completed on 2024-04-28 03:51:42

0001 /*
0002     This file is part of the KDE Baloo project.
0003     SPDX-FileCopyrightText: 2018 Michael Heidelbach <ottwolt@gmail.com>
0004 
0005     SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0006 */
0007 
0008 #ifndef BALOODATABASESANITIZER_H
0009 #define BALOODATABASESANITIZER_H
0010 
0011 #include "transaction.h"
0012 
0013 namespace Baloo
0014 {
0015 class DatabaseSanitizerImpl;
0016 /**
0017 * \brief Provide methods to show database problems and
0018 * sanitize them.
0019 */
0020 class BALOO_ENGINE_EXPORT DatabaseSanitizer
0021 {
0022 public:
0023     enum ItemAccessFilterFlags {
0024         IgnoreNone = 0,
0025         IgnoreAvailable = 1,
0026         IgnoreUnavailable = 2,
0027         IgnoreMounted = 8,
0028         IgnoreUnmounted = 0x10,
0029     };
0030     Q_DECLARE_FLAGS(ItemAccessFilters, ItemAccessFilterFlags)
0031 
0032 public:
0033     DatabaseSanitizer(const Database& db, Transaction::TransactionType type);
0034     DatabaseSanitizer(Database* db, Transaction::TransactionType type);
0035     ~DatabaseSanitizer();
0036 
0037     /**
0038     * Print database content to stdout
0039     *
0040     * \p deviceIDs filter by device ids. Negative numbers list everything but...
0041     * with empty \p deviceIDs(default) everything is printed.
0042     *
0043     * \p missingOnly Simulate purging operation. Only inaccessible items are printed.
0044     *
0045     * \p urlFilter Filter result urls. Default is null = Print everything.
0046     */
0047     void printList(const QVector<qint64>& deviceIds,
0048         const ItemAccessFilters accessFilter = IgnoreNone,
0049         const QSharedPointer<QRegularExpression>& urlFilter = nullptr
0050     );
0051     /**
0052     * Print info about known devices to stdout
0053     *
0054     * \p deviceIDs filter by device ids. Negative numbers list everything but...
0055     * with empty \p deviceIDs(default) everything is printed.
0056     *
0057     * \p accessFilter filter by accessibility. E.g IgnoreAvailable|IgnoreUnmounted
0058     * prints only mounted devices with inaccessible files.
0059     */
0060     void printDevices(const QVector<qint64>& deviceIds, const ItemAccessFilters accessFilter = IgnoreNone);
0061 
0062     void removeStaleEntries(const QVector<qint64>& deviceIds,
0063         const DatabaseSanitizer::ItemAccessFilters accessFilter = DatabaseSanitizer::IgnoreNone,
0064         const bool dryRun = false,
0065         const QSharedPointer<QRegularExpression>& urlFilter = nullptr
0066     );
0067 
0068 private:
0069     DatabaseSanitizer(const DatabaseSanitizer& rhs) = delete;
0070     DatabaseSanitizerImpl* m_pimpl;
0071 };
0072 
0073 Q_DECLARE_OPERATORS_FOR_FLAGS(DatabaseSanitizer::ItemAccessFilters)
0074 
0075 }
0076 #endif // BALOODATABASESANITIZER_H