#include #include "impl/application_manager.h" #include "impl/application.h" #include "applicationmanageradaptor.h" #include "applicationadaptor.h" #include "../modules/applicationhelper/helper.h" #include "../modules/apps/appmanager.h" #include "../modules/launcher/launchermanager.h" #include "../modules/dock/dockmanager.h" #include #include #include DCORE_USE_NAMESPACE 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("/deepin/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; } int main(int argc, char *argv[]) { QCoreApplication app(argc, argv); app.setOrganizationName("deepin"); app.setApplicationName("dde-application-manager"); DLogManager::registerConsoleAppender(); DLogManager::registerFileAppender(); new AppManager(ApplicationManager::Instance()); new LauncherManager(ApplicationManager::Instance()); new DockManager(ApplicationManager::Instance()); new ApplicationManagerAdaptor(ApplicationManager::Instance()); QDBusConnection::sessionBus().registerService("org.desktopspec.Application"); QDBusConnection::sessionBus().registerService("org.desktopspec.ApplicationManager"); QDBusConnection::sessionBus().registerObject("/org/desktopspec/ApplicationManager", "org.desktopspec.ApplicationManager", ApplicationManager::Instance()); QList> apps{ scanFiles() }; QList> appAdapters; for (const QSharedPointer app : apps) { QSharedPointer adapter = QSharedPointer(new ApplicationAdaptor(app.get())); appAdapters << adapter; QDBusConnection::sessionBus().registerObject(app->path().path(), "org.desktopspec.Application", app.get()); } ApplicationManager::Instance()->addApplication(apps); return app.exec(); }