File: logapplicationhelper.h

package info (click to toggle)
deepin-log-viewer 6.5.8%2Bds1-1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 14,752 kB
  • sloc: cpp: 61,723; ansic: 1,732; xml: 81; sh: 59; makefile: 12
file content (166 lines) | stat: -rw-r--r-- 4,472 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: GPL-3.0-or-later

#ifndef LOGAPPLICATIONHELPER_H
#define LOGAPPLICATIONHELPER_H

#include "structdef.h"
#include "dtkcore_config.h"
#ifdef DTKCORE_CLASS_DConfigFile
#include <DConfig>
#endif

#include <QMap>
#include <QObject>

#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
#include <QGSettings>
#endif

#include <mutex>

/**
 * @brief The LogApplicationHelper class 获取应用日志文件路径信息工具类
 */
class LogApplicationHelper : public QObject
{
    Q_OBJECT
public:
    /**
     * @brief instance 全局单列模式实现
     * @return 此类的唯一对象
     */
    static LogApplicationHelper *instance()
    {
        LogApplicationHelper *sin = m_instance.load();
        if (!sin) {
            //加锁 线程安全
            std::lock_guard<std::mutex> lock(m_mutex);
            sin = m_instance.load();
            if (!sin) {
                sin = new LogApplicationHelper();
                m_instance.store(sin);
            }
        }
        return sin;
    }

    QMap<QString, QString> getMap();
    // 刷新并返回最新的应用配置信息
    AppLogConfigList getAppLogConfigs();

    //根据包名获得显示名称
    QString transName(const QString &str);

    //根据包名获得路径
    QString getPathByAppId(const QString &str);

    //获取所有其他日志文件列表(名称-路径)
    QList<QStringList> getOtherLogList();

    //获取所有自定义日志文件列表(名称-路径)
    QList<QStringList> getCustomLogList();

    AppLogConfig  appLogConfig(const QString& app);
    bool isAppLogConfigExist(const QString& app);

    // 验证是否为有效的应用名
    bool isValidAppName(const QString& appName);

    QDateTime getLastReportTime();
    void saveLastRerportTime(const QDateTime& date);
    // 获取崩溃上报最大条数,默认为50
    int getMaxReportCoredump();

private:
    explicit LogApplicationHelper(QObject *parent = nullptr);

    void init();
    void initAppLog();
    void initOtherLog();
    void initCustomLog();

    void createDesktopFiles();
    void createLogFiles();
    void createTransLogFiles();

    void generateTransName(const QString &path, const QString &name, bool isDeepin, bool isGeneric, bool isName);

    QString getLogFile(const QString &path);

    void loadAppLogConfigsByJson();

    AppLogConfig jsonAppLogConfig(const QString& app);
    bool isJsonAppLogConfigExist(const QString& app);

    void validityJsonLogPath(SubModuleConfig& submodule);

signals:
    void sigValueChanged(const QString &key);

public slots:

private:
    /**
     * @brief m_en_log_map 应用包名-日志路径键值对
     */
    QMap<QString, QString> m_en_log_map;
    /**
     * @brief m_en_trans_map 应用包名-应用显示文本键值对
     */
    QMap<QString, QString> m_en_trans_map;
    /**
     * @brief m_trans_log_map 应用显示文本-日志路径键值对
     */
    QMap<QString, QString> m_trans_log_map;
    /**
     * @brief m_other_log_list 所有其他日志列表,每项包含名称、路径
     */
    QList<QStringList> m_other_log_list;
    /**
     * @brief m_custom_log_list 所有自定义日志列表,每项包含名称、路径
     */
    QList<QStringList> m_custom_log_list;
    /**
     * @brief m_desktop_files 所有符合条件的应用的desktop文件路径
     */
    QStringList m_desktop_files;
    /**
     * @brief m_log_files 所有符合条件的应用的日志文件路径
     */
    QStringList m_log_files;
    /**
     * @brief m_current_system_language 系统语言
     */
    QString m_current_system_language;

    /**
     * @brief m_appLogConfigs 应用日志json配置信息
     */
    AppLogConfigList m_JsonAppLogConfigs;
    /**
     * @brief m_appLogConfigs 应用日志配置信息(包含json配置信息)
     */
    AppLogConfigList m_appLogConfigs;
    /**
     * @brief m_instance 单例用的本类指针的原子性封装
     */
    static std::atomic<LogApplicationHelper *> m_instance;
    /**
     * @brief m_mutex 单例用的锁
     */
    static std::mutex m_mutex;

#ifdef DTKCORE_CLASS_DConfigFile
    //dconfig,自定义日志配置
    Dtk::Core::DConfig *m_pDConfig = nullptr;
#endif

#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
    //gsettings,自定义日志配置
    QGSettings *m_pGSettings = nullptr;
#endif
};

#endif  // LOGAPPLICATIONHELPER_H