Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
8a55228
feat: 打印管理器V3.5需求
jinniliew Jul 4, 2022
59d6e4c
fix: 埋点信息未生成问题
jinniliew Jul 19, 2022
9f42bc9
chore: update changelog
jinniliew Aug 17, 2022
b4d5b0d
chore: hp color laserjet型号本地驱动查找型号修改
jinniliew Jul 21, 2023
f92060b
feat: 适配驱动平台接口
jinniliew Aug 14, 2023
6d4d1de
feat: 打印管理后台插件化
jinniliew Sep 8, 2023
0a13b69
fix: 修改插件化问题
jinniliew Sep 18, 2023
5ceeb3d
fix: 紧凑模式界面修改
jinniliew Dec 20, 2023
c99b0aa
fix: 紧凑模式问题修改
jinniliew Dec 25, 2023
caaf99d
chore: 紧凑相关编译问题修改
jinniliew Dec 26, 2023
f342e35
feat: 打印管理v1.1需求
jinniliew Dec 26, 2023
265f996
chore: 问题修改
jinniliew Dec 26, 2023
39cc770
fix: faq链接字号大显示不全
jinniliew Jan 3, 2024
a78cb03
chore: 佳能capt打印机添加删除修改
jinniliew Jan 3, 2024
acd5fa0
feat: 打印管理v1.1需求
jinniliew Jan 12, 2024
428477d
chore: hplip-plugin安装问题
jinniliew Jan 16, 2024
120dd0a
fix: usb自动添加后ui列表刷新问题
jinniliew Jan 22, 2024
2130467
feat: 集成FAQ文档
jinniliew Feb 26, 2024
53c2927
chore: 版本号修改
jinniliew Feb 27, 2024
d783f44
chore: 打印机属性修改不生效问题
jinniliew Mar 5, 2024
1c89236
chore: 更新FAQ文档
jinniliew Mar 12, 2024
2cc7741
feat: 数据埋点增加时间点及原因
jinniliew Mar 15, 2024
5bee15d
chore: lbp打印机驱动卸载后删除失败问题
jinniliew Feb 21, 2024
c5d3769
feat: 手动添加文案修改
jinniliew Mar 18, 2024
981ad2a
chore: 版本号修改
jinniliew Mar 18, 2024
5c2d9bb
chore: 增加更新检查
jinniliew Mar 29, 2024
e7f9a66
fix: 网络驱动为空应用退出问题
jinniliew Apr 30, 2024
4c0164c
chore: 版本号修改
jinniliew Apr 30, 2024
e976257
chore: 版本号修改
jinniliew May 6, 2024
8ab301a
feat: 调试模式与日志收集工具适配
jinniliew May 7, 2024
d39b024
feat: 适配驱动按需启动
jinniliew May 11, 2024
a8e019f
chore: Release 1.0.5-1+1060
jinniliew May 13, 2024
7988258
fix: 处理usb信息时可能出现异常
jinniliew May 17, 2024
32d9660
chore: Release 1.0.6-1+1060
jinniliew May 20, 2024
ce44d82
fix: Code synchronization
jinniliew May 28, 2024
ecdb975
chore: add pdf file licence
jinniliew May 28, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .reuse/dep5
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ Copyright: None
License: CC0-1.0

# desktop json policy
Files: *.desktop *.json *.policy
Files: *.desktop *.json *.policy *.pdf
Copyright: None
License: CC0-1.0

Expand Down
Binary file added assets/dde-printer/打印机使用FAQ文档.pdf
Binary file not shown.
4 changes: 3 additions & 1 deletion dde-printer.pro
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@ TEMPLATE = subdirs
SUBDIRS += \
src/cppcups/cppcups.pro \
src/Printer/Printer.pro \
src/Deamon
src/Deamon \
src/plugin \
src/service

CONFIG += ordered
DEFINES += QT_MESSAGELOGCONTEXT
Expand Down
6 changes: 6 additions & 0 deletions debian/changelog
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
dde-printer (1.0.6-1+1060) unstable; urgency=medium

* Fix bug

-- LiuJingLin <liujinglin@uniontech.com> Mon, 20 May 2024 17:30:00 +0800

dde-printer (0.9.21-1) unstable; urgency=medium

* update version
Expand Down
2 changes: 1 addition & 1 deletion debian/control
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ Homepage: http://www.linuxdeepin.com/

Package: dde-printer
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}, libnss-winbind
Depends: ${shlibs:Depends}, ${misc:Depends}, libnss-winbind,libdeepin-service-framework,deepin-service-manager
Description: Deepin Print Manager is a eazy tool to manage printers.
Deepin Print Manager is a printer management tool,which supports adding and removing printers,managing print jobs and so on.

2 changes: 2 additions & 0 deletions src/Common/Common.pri
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ HEADERS += \
$$PWD/zjobmanager.h \
$$PWD/cupsattrnames.h \
$$PWD/config.h \
$$PWD/reviselogger.h \
$$PWD/vendor/addprinter_p.h \
$$PWD/vendor/addprinter.h \
$$PWD/vendor/printerservice.h \
Expand All @@ -29,6 +30,7 @@ SOURCES += \
$$PWD/cupsconnectionfactory.cpp \
$$PWD/ztaskinterface.cpp \
$$PWD/zjobmanager.cpp \
$$PWD/reviselogger.cpp \
$$PWD/vendor/addprinter.cpp \
$$PWD/vendor/printerservice.cpp \
$$PWD/vendor/zdevicemanager.cpp \
Expand Down
101 changes: 85 additions & 16 deletions src/Common/common.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,86 @@
#include <QDBusReply>
#include <QRegExpValidator>
#include <QDebug>
#include <QDateTime>
#include <QLibrary>

#include <netdb.h>

static QString g_strModelFull;
static bool isSdkInit = false;
typedef bool (*pfInitialize)(const std::string&, bool);
static pfInitialize InitializeSdk = nullptr;
static pfWriteEventLog WriteEventLog = nullptr;
const QString LibEventLog = "/usr/lib/libdeepin-event-log.so";
static QLibrary *eventLib = nullptr;
static QStringList timeList;

Q_LOGGING_CATEGORY(COMMONMOUDLE, "org.deepin.dde-printer.common")

void loadEventlib()
{
if (!isSdkInit) {
eventLib = new QLibrary(LibEventLog);
if (eventLib == nullptr) {
qCWarning(COMMONMOUDLE) << "no mem";
return;
}

eventLib->load();
if (!eventLib->isLoaded()) {
delete eventLib;
eventLib = nullptr;
qCWarning(COMMONMOUDLE) << "Load libdeepin-event-log.so failed!";
return;
}

InitializeSdk = (pfInitialize)(eventLib->resolve("Initialize"));
WriteEventLog = (pfWriteEventLog)eventLib->resolve("WriteEventLog");
if (InitializeSdk && InitializeSdk(APPNAME, true)) {
qCDebug(COMMONMOUDLE) << "sdk load success" ;
isSdkInit = true; // sdk初始化状态
}
}
}

bool isEventSdkInit()
{
return isSdkInit;
}

void unloadEventLib()
{
if (eventLib != nullptr && eventLib->isLoaded()) {
eventLib->unload();
delete eventLib;
eventLib = nullptr;
}

if (isSdkInit) {
isSdkInit = false;
InitializeSdk = nullptr;
WriteEventLog = nullptr;
}
}

pfWriteEventLog getWriteEventLog()
{
return WriteEventLog;
}

QStringList getCurrentTime(time_record_t type)
{
QDateTime current_date_time = QDateTime::currentDateTime();
QString time = current_date_time.toString("yyyy-MM-dd hh:mm:ss");
if (type == RESET_TIME) {
timeList.clear();
} else {
if (type == ADD_TIME) {
timeList.clear();
}
timeList << time;
}
return timeList;
}

QString getPrinterPPD(const char *name)
{
Expand All @@ -33,7 +109,7 @@ QString getPrinterPPD(const char *name)
if (conPtr)
strPPD = STQ(conPtr->getPPD(name));
} catch (const std::exception &ex) {
qWarning() << "Got execpt: " << QString::fromUtf8(ex.what());
qCWarning(COMMONMOUDLE) << "Got execpt: " << QString::fromUtf8(ex.what());
return QString();
};

Expand Down Expand Up @@ -67,7 +143,7 @@ QString getPrinterUri(const char *name)
if (conPtr)
attrs = conPtr->getPrinterAttributes(name, nullptr, &requestList);
} catch (const std::exception &ex) {
qWarning() << "Got execpt: " << QString::fromUtf8(ex.what());
qCWarning(COMMONMOUDLE) << "Got execpt: " << QString::fromUtf8(ex.what());
return QString();
};

Expand Down Expand Up @@ -183,16 +259,16 @@ QVariant ipp_attribute_value(ipp_attribute_t *attr, int i)
case IPP_TAG_CHARSET:
case IPP_TAG_MIMETYPE:
case IPP_TAG_LANGUAGE:
qDebug() << QString("Got %1 : %2").arg(UTF8_T_S(ippGetName(attr))).arg(UTF8_T_S(ippGetString(attr, i, nullptr)));
qCDebug(COMMONMOUDLE) << QString("Got %1 : %2").arg(UTF8_T_S(ippGetName(attr))).arg(UTF8_T_S(ippGetString(attr, i, nullptr)));
val = QVariant(UTF8_T_S(ippGetString(attr, i, nullptr)).trimmed());
break;
case IPP_TAG_INTEGER:
case IPP_TAG_ENUM:
qDebug() << QString("Got %1 : %2").arg(UTF8_T_S(ippGetName(attr))).arg(ippGetInteger(attr, i));
qCDebug(COMMONMOUDLE) << QString("Got %1 : %2").arg(UTF8_T_S(ippGetName(attr))).arg(ippGetInteger(attr, i));
val = QVariant(ippGetInteger(attr, i));
break;
case IPP_TAG_BOOLEAN:
qDebug() << QString("Got %1 : %2").arg(UTF8_T_S(ippGetName(attr))).arg(ippGetBoolean(attr, i) ? "true" : "false");
qCDebug(COMMONMOUDLE) << QString("Got %1 : %2").arg(UTF8_T_S(ippGetName(attr))).arg(ippGetBoolean(attr, i) ? "true" : "false");
val = QVariant(ippGetBoolean(attr, i));
break;
// case IPP_TAG_RANGE:
Expand Down Expand Up @@ -233,12 +309,12 @@ int shellCmd(const QString &cmd, QString &out, QString &strErr, int timeout)
out = proc.readAll();
if (proc.exitCode() != 0 || proc.exitStatus() != QProcess::NormalExit) {
strErr = QString("err %1, string: %2").arg(proc.exitCode()).arg(QString::fromUtf8(proc.readAllStandardError()));
qDebug() << cmd;
qWarning() << "shellCmd exit with err: " << strErr;
qCDebug(COMMONMOUDLE) << cmd;
qCWarning(COMMONMOUDLE) << "shellCmd exit with err: " << strErr;
return -1;
}
} else {
qWarning() << "shellCmd timeout";
qCWarning(COMMONMOUDLE) << "shellCmd timeout";
return -2;
}

Expand Down Expand Up @@ -546,9 +622,6 @@ void formatModelName(const QString &strMake, QString &strModel)
}
}

// 用于在平台上查询驱动,需保留原始型号
g_strModelFull = strModel;

//remove right string contains ignores suffix
int index = modell.indexOf(QRegularExpression(_RE_ignore_suffix));
if (index > 0) {
Expand Down Expand Up @@ -594,7 +667,3 @@ bool isIpv4Address(const QString &str)
return reg.match(str).hasMatch();
}

QString getPrinterFullModel()
{
return g_strModelFull;
}
22 changes: 21 additions & 1 deletion src/Common/common.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,17 @@
#include <QDebug>
#include <cups/adminutil.h>

#define APPNAME "dde-printer"

Q_DECLARE_LOGGING_CATEGORY(COMMONMOUDLE)

typedef enum time_record_e {
ADD_TIME = 0,
START_TIME,
FINISH_TIME,
RESET_TIME,
MAX_TIME
} time_record_t;
//将输入字符串转为小写,分隔出字母和数字
QString normalize(const QString &strin);

Expand Down Expand Up @@ -54,5 +65,14 @@ QString toNormalName(const QString &name);

bool isIpv4Address(const QString &str);

QString getPrinterFullModel();
void loadEventlib();

bool isEventSdkInit();

QStringList getCurrentTime(time_record_t type);

typedef void (*pfWriteEventLog)(const std::string &);
pfWriteEventLog getWriteEventLog();
void unloadEventLib();

#endif // COMMON_H
11 changes: 7 additions & 4 deletions src/Common/cupsconnectionfactory.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,21 @@
#include "zsettings.h"

#include <QDebug>
#include <QLoggingCategory>

Q_LOGGING_CATEGORY(FACTORY, "org.deepin.dde-printer.factory")

std::unique_ptr<Connection> CupsConnectionFactory::createConnection(QString strHost, int port, int encryption)

{
std::unique_ptr<Connection> connectionPtr = std::unique_ptr<Connection>(new Connection());
try {
if (0 != connectionPtr->init(strHost.toUtf8().data(), port, encryption)) {
qWarning() << "Unable to connect cups server" ;
qCWarning(FACTORY) << "Unable to connect cups server" ;
connectionPtr.reset();
}
} catch (const std::exception &ex) {
qWarning() << "Got execpt: " << QString::fromUtf8(ex.what());
qCWarning(FACTORY) << "Got execpt: " << QString::fromUtf8(ex.what());
connectionPtr.reset();

}
Expand All @@ -29,11 +32,11 @@ std::unique_ptr<Connection> CupsConnectionFactory::createConnectionBySettings()
std::unique_ptr<Connection> connectionPtr = std::unique_ptr<Connection>(new Connection());
try {
if (0 != connectionPtr->init(g_Settings->getCupsServerHost().toLocal8Bit(), g_Settings->getCupsServerPort(), g_Settings->getCupsServerEncryption())) {
qWarning() << "Unable to connect deafult cups server";
qCWarning(FACTORY) << "Unable to connect deafult cups server";
connectionPtr.reset();
}
} catch (const std::exception &ex) {
qWarning() << "Got execpt: " << QString::fromUtf8(ex.what());
qCWarning(FACTORY) << "Got execpt: " << QString::fromUtf8(ex.what());
connectionPtr.reset();
}
return connectionPtr;
Expand Down
69 changes: 69 additions & 0 deletions src/Common/reviselogger.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: GPL-3.0-or-later

#include "reviselogger.h"

#include <dtkcore_global.h>
#include <qglobal.h>

#include <QLoggingCategory>
#include <QObject>

#include <DConfig>

DCORE_USE_NAMESPACE

MLogger::MLogger(QObject *parent) : QObject(parent), m_rules(""), m_config(nullptr)
{
QByteArray logRules = qgetenv("QT_LOGGING_RULES");
// qunsetenv 之前一定不要有任何日志打印,否则取消环境变量设置不会生效
qunsetenv("QT_LOGGING_RULES");

// set env
m_rules = logRules;

// set dconfig
m_config = DConfig::create("dde-printer", "org.deepin.dde.printer");
logRules = m_config->value("log_rules").toByteArray();
appendRules(logRules);
setRules(m_rules);

// watch dconfig
connect(m_config, &DConfig::valueChanged, this, [this](const QString &key) {
qDebug() << "value changed:" << key;
if (key == "log_rules") {
setRules(m_config->value(key).toByteArray());
}
});
}

MLogger::~MLogger()
{
m_config->deleteLater();
}

void MLogger::setRules(const QString &rules) {
auto tmpRules = rules;
m_rules = tmpRules.replace(";", "\n");
QLoggingCategory::setFilterRules(m_rules);
}

void MLogger::appendRules(const QString &rules) {
QString tmpRules = rules;
tmpRules = tmpRules.replace(";", "\n");
auto tmplist = tmpRules.split('\n');
for (int i = 0; i < tmplist.count(); ++i)
if (m_rules.contains(tmplist.at(i))) {
tmplist.removeAt(i);
--i;
}

if (tmplist.isEmpty()) {
return;
}

m_rules.isEmpty() ? m_rules = tmplist.join("\n")
: m_rules += "\n" + tmplist.join("\n");
}

31 changes: 31 additions & 0 deletions src/Common/reviselogger.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: GPL-3.0-or-later

#pragma once

#include <QObject>
#include <dtkcore_global.h>

DCORE_BEGIN_NAMESPACE
class DConfig;
DCORE_END_NAMESPACE

class MLogger : public QObject {
Q_OBJECT

public:
explicit MLogger(QObject *parent = nullptr);
~MLogger();

inline QString rules() const { return m_rules; }
void setRules(const QString &rules);

private:
void appendRules(const QString &rules);

private:
QString m_rules;
Dtk::Core::DConfig *m_config;
};

Loading