1// SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd.
2//
3// SPDX-License-Identifier: GPL-3.0-or-later
4
5#include "logutils.h"
6
7#include <QDateTime>
8#include <QMutex>
9#include <QDebug>
10#include <QStandardPaths>
11#include <QCoreApplication>
12#include <QFileInfo>
13#include <QDir>
14
15DPF_BEGIN_NAMESPACE
16
17namespace GlobalPrivate
18{
19 const QString cachePath = QStandardPaths::locate(QStandardPaths::CacheLocation,
20 "",
21 QStandardPaths::LocateDirectory);
22 const QString deepinCachePath = cachePath + "deepin" + QDir::separator();
23}
24
25/**
26 * @brief checkAppCacheLogDir
27 * 检查应用程序缓存日志的文件夹
28 * @param subDirName 日志目录下的子目录
29 * 默认为空,则检查顶层目录
30 */
31void LogUtils::checkAppCacheLogDir(const QString &subDirName)
32{
33 if (!QFileInfo::exists(GlobalPrivate::deepinCachePath))
34 QDir().mkdir(appCacheLogPath());
35
36 if (!QFileInfo::exists(appCacheLogPath()))
37 QDir().mkdir(appCacheLogPath());
38
39 if (subDirName.isEmpty()) return;
40
41 if (!QFileInfo::exists(appCacheLogPath() + QDir::separator() + subDirName))
42 QDir().mkdir(appCacheLogPath() + QDir::separator() + subDirName);
43}
44
45/**
46 * @brief appCacheLogPath
47 * 获取当前应用程序的缓存日志路径,
48 * @return QString 返回的结果总是一个Dir类型的字符路径
49 */
50QString LogUtils::appCacheLogPath()
51{
52 return GlobalPrivate::deepinCachePath + QCoreApplication::applicationName();
53}
54
55/**
56 * @brief localDateTime 获取年/月/日/时间
57 * @return QString 格式化字符串后的时间
58 */
59QString LogUtils::localDateTime()
60{
61 return QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss.zzz");
62}
63
64/**
65 * @brief localDate 获取年/月/日
66 * @return QString 格式化字符串后的时间
67 */
68QString LogUtils::localDate()
69{
70 return QDate::currentDate().toString("yyyy-MM-dd");
71}
72
73/**
74 * @brief localDate 获取年/月/日/时间,
75 * 年/月/日/与时间之间以逗号分割
76 * @return QString 格式化字符串后的时间
77 */
78QString LogUtils::localDataTimeCSV()
79{
80 return QDateTime::currentDateTime().toString("yyyy-MM-dd,hh:mm:ss,zzz");
81}
82
83/**
84 * @brief lastTimeStamp 获取输入时间之前指定天数时间戳,
85 * 最小单位s
86 * @param dateTime 时间
87 * @param dayCount 向前的天数
88 * @return uint 时间戳
89 */
90uint LogUtils::lastTimeStamp(const QDateTime &dateTime, uint dayCount)
91{
92 return dateTime.toTime_t() - (86400 * dayCount);
93}
94
95/**
96 * @brief lastDateTime 获取输入时间之前指定天数时间,
97 * 最小单位s
98 * @param dateTime 时间
99 * @param dayCount 向前的天数
100 * @return QDateTime 时间
101 */
102QDateTime LogUtils::lastDateTime(const QDateTime &dateTime, uint dayCount)
103{
104 return QDateTime::fromTime_t(lastTimeStamp(dateTime,dayCount));
105}
106
107/**
108 * @brief containLastDay 判断时间是否包含时间(天)范围
109 * 最小单位s
110 * @param src 基准时间
111 * @param dst 对比时间
112 * @param dayCount 往前推的天数
113 * @return bool 是否包含的结果
114 *
115 * |------dst--------src----|
116 * |------dayCount----|
117 * return true;
118 *
119 * |-----------dst-------------src|
120 * |-dayCount--|
121 * return false
122 */
123bool LogUtils::containLastDay(const QDateTime &src, const QDateTime &dst, uint dayCount)
124{
125 uint srcStamp = src.toTime_t();
126 uint dstStamp = dst.toTime_t();
127
128 return dstStamp - (86400 * dayCount) < srcStamp && srcStamp <= dstStamp;
129}
130
131/**
132 * @brief toDayZero 获取今天的00:00:00的时间
133 * @return
134 */
135QDateTime LogUtils::toDayZero()
136{
137 QDateTime dateTime;
138 dateTime.setDate(QDate::currentDate());
139 dateTime.setTime(QTime(0,0,0));
140 return dateTime;
141}
142
143DPF_END_NAMESPACE
144