11#pragma once
22
3+ #include " SharedDataSource.h"
4+
35// M26 ownership boundary: catalog/reference services remain local to each
46// device. These contracts cover shared, Host-authoritative application data.
57// The composition root supplies local implementations today and may supply
2527
2628class PartReferenceManifest ;
2729
30+ enum class ApplicationServiceAvailability
31+ {
32+ AvailableLocal,
33+ AvailableRemote,
34+ UnavailableNotConnected,
35+ UnavailableMaintenance
36+ };
37+
38+ struct ApplicationServiceStatus
39+ {
40+ ApplicationServiceAvailability availability = ApplicationServiceAvailability::AvailableLocal;
41+ QString message;
42+ bool isAvailable () const
43+ {
44+ return availability == ApplicationServiceAvailability::AvailableLocal
45+ || availability == ApplicationServiceAvailability::AvailableRemote;
46+ }
47+ };
48+
2849class WorkspaceApplicationService
2950{
3051public:
3152 virtual ~WorkspaceApplicationService () = default ;
53+ virtual ApplicationServiceStatus status () const { return {}; }
3254 virtual QList<Workspace> list () const = 0;
3355 virtual std::optional<Workspace> get (int workspaceId) const = 0;
3456 virtual bool exists (int workspaceId) const = 0;
@@ -41,6 +63,7 @@ class InventoryApplicationService
4163public:
4264 struct Page { QList<InventorySearchResult> rows; int total = 0 ; };
4365 virtual ~InventoryApplicationService () = default ;
66+ virtual ApplicationServiceStatus status () const { return {}; }
4467 virtual int count (const InventorySearchCriteria& criteria) const = 0;
4568 virtual QList<InventorySearchResult> searchRows (
4669 const InventorySearchCriteria& criteria) const = 0;
@@ -55,6 +78,7 @@ class BuildApplicationService
5578{
5679public:
5780 virtual ~BuildApplicationService () = default ;
81+ virtual ApplicationServiceStatus status () const { return {}; }
5882 virtual QList<Build> list (int workspaceId, bool includeArchived) const = 0;
5983 virtual std::optional<Build> get (int buildId) const = 0;
6084 virtual QList<BuildRequirement> requirements (int buildId) const = 0;
@@ -68,6 +92,7 @@ class CollectionApplicationService
6892public:
6993 struct Page { QList<CollectionSearchResult> rows; int total = 0 ; };
7094 virtual ~CollectionApplicationService () = default ;
95+ virtual ApplicationServiceStatus status () const { return {}; }
7196 virtual int count (const CollectionSearchCriteria& criteria) const = 0;
7297 virtual QList<CollectionSearchResult> searchRows (
7398 const CollectionSearchCriteria& criteria) const = 0;
@@ -80,6 +105,7 @@ class SharedPartReferenceCustomizationService
80105{
81106public:
82107 virtual ~SharedPartReferenceCustomizationService () = default ;
108+ virtual ApplicationServiceStatus status () const { return {}; }
83109 virtual QList<PartReferenceEntry> effectiveEntries (
84110 const PartReferenceManifest& manifest, QString* errorMessage) const = 0;
85111 virtual PartReferenceCustomizationResult add (
@@ -98,18 +124,24 @@ class ApplicationServices
98124 std::unique_ptr<InventoryApplicationService> inventory,
99125 std::unique_ptr<BuildApplicationService> builds,
100126 std::unique_ptr<CollectionApplicationService> collection,
101- std::unique_ptr<SharedPartReferenceCustomizationService> partReference);
127+ std::unique_ptr<SharedPartReferenceCustomizationService> partReference,
128+ SharedDataSource source = SharedDataSource::ThisComputer);
102129
103130 WorkspaceApplicationService& workspaces () const ;
104131 InventoryApplicationService& inventory () const ;
105132 BuildApplicationService& builds () const ;
106133 CollectionApplicationService& collection () const ;
107134 SharedPartReferenceCustomizationService& partReferenceCustomizations () const ;
135+ SharedDataSource sharedDataSource () const ;
136+ ApplicationServiceStatus sharedStatus () const ;
108137
109138private:
110139 std::unique_ptr<WorkspaceApplicationService> m_workspaces;
111140 std::unique_ptr<InventoryApplicationService> m_inventory;
112141 std::unique_ptr<BuildApplicationService> m_builds;
113142 std::unique_ptr<CollectionApplicationService> m_collection;
114143 std::unique_ptr<SharedPartReferenceCustomizationService> m_partReference;
144+ SharedDataSource m_source = SharedDataSource::ThisComputer;
115145};
146+
147+ std::unique_ptr<ApplicationServices> createUnavailableHostApplicationServices ();
0 commit comments