#include #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 #include #include 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> scanFiles() { QList> applications; auto apps = scan("/usr/share/applications/"); for (const QFileInfo &info : apps) { applications << QSharedPointer(new Application( "freedesktop", Application::Type::System, QSharedPointer(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(new Application( "freedesktop", Application::Type::System, QSharedPointer(new modules::ApplicationHelper::Helper(info.filePath())) )); } user = getpwent(); } endpwent(); auto linglong = scan("/persistent/linglong/entries/share/applications/"); for (const QFileInfo &info : linglong) { applications << QSharedPointer(new Application( "linglong", Application::Type::System, QSharedPointer(new modules::ApplicationHelper::Helper(info.filePath())) )); } return applications; } void init() { // 从DConfig中读取当前的显示模式,如果为空,则认为是第一次进入(新安装的系统),否则,就认为系统之前已经进入设置过,直接返回即可 QSharedPointer 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> apps{ scanFiles() }; QList> appAdapters; for (const QSharedPointer app : apps) { QSharedPointer adapter = QSharedPointer(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(); }