diff --git a/SpeckleConnector/Connector/Connector.cpp b/SpeckleConnector/Connector/Connector.cpp index f8a1c1f..1cc1645 100755 --- a/SpeckleConnector/Connector/Connector.cpp +++ b/SpeckleConnector/Connector/Connector.cpp @@ -22,7 +22,7 @@ namespace { const char* speckleDataDirName = "Speckle"; //The account database name const char* accountDBaseName = "Accounts.db"; - + ///The Connector addon class class ConnectorInstance : public ConnectorAddon { public: diff --git a/SpeckleLib/Speckle/Database/AccountDatabase.cpp b/SpeckleLib/Speckle/Database/AccountDatabase.cpp index 79af90c..94f0ac5 100644 --- a/SpeckleLib/Speckle/Database/AccountDatabase.cpp +++ b/SpeckleLib/Speckle/Database/AccountDatabase.cpp @@ -15,14 +15,19 @@ using namespace speckle::utility; namespace { + //Account field indices enum Fields { hashID = 0, contentID, }; + ///Internal name of the accounts dbase const char* accountsDBaseName = "accounts"; + ///Accounts table name const char* accountsTableName = "objects"; + ///Hash field name const char* hashFieldName = "hash"; + ///Content field name const char* contentFieldName = "content"; } @@ -48,6 +53,7 @@ namespace speckle::database { path: Path to the database file --------------------------------------------------------------------*/ AccountDatabase::AccountDatabase(const active::file::Path& path) { + //Create accounts database storage (with schema) m_store = std::make_unique( //Engine std::make_unique(path, @@ -55,6 +61,7 @@ AccountDatabase::AccountDatabase(const active::file::Path& path) { DBaseSchema{active::utility::String{accountsDBaseName}, //Tables { + //Account table { accountsTableName, Fields::hashID, Fields::contentID, { ValueSetting{StringValue{}, hashFieldName}, @@ -69,9 +76,7 @@ AccountDatabase::AccountDatabase(const active::file::Path& path) { /*-------------------------------------------------------------------- - Copy constructor - - source: The object to copy + Destructor --------------------------------------------------------------------*/ AccountDatabase::~AccountDatabase() {} diff --git a/SpeckleLib/Speckle/Database/Content/Record.cpp b/SpeckleLib/Speckle/Database/Content/Record.cpp index 87266dc..882a681 100644 --- a/SpeckleLib/Speckle/Database/Content/Record.cpp +++ b/SpeckleLib/Speckle/Database/Content/Record.cpp @@ -6,3 +6,19 @@ using namespace active::serialise; using namespace speckle::database; using namespace speckle::utility; +/*-------------------------------------------------------------------- + Fill an inventory with the package items + + inventory: The inventory to receive the package items + + return: True if the package has added items to the inventory + --------------------------------------------------------------------*/ +bool Record::fillInventory(active::serialise::Inventory& inventory) const { + using enum Entry::Type; + inventory.merge(Inventory{ + { + { Identity{"id"}, active::database::record::FieldIndex::idIndex, element }, + }, + }.withType(&typeid(base))); + return true; +} //Record::fillInventory diff --git a/SpeckleLib/Speckle/Database/Content/Record.h b/SpeckleLib/Speckle/Database/Content/Record.h index ecc6257..2c9c089 100644 --- a/SpeckleLib/Speckle/Database/Content/Record.h +++ b/SpeckleLib/Speckle/Database/Content/Record.h @@ -42,6 +42,12 @@ namespace speckle::database { // MARK: - Serialisation + /*! + Fill an inventory with the package items + @param inventory The inventory to receive the package items + @return True if the package has added items to the inventory + */ + bool fillInventory(active::serialise::Inventory& inventory) const override; }; } diff --git a/SpeckleLib/Speckle/Record/Credentials/Account.cpp b/SpeckleLib/Speckle/Record/Credentials/Account.cpp index 8effc49..a0cfbb7 100644 --- a/SpeckleLib/Speckle/Record/Credentials/Account.cpp +++ b/SpeckleLib/Speckle/Record/Credentials/Account.cpp @@ -43,8 +43,10 @@ Account::Account(const String& ID) : base{ID} { /*-------------------------------------------------------------------- Fill an inventory with the package items - @param inventory The inventory to receive the package items - @return True if the package has added items to the inventory + + inventory: The inventory to receive the package items + + return: True if the package has added items to the inventory --------------------------------------------------------------------*/ bool Account::fillInventory(Inventory& inventory) const { using enum Entry::Type; @@ -62,8 +64,10 @@ bool Account::fillInventory(Inventory& inventory) const { /*-------------------------------------------------------------------- Get the specified cargo - @param item The inventory item to retrieve - @return The requested cargo (nullptr on failure) + + item: The inventory item to retrieve + + return: The requested cargo (nullptr on failure) --------------------------------------------------------------------*/ Cargo::Unique Account::getCargo(const Inventory::Item& item) const { if (item.ownerType != &typeid(Account)) diff --git a/SpeckleLib/Speckle/Record/Credentials/Account.h b/SpeckleLib/Speckle/Record/Credentials/Account.h index 32d17cb..ef236e5 100644 --- a/SpeckleLib/Speckle/Record/Credentials/Account.h +++ b/SpeckleLib/Speckle/Record/Credentials/Account.h @@ -2,7 +2,7 @@ #define SPECKLE_RECORD_CRED_ACCOUNT #include "Active/Setting/SettingList.h" -#include "Active/Database/Content/Record.h" +#include "Speckle/Database/Content/Record.h" #include "Speckle/Utility/String.h" namespace speckle::record::cred { @@ -10,12 +10,12 @@ namespace speckle::record::cred { /*! User account record class */ - class Account : public active::database::Record { + class Account : public speckle::database::Record { public: // MARK: - Types - using base = active::database::Record; + using base = speckle::database::Record; ///Unique pointer using Unique = std::unique_ptr; ///Shared pointer diff --git a/SpeckleLib/Speckle/Record/Credentials/ServerInfo.cpp b/SpeckleLib/Speckle/Record/Credentials/ServerInfo.cpp new file mode 100644 index 0000000..f8cfe91 --- /dev/null +++ b/SpeckleLib/Speckle/Record/Credentials/ServerInfo.cpp @@ -0,0 +1,111 @@ +#include "Speckle/Record/Credentials/ServerInfo.h" + +#include "Active/Serialise/Item/Wrapper/ValueWrap.h" +#include "Active/Serialise/Package/PackageWrap.h" +#include "Speckle/Utility/Guid.h" + +#include + +using namespace active::serialise; +using namespace speckle::record::cred; +using namespace speckle::utility; + +namespace { + + ///Serialisation fields + enum FieldIndex { + nameID, + companyID, + versionID, + contactID, + descriptionID, + frontEndID, + urlID, + migrationID, + }; + + ///Serialisation field IDs + static std::array fieldID = { + Identity{"name"}, + Identity{"company"}, + Identity{"version"}, + Identity{"adminContact"}, + Identity{"description"}, + Identity{"frontend2"}, + Identity{"url"}, + Identity{"migration"}, + }; + +} + +/*-------------------------------------------------------------------- + Fill an inventory with the package items + + inventory: The inventory to receive the package items + + return: True if the package has added items to the inventory + --------------------------------------------------------------------*/ +bool ServerInfo::fillInventory(Inventory& inventory) const { + using enum Entry::Type; + inventory.merge(Inventory{ + { + { fieldID[nameID], nameID, element }, + { fieldID[companyID], companyID, element }, + { fieldID[versionID], versionID, element }, + { fieldID[contactID], contactID, element }, + { fieldID[descriptionID], descriptionID, element }, + { fieldID[frontEndID], frontEndID, element }, + { fieldID[urlID], urlID, element }, + { fieldID[migrationID], migrationID, element }, + }, + }.withType(&typeid(ServerInfo))); + return true; +} //ServerInfo::fillInventory + + +/*-------------------------------------------------------------------- + Get the specified cargo + + item: The inventory item to retrieve + + return: The requested cargo (nullptr on failure) + --------------------------------------------------------------------*/ +Cargo::Unique ServerInfo::getCargo(const Inventory::Item& item) const { + if (item.ownerType != &typeid(ServerInfo)) + return nullptr; + using namespace active::serialise; + switch (item.index) { + case nameID: + return std::make_unique>(m_name); + case companyID: + return std::make_unique>(m_company); + case versionID: + return std::make_unique>(m_version); + case contactID: + return std::make_unique>(m_adminContact); + case descriptionID: + return std::make_unique>(m_description); + case frontEndID: + return std::make_unique>(m_frontend2); + case urlID: + return std::make_unique>(m_url); + case migrationID: + return std::make_unique(m_migration); + default: + return nullptr; //Requested an unknown index + } +} //ServerInfo::getCargo + + +/*-------------------------------------------------------------------- + Set to the default package content + --------------------------------------------------------------------*/ +void ServerInfo::setDefault() { + m_name.clear(); + m_company.clear(); + m_version.clear(); + m_adminContact.clear(); + m_description.clear(); + m_frontend2 = false; + m_url.clear(); +} //ServerInfo::setDefault diff --git a/SpeckleLib/Speckle/Record/Credentials/ServerInfo.h b/SpeckleLib/Speckle/Record/Credentials/ServerInfo.h new file mode 100644 index 0000000..8656546 --- /dev/null +++ b/SpeckleLib/Speckle/Record/Credentials/ServerInfo.h @@ -0,0 +1,90 @@ +#ifndef SPECKLE_RECORD_CRED_SERVER_INFO +#define SPECKLE_RECORD_CRED_SERVER_INFO + +#include "Active/Serialise/Package/Package.h" +#include "Speckle/Record/Credentials/ServerMigration.h" +#include "Speckle/Utility/String.h" + +namespace speckle::record::cred { + + /*! + Account server info + */ + class ServerInfo : public active::serialise::Package { + public: + + // MARK: - Constructors + + /*! + Default constructor + @param name The server name + @param company The company name + @param version The server version + @param contact Admin contact email + @param description The server description + @param url The server URL + @param isFrontEnd ? + @param migration Server migration record + */ + ServerInfo(const utility::String& name, const utility::String& company, const utility::String& version, const utility::String& contact, + const utility::String& description, const utility::String& url, bool isFrontEnd, const ServerMigration& migration) : + m_name{name}, m_company{company}, m_version{version}, m_adminContact{contact}, m_description{description}, + m_url{url}, m_frontend2{isFrontEnd}, m_migration{migration} {} + ServerInfo(const ServerInfo&) = default; + + // MARK: - Functions (const) + + /*! + Get the server name + @return The server name + */ + const utility::String& getName() const { return m_name; } + + // MARK: - Serialisation + + /*! + Fill an inventory with the package items + @param inventory The inventory to receive the package items + @return True if the package has added items to the inventory + */ + bool fillInventory(active::serialise::Inventory& inventory) const override; + /*! + Get the specified cargo + @param item The inventory item to retrieve + @return The requested cargo (nullptr on failure) + */ + Cargo::Unique getCargo(const active::serialise::Inventory::Item& item) const override; + /*! + Set to the default package content + */ + void setDefault() override; + + private: + ///Server name + utility::String m_name; + ///Company name + utility::String m_company; + ///Server version + utility::String m_version; + ///Admin contact email + utility::String m_adminContact; + ///Server description + utility::String m_description; + /*! + This field is not returned from the GQL API, it should be populated after construction from the response headers. + See "Speckle.Core.Credentials.AccountManager" + */ + bool m_frontend2 = false; + /*! + Server URL + This field is not returned from the GQL API, it should be populated after construction. + See "Speckle.Core.Credentials.AccountManager" + */ + utility::String m_url; + ///Server migration record + ServerMigration m_migration; + }; + +} + +#endif //SPECKLE_RECORD_CRED_SERVER_INFO diff --git a/SpeckleLib/Speckle/Record/Credentials/ServerMigration.cpp b/SpeckleLib/Speckle/Record/Credentials/ServerMigration.cpp new file mode 100644 index 0000000..e6ac223 --- /dev/null +++ b/SpeckleLib/Speckle/Record/Credentials/ServerMigration.cpp @@ -0,0 +1,75 @@ +#include "Speckle/Record/Credentials/ServerMigration.h" + +#include "Active/Serialise/Item/Wrapper/ValueWrap.h" +#include "Speckle/Utility/Guid.h" + +using namespace active::serialise; +using namespace speckle::record::cred; +using namespace speckle::utility; + +#include + +namespace { + + ///Serialisation fields + enum FieldIndex { + movedToID, + movedFromID, + }; + + ///Serialisation field IDs + static std::array fieldID = { + Identity{"movedTo"}, + Identity{"movedFrom"}, + }; + +} + +/*-------------------------------------------------------------------- + Fill an inventory with the package items + + inventory: The inventory to receive the package items + + return: True if the package has added items to the inventory + --------------------------------------------------------------------*/ +bool ServerMigration::fillInventory(Inventory& inventory) const { + using enum Entry::Type; + inventory.merge(Inventory{ + { + { fieldID[movedToID], movedToID, element }, + { fieldID[movedFromID], movedFromID, element }, + }, + }.withType(&typeid(ServerMigration))); + return true; +} //ServerMigration::fillInventory + + +/*-------------------------------------------------------------------- + Get the specified cargo + + item: The inventory item to retrieve + + return: The requested cargo (nullptr on failure) + --------------------------------------------------------------------*/ +Cargo::Unique ServerMigration::getCargo(const Inventory::Item& item) const { + if (item.ownerType != &typeid(ServerMigration)) + return nullptr; + using namespace active::serialise; + switch (item.index) { + case movedToID: + return std::make_unique>(movedTo); + case movedFromID: + return std::make_unique>(movedFrom); + default: + return nullptr; //Requested an unknown index + } +} //ServerMigration::getCargo + + +/*-------------------------------------------------------------------- + Set to the default package content + --------------------------------------------------------------------*/ +void ServerMigration::setDefault() { + movedTo.clear(); + movedFrom.clear(); +} //ServerMigration::setDefault diff --git a/SpeckleLib/Speckle/Record/Credentials/ServerMigration.h b/SpeckleLib/Speckle/Record/Credentials/ServerMigration.h new file mode 100644 index 0000000..7020c7b --- /dev/null +++ b/SpeckleLib/Speckle/Record/Credentials/ServerMigration.h @@ -0,0 +1,54 @@ +#ifndef SPECKLE_RECORD_CRED_SERVER_MIGRATION +#define SPECKLE_RECORD_CRED_SERVER_MIGRATION + +#include "Active/Serialise/Package/Package.h" +#include "Speckle/Utility/String.h" + +namespace speckle::record::cred { + + /*! + User account record class + */ + class ServerMigration : public active::serialise::Package { + public: + + // MARK: - Constructors + + /*! + Default constructor + @param mvTo New URI where this server is now deployed + @param mvFm Previous URI where this server used to be deployed + */ + ServerMigration(const speckle::utility::String& mvTo = speckle::utility::String{}, + const speckle::utility::String& mvFm = speckle::utility::String{}) : movedTo{mvTo}, movedFrom{mvFm} {} + + // MARK: - Public variables + + ///New URI where this server is now deployed + speckle::utility::String movedTo; + ///Previous URI where this server used to be deployed + speckle::utility::String movedFrom; + + // MARK: - Serialisation + + /*! + Fill an inventory with the package items + @param inventory The inventory to receive the package items + @return True if the package has added items to the inventory + */ + bool fillInventory(active::serialise::Inventory& inventory) const override; + /*! + Get the specified cargo + @param item The inventory item to retrieve + @return The requested cargo (nullptr on failure) + */ + Cargo::Unique getCargo(const active::serialise::Inventory::Item& item) const override; + /*! + Set to the default package content + */ + void setDefault() override; + }; + +} + +#endif //SPECKLE_RECORD_CRED_SERVER_MIGRATION diff --git a/SpeckleLib/Speckle/Record/Credentials/UserInfo.cpp b/SpeckleLib/Speckle/Record/Credentials/UserInfo.cpp new file mode 100644 index 0000000..2063e44 --- /dev/null +++ b/SpeckleLib/Speckle/Record/Credentials/UserInfo.cpp @@ -0,0 +1,94 @@ +#include "Speckle/Record/Credentials/UserInfo.h" + +#include "Active/Serialise/Item/Wrapper/ValueWrap.h" +#include "Active/Serialise/Package/PackageWrap.h" +#include "Speckle/Utility/Guid.h" + +#include + +using namespace active::serialise; +using namespace speckle::record::cred; +using namespace speckle::utility; + +namespace { + + ///Serialisation fields + enum FieldIndex { + idID, + nameID, + emailID, + companyID, + avatarID, + }; + + ///Serialisation field IDs + static std::array fieldID = { + Identity{"id"}, + Identity{"name"}, + Identity{"email"}, + Identity{"company"}, + Identity{"avatar"}, + }; + +} + +/*-------------------------------------------------------------------- + Fill an inventory with the package items + + inventory: The inventory to receive the package items + + return: True if the package has added items to the inventory + --------------------------------------------------------------------*/ +bool UserInfo::fillInventory(Inventory& inventory) const { + using enum Entry::Type; + inventory.merge(Inventory{ + { + { fieldID[idID], idID, element }, + { fieldID[nameID], nameID, element }, + { fieldID[emailID], emailID, element }, + { fieldID[companyID], companyID, element }, + { fieldID[avatarID], avatarID, element }, + }, + }.withType(&typeid(UserInfo))); + return true; +} //UserInfo::fillInventory + + +/*-------------------------------------------------------------------- + Get the specified cargo + + item: The inventory item to retrieve + + return: The requested cargo (nullptr on failure) + --------------------------------------------------------------------*/ +Cargo::Unique UserInfo::getCargo(const Inventory::Item& item) const { + if (item.ownerType != &typeid(UserInfo)) + return nullptr; + using namespace active::serialise; + switch (item.index) { + case idID: + return std::make_unique>(m_id); + case nameID: + return std::make_unique>(m_name); + case emailID: + return std::make_unique>(m_email); + case companyID: + return std::make_unique>(m_company); + case avatarID: + return std::make_unique>(m_avatar); + default: + return nullptr; //Requested an unknown index + } +} //UserInfo::getCargo + + +/*-------------------------------------------------------------------- + Set to the default package content + --------------------------------------------------------------------*/ +void UserInfo::setDefault() { + m_id.clear(); + m_name.clear(); + m_company.clear(); + m_email.clear(); + m_avatar.clear(); +} //UserInfo::setDefault diff --git a/SpeckleLib/Speckle/Record/Credentials/UserInfo.h b/SpeckleLib/Speckle/Record/Credentials/UserInfo.h new file mode 100644 index 0000000..84b2ff8 --- /dev/null +++ b/SpeckleLib/Speckle/Record/Credentials/UserInfo.h @@ -0,0 +1,77 @@ +#ifndef SPECKLE_RECORD_CRED_USER_INFO +#define SPECKLE_RECORD_CRED_USER_INFO + +#include "Active/Serialise/Package/Package.h" +#include "Speckle/Utility/String.h" + +namespace speckle::record::cred { + + /*! + User info + */ + class UserInfo : public active::serialise::Package { + public: + + // MARK: - Constructors + + /*! + Default constructor + @param ID The user ID + @param name The user name + @param email The user email + @param company The company name + @param avatar ? + */ + UserInfo(const utility::String& ID, const utility::String& name, const utility::String& email, const utility::String& company, + const utility::String& avatar) : + m_id{ID}, m_name{name}, m_email{email}, m_company{company}, m_avatar{avatar} {} + UserInfo(const UserInfo&) = default; + + // MARK: - Functions (const) + + /*! + Get the user ID + @return The user ID + */ + const utility::String& getID() const { return m_id; } + /*! + Get the user name + @return The user name + */ + const utility::String& getName() const { return m_name; } + + // MARK: - Serialisation + + /*! + Fill an inventory with the package items + @param inventory The inventory to receive the package items + @return True if the package has added items to the inventory + */ + bool fillInventory(active::serialise::Inventory& inventory) const override; + /*! + Get the specified cargo + @param item The inventory item to retrieve + @return The requested cargo (nullptr on failure) + */ + Cargo::Unique getCargo(const active::serialise::Inventory::Item& item) const override; + /*! + Set to the default package content + */ + void setDefault() override; + + private: + ///User ID + utility::String m_id; + ///User name + utility::String m_name; + ///User email + utility::String m_email; + ///Compsny name + utility::String m_company; + ///Avatar? + utility::String m_avatar; + }; + +} + +#endif //SPECKLE_RECORD_CRED_USER_INFO diff --git a/SpeckleLib/SpeckleLib.xcodeproj/project.pbxproj b/SpeckleLib/SpeckleLib.xcodeproj/project.pbxproj index ad74610..b47d85c 100644 --- a/SpeckleLib/SpeckleLib.xcodeproj/project.pbxproj +++ b/SpeckleLib/SpeckleLib.xcodeproj/project.pbxproj @@ -31,6 +31,12 @@ 21D0BD312C86FE090077E104 /* Index.h in Headers */ = {isa = PBXBuildFile; fileRef = 21D0BD2D2C86FE090077E104 /* Index.h */; }; 21D0BD322C86FE090077E104 /* Link.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 21D0BD2E2C86FE090077E104 /* Link.cpp */; }; 21D0BD332C86FE090077E104 /* Link.h in Headers */ = {isa = PBXBuildFile; fileRef = 21D0BD2F2C86FE090077E104 /* Link.h */; }; + 21D0BD4D2C8901A00077E104 /* ServerInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 21D0BD4B2C8901A00077E104 /* ServerInfo.h */; }; + 21D0BD4E2C8901A00077E104 /* ServerInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 21D0BD4C2C8901A00077E104 /* ServerInfo.cpp */; }; + 21D0BD552C890B1C0077E104 /* ServerMigration.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 21D0BD512C890B1C0077E104 /* ServerMigration.cpp */; }; + 21D0BD562C890B1C0077E104 /* ServerMigration.h in Headers */ = {isa = PBXBuildFile; fileRef = 21D0BD542C890B1C0077E104 /* ServerMigration.h */; }; + 21D0BD592C8910400077E104 /* UserInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 21D0BD572C8910400077E104 /* UserInfo.cpp */; }; + 21D0BD5A2C8910400077E104 /* UserInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 21D0BD582C8910400077E104 /* UserInfo.h */; }; 21F69F3B2C6B880C008B6A06 /* JSBaseTransport.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 21F69F382C6B880B008B6A06 /* JSBaseTransport.cpp */; }; 21F69F512C6CCC25008B6A06 /* BrowserBridge.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 21F69F4A2C6CCC25008B6A06 /* BrowserBridge.cpp */; }; 21F69F612C6D0286008B6A06 /* GetBindingsMethodNames.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 21F69F602C6D0286008B6A06 /* GetBindingsMethodNames.cpp */; }; @@ -120,6 +126,12 @@ 21D0BD2D2C86FE090077E104 /* Index.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Index.h; sourceTree = ""; }; 21D0BD2E2C86FE090077E104 /* Link.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Link.cpp; sourceTree = ""; }; 21D0BD2F2C86FE090077E104 /* Link.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Link.h; sourceTree = ""; }; + 21D0BD4B2C8901A00077E104 /* ServerInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ServerInfo.h; sourceTree = ""; }; + 21D0BD4C2C8901A00077E104 /* ServerInfo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ServerInfo.cpp; sourceTree = ""; }; + 21D0BD512C890B1C0077E104 /* ServerMigration.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ServerMigration.cpp; sourceTree = ""; }; + 21D0BD542C890B1C0077E104 /* ServerMigration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ServerMigration.h; sourceTree = ""; }; + 21D0BD572C8910400077E104 /* UserInfo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UserInfo.cpp; sourceTree = ""; }; + 21D0BD582C8910400077E104 /* UserInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UserInfo.h; sourceTree = ""; }; 21F69F012C66C229008B6A06 /* Doxyfile */ = {isa = PBXFileReference; lastKnownFileType = text; name = Doxyfile; path = Documentation/Doxyfile; sourceTree = ""; }; 21F69F192C6A0FE2008B6A06 /* JSBinding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSBinding.h; sourceTree = ""; }; 21F69F352C6AA9B3008B6A06 /* JSFunction.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = JSFunction.h; sourceTree = ""; }; @@ -376,6 +388,12 @@ children = ( 21F69F922C71087A008B6A06 /* Account.cpp */, 21F69F932C71087A008B6A06 /* Account.h */, + 21D0BD4C2C8901A00077E104 /* ServerInfo.cpp */, + 21D0BD4B2C8901A00077E104 /* ServerInfo.h */, + 21D0BD512C890B1C0077E104 /* ServerMigration.cpp */, + 21D0BD542C890B1C0077E104 /* ServerMigration.h */, + 21D0BD572C8910400077E104 /* UserInfo.cpp */, + 21D0BD582C8910400077E104 /* UserInfo.h */, ); path = Credentials; sourceTree = ""; @@ -424,10 +442,13 @@ 210CC8A02C81E34400610F58 /* Platform.h in Headers */, 21B67D0D2C7E0E8D00FD64FC /* ErrorReport.h in Headers */, 21D0BD332C86FE090077E104 /* Link.h in Headers */, + 21D0BD5A2C8910400077E104 /* UserInfo.h in Headers */, + 21D0BD562C890B1C0077E104 /* ServerMigration.h in Headers */, 210CC88F2C81A98500610F58 /* Guid64.h in Headers */, 21B67D002C7CE15100FD64FC /* Exception.h in Headers */, 21D0BD2C2C86FC350077E104 /* Record.h in Headers */, 210CC8802C80CD2A00610F58 /* BridgeChild.h in Headers */, + 21D0BD4D2C8901A00077E104 /* ServerInfo.h in Headers */, 2193518C2C62655700E5A69C /* MenuEvent.h in Headers */, 21D0BD312C86FE090077E104 /* Index.h in Headers */, ); @@ -554,16 +575,19 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 21D0BD552C890B1C0077E104 /* ServerMigration.cpp in Sources */, 21F69FA62C733EDA008B6A06 /* BridgeArgument.cpp in Sources */, 21F69F682C6DFB01008B6A06 /* RunMethod.cpp in Sources */, 21F69F812C6FF3B0008B6A06 /* BridgeArgumentWrap.cpp in Sources */, 2193517B2C624FC100E5A69C /* MenuSubscriber.cpp in Sources */, 21F69F612C6D0286008B6A06 /* GetBindingsMethodNames.cpp in Sources */, 21F93AEC2B2F406E009A2C5B /* Addon.cpp in Sources */, + 21D0BD4E2C8901A00077E104 /* ServerInfo.cpp in Sources */, 21B67D0E2C7E0E8D00FD64FC /* ErrorReport.cpp in Sources */, 21F69F7E2C6FD9FC008B6A06 /* GetCallResult.cpp in Sources */, 2193519B2C6278D900E5A69C /* SelectionSubscriber.cpp in Sources */, 21D0BD2B2C86FC350077E104 /* Record.cpp in Sources */, + 21D0BD592C8910400077E104 /* UserInfo.cpp in Sources */, 210CC8902C81A98500610F58 /* Guid64.cpp in Sources */, 21D0BD322C86FE090077E104 /* Link.cpp in Sources */, 219351B32C62CC1A00E5A69C /* String.cpp in Sources */,