1 /*
2 * SPDX-FileCopyrightText: 2014 Kevin Ottens <ervin@kde.org>
3 * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
4 */
5
6 #include "dependencies.h"
7
8 #include "akonadi/akonadicontextqueries.h"
9 #include "akonadi/akonadicontextrepository.h"
10 #include "akonadi/akonadidatasourcequeries.h"
11 #include "akonadi/akonadidatasourcerepository.h"
12 #include "akonadi/akonadiprojectqueries.h"
13 #include "akonadi/akonadiprojectrepository.h"
14 #include "akonadi/akonaditaskqueries.h"
15 #include "akonadi/akonaditaskrepository.h"
16
17 #include "akonadi/akonadicache.h"
18 #include "akonadi/akonadicachingstorage.h"
19 #include "akonadi/akonadimonitorimpl.h"
20 #include "akonadi/akonadiserializer.h"
21 #include "akonadi/akonadistorage.h"
22
23 #include "presentation/availablepagesmodel.h"
24 #include "presentation/availablesourcesmodel.h"
25 #include "presentation/editormodel.h"
26 #include "presentation/runningtaskmodel.h"
27
28 #include "utils/dependencymanager.h"
29
initializeGlobalAppDependencies()30 void Integration::initializeGlobalAppDependencies()
31 {
32 auto &deps = Utils::DependencyManager::globalInstance();
33 initializeDefaultAkonadiDependencies(deps);
34 initializeDefaultDomainDependencies(deps);
35 initializeDefaultPresentationDependencies(deps);
36 }
37
initializeDefaultAkonadiDependencies(Utils::DependencyManager & deps)38 void Integration::initializeDefaultAkonadiDependencies(Utils::DependencyManager &deps)
39 {
40 deps.add<Akonadi::Cache,
41 Akonadi::Cache(Akonadi::SerializerInterface*, Akonadi::MonitorInterface*),
42 Utils::DependencyManager::UniqueInstance>();
43 deps.add<Akonadi::MonitorInterface, Akonadi::MonitorImpl, Utils::DependencyManager::UniqueInstance>();
44 deps.add<Akonadi::SerializerInterface, Akonadi::Serializer, Utils::DependencyManager::UniqueInstance>();
45 deps.add<Akonadi::StorageInterface, Utils::DependencyManager::UniqueInstance>([] (Utils::DependencyManager *deps) {
46 return new Akonadi::CachingStorage(deps->create<Akonadi::Cache>(),
47 Akonadi::StorageInterface::Ptr(new Akonadi::Storage));
48 });
49 }
50
initializeDefaultDomainDependencies(Utils::DependencyManager & deps)51 void Integration::initializeDefaultDomainDependencies(Utils::DependencyManager &deps)
52 {
53 deps.add<Domain::ContextQueries,
54 Akonadi::ContextQueries(Akonadi::StorageInterface*,
55 Akonadi::SerializerInterface*,
56 Akonadi::MonitorInterface*,
57 Akonadi::Cache*)>();
58
59 deps.add<Domain::ContextRepository,
60 Akonadi::ContextRepository(Akonadi::StorageInterface*,
61 Akonadi::SerializerInterface*)>();
62
63 deps.add<Domain::DataSourceQueries,
64 Akonadi::DataSourceQueries(Akonadi::StorageInterface*,
65 Akonadi::SerializerInterface*,
66 Akonadi::MonitorInterface*)>();
67
68 deps.add<Domain::DataSourceRepository,
69 Akonadi::DataSourceRepository(Akonadi::StorageInterface*,
70 Akonadi::SerializerInterface*)>();
71
72 deps.add<Domain::ProjectQueries,
73 Akonadi::ProjectQueries(Akonadi::StorageInterface*,
74 Akonadi::SerializerInterface*,
75 Akonadi::MonitorInterface*)>();
76
77 deps.add<Domain::ProjectRepository,
78 Akonadi::ProjectRepository(Akonadi::StorageInterface*,
79 Akonadi::SerializerInterface*)>();
80
81 deps.add<Domain::TaskQueries,
82 Akonadi::TaskQueries(Akonadi::StorageInterface*,
83 Akonadi::SerializerInterface*,
84 Akonadi::MonitorInterface*,
85 Akonadi::Cache*)>();
86
87 deps.add<Domain::TaskRepository,
88 Akonadi::TaskRepository(Akonadi::StorageInterface*,
89 Akonadi::SerializerInterface*)>();
90 }
91
initializeDefaultPresentationDependencies(Utils::DependencyManager & deps)92 void Integration::initializeDefaultPresentationDependencies(Utils::DependencyManager &deps)
93 {
94 deps.add<Presentation::EditorModel>([] (Utils::DependencyManager *deps) {
95 auto model = new Presentation::EditorModel;
96 auto repository = deps->create<Domain::TaskRepository>();
97 model->setSaveFunction([repository] (const Domain::Task::Ptr &task) {
98 Q_ASSERT(task);
99 return repository->update(task);
100 });
101 return model;
102 });
103
104 deps.add<Presentation::AvailablePagesModel,
105 Presentation::AvailablePagesModel(Domain::DataSourceQueries*,
106 Domain::ProjectQueries*,
107 Domain::ProjectRepository*,
108 Domain::ContextQueries*,
109 Domain::ContextRepository*,
110 Domain::TaskQueries*,
111 Domain::TaskRepository*)>();
112
113 deps.add<Presentation::AvailableSourcesModel,
114 Presentation::AvailableSourcesModel(Domain::DataSourceQueries*,
115 Domain::DataSourceRepository*)>();
116
117 deps.add<Presentation::RunningTaskModel,
118 Presentation::RunningTaskModel(Domain::TaskQueries*,
119 Domain::TaskRepository*)>();
120 }
121