AM中初始化的显示模式设置为空,当AM第一次启动的时候,读取到的显示模式配置如果为空,就判断当前系统是否为社区版,如果是社区版,就让其配置为时尚模式,否则,就配置为高效模式 Log: Influence: 安装社区版,观察任务栏启动是否为时尚模式 Bug: https://pms.uniontech.com/bug-view-175723.html Change-Id: I51e7678716ca8064a61c8ab3b703d03beb779291
153 lines
5.4 KiB
C++
153 lines
5.4 KiB
C++
#include <QCoreApplication>
|
||
|
||
#include "impl/application_manager.h"
|
||
#include "impl/application.h"
|
||
#include "manageradaptor.h"
|
||
#include "application1adaptor.h"
|
||
#include "applicationhelper.h"
|
||
#include "mime1adaptor.h"
|
||
#include "settings.h"
|
||
#include "dsysinfo.h"
|
||
#include "../modules/apps/appmanager.h"
|
||
#include "../modules/launcher/launchermanager.h"
|
||
#include "../modules/dock/dockmanager.h"
|
||
#include "../modules/startmanager/startmanager.h"
|
||
#include "../modules/mimeapp/mime_app.h"
|
||
|
||
#include <QDir>
|
||
#include <DLog>
|
||
#include <pwd.h>
|
||
|
||
DCORE_USE_NAMESPACE
|
||
|
||
#define ApplicationManagerServiceName "org.deepin.dde.Application1.Manager"
|
||
#define ApplicationManagerServicePath "/org/deepin/dde/Application1/Manager"
|
||
#define ApplicationManagerInterface "org.deepin.dde.Application1.Manager"
|
||
|
||
QFileInfoList scan(const QString &path)
|
||
{
|
||
QDir dir(path);
|
||
dir.setFilter(QDir::Files);
|
||
dir.setNameFilters({ "*.desktop" });
|
||
return dir.entryInfoList();
|
||
}
|
||
|
||
// 扫描系统目录
|
||
// 扫描用户目录
|
||
QList<QSharedPointer<Application>> scanFiles()
|
||
{
|
||
QList<QSharedPointer<Application>> applications;
|
||
auto apps = scan("/usr/share/applications/");
|
||
for (const QFileInfo &info : apps) {
|
||
applications << QSharedPointer<Application>(new Application(
|
||
"freedesktop",
|
||
Application::Type::System,
|
||
QSharedPointer<modules::ApplicationHelper::Helper>(new modules::ApplicationHelper::Helper(info.filePath()))
|
||
));
|
||
}
|
||
|
||
struct passwd *user = getpwent();
|
||
while (user) {
|
||
auto userApps = scan(QString("%1/.local/share/applications/").arg(user->pw_dir));
|
||
for (const QFileInfo &info : userApps) {
|
||
applications << QSharedPointer<Application>(new Application(
|
||
"freedesktop",
|
||
Application::Type::System,
|
||
QSharedPointer<modules::ApplicationHelper::Helper>(new modules::ApplicationHelper::Helper(info.filePath()))
|
||
));
|
||
}
|
||
user = getpwent();
|
||
}
|
||
endpwent();
|
||
auto linglong = scan("/persistent/linglong/entries/share/applications/");
|
||
for (const QFileInfo &info : linglong) {
|
||
applications << QSharedPointer<Application>(new Application(
|
||
"linglong",
|
||
Application::Type::System,
|
||
QSharedPointer<modules::ApplicationHelper::Helper>(new modules::ApplicationHelper::Helper(info.filePath()))
|
||
));
|
||
}
|
||
|
||
return applications;
|
||
}
|
||
|
||
void init()
|
||
{
|
||
// 从DConfig中读取当前的显示模式,如果为空,则认为是第一次进入(新安装的系统),否则,就认为系统之前已经进入设置过,直接返回即可
|
||
QSharedPointer<DConfig> config(Settings::ConfigPtr("com.deepin.dde.dock"));
|
||
if (config.isNull() || !config->value("Display_Mode").toString().isEmpty())
|
||
return;
|
||
|
||
// 然后判断当前系统是否为社区版,社区版默认任务栏模式为时尚模式,其他版本默认为高效模式
|
||
QString displayMode = DSysInfo::isCommunityEdition() ? QString("fashion") : QString("efficient");
|
||
config->setValue("Display_Mode", displayMode);
|
||
}
|
||
|
||
int main(int argc, char *argv[])
|
||
{
|
||
QCoreApplication app(argc, argv);
|
||
app.setOrganizationName("deepin");
|
||
app.setApplicationName("dde-application-manager");
|
||
|
||
DLogManager::registerConsoleAppender();
|
||
DLogManager::registerFileAppender();
|
||
|
||
QTranslator *translator = new QTranslator();
|
||
translator->load(QString("/usr/share/dde-application-manager/translations/dde-application-manager_%1.qm").arg(QLocale::system().name()));
|
||
QCoreApplication::installTranslator(translator);
|
||
|
||
// 初始化
|
||
init();
|
||
|
||
new AppManager(ApplicationManager::instance());
|
||
new LauncherManager(ApplicationManager::instance());
|
||
new DockManager(ApplicationManager::instance());
|
||
new ManagerAdaptor(ApplicationManager::instance());
|
||
|
||
QDBusConnection connection = QDBusConnection::sessionBus();
|
||
if (!connection.registerService("org.deepin.dde.Application1")) {
|
||
qWarning() << "error: " << connection.lastError().message();
|
||
return -1;
|
||
}
|
||
|
||
if (!connection.registerService(ApplicationManagerServiceName)) {
|
||
qWarning() << "error: " << connection.lastError().message();
|
||
return -1;
|
||
}
|
||
|
||
if (!connection.registerObject(ApplicationManagerServicePath, ApplicationManagerInterface, ApplicationManager::instance())) {
|
||
qWarning() << "error: " << connection.lastError().message();
|
||
return -1;
|
||
}
|
||
|
||
QList<QSharedPointer<Application>> apps{ scanFiles() };
|
||
QList<QSharedPointer<Application1Adaptor>> appAdapters;
|
||
for (const QSharedPointer<Application> app : apps) {
|
||
QSharedPointer<Application1Adaptor> adapter = QSharedPointer<Application1Adaptor>(new Application1Adaptor(app.get()));
|
||
appAdapters << adapter;
|
||
if (!connection.registerObject(app->path().path(), "org.deepin.dde.Application1", app.get())) {
|
||
qWarning() << "error: " << connection.lastError().message();
|
||
continue;
|
||
}
|
||
}
|
||
|
||
ApplicationManager::instance()->addApplication(apps);
|
||
|
||
ApplicationManager::instance()->launchAutostartApps();
|
||
|
||
MimeApp* mimeApp = new MimeApp;
|
||
|
||
new Mime1Adaptor(mimeApp);
|
||
if (!connection.registerService("org.deepin.dde.Mime1")) {
|
||
qWarning() << "error: " << connection.lastError().message();
|
||
return -1;
|
||
}
|
||
|
||
if (!connection.registerObject("/org/deepin/dde/Mime1", "org.deepin.dde.Mime1", mimeApp)) {
|
||
qWarning() << "error: " << connection.lastError().message();
|
||
return -1;
|
||
}
|
||
|
||
return app.exec();
|
||
}
|