/* * Squawk messenger. * Copyright (C) 2019 Yury Gubich * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "info.h" Shared::Info::Info (const QString& addr, EntryType tp): type(tp), address(addr), vcard(nullptr), activeKeys(nullptr), inactiveKeys(nullptr) { switch (type) { case EntryType::none: break; case EntryType::contact: case EntryType::ownAccount: vcard = new VCard(); activeKeys = new std::list(); inactiveKeys = new std::list(); break; default: throw 352; } } Shared::Info::Info (): type(EntryType::none), address(""), vcard(nullptr), activeKeys(nullptr), inactiveKeys(nullptr) {} Shared::Info::Info (const Shared::Info& other): type(other.type), address(other.address), vcard(nullptr), activeKeys(nullptr), inactiveKeys(nullptr) { switch (type) { case EntryType::none: break; case EntryType::contact: case EntryType::ownAccount: vcard = new VCard(other.getVCardRef()); activeKeys = new std::list(other.getActiveKeysRef()); inactiveKeys = new std::list(other.getInactiveKeysRef()); break; default: throw 353; } } Shared::Info::Info (Info&& other): type(other.type), address(other.address), vcard(other.vcard), activeKeys(other.activeKeys), inactiveKeys(other.inactiveKeys) { other.type = EntryType::none; } Shared::Info& Shared::Info::operator = (Info&& other) { type = other.type; address = other.address; vcard = other.vcard; activeKeys = other.activeKeys; inactiveKeys = other.inactiveKeys; other.type = EntryType::none; return *this; } Shared::Info& Shared::Info::operator = (const Info& other) { type = other.type; address = other.address; switch (type) { case EntryType::none: break; case EntryType::contact: case EntryType::ownAccount: vcard = new VCard(other.getVCardRef()); activeKeys = new std::list(other.getActiveKeysRef()); inactiveKeys = new std::list(other.getInactiveKeysRef()); break; default: throw 351; } return *this; } Shared::Info::~Info () { turnIntoNone(); } void Shared::Info::turnIntoNone () { switch (type) { case EntryType::none: break; case EntryType::contact: case EntryType::ownAccount: delete vcard; vcard = nullptr; delete activeKeys; activeKeys = nullptr; delete inactiveKeys; inactiveKeys = nullptr; break; default: break; } type = EntryType::none; } void Shared::Info::turnIntoContact (const Shared::VCard& crd, const std::list& aks, const std::list& iaks) { switch (type) { case EntryType::none: vcard = new VCard(crd); activeKeys = new std::list(aks); inactiveKeys = new std::list(iaks); break; case EntryType::contact: case EntryType::ownAccount: *vcard = crd; *activeKeys = aks; *inactiveKeys = iaks; break; default: break; } type = EntryType::contact; } void Shared::Info::turnIntoContact (Shared::VCard* crd, std::list* aks, std::list* iaks) { switch (type) { case EntryType::contact: case EntryType::ownAccount: delete vcard; delete activeKeys; delete inactiveKeys; [[fallthrough]]; case EntryType::none: vcard = crd; activeKeys = aks; inactiveKeys = iaks; break; default: break; } type = EntryType::contact; } void Shared::Info::turnIntoOwnAccount (const Shared::VCard& crd, const std::list& aks, const std::list& iaks) { switch (type) { case EntryType::none: vcard = new VCard(crd); activeKeys = new std::list(aks); inactiveKeys = new std::list(iaks); break; case EntryType::contact: case EntryType::ownAccount: *vcard = crd; *activeKeys = aks; *inactiveKeys = iaks; break; default: break; } type = EntryType::ownAccount; } void Shared::Info::turnIntoOwnAccount (Shared::VCard* crd, std::list* aks, std::list* iaks) { switch (type) { case EntryType::contact: case EntryType::ownAccount: delete vcard; delete activeKeys; delete inactiveKeys; [[fallthrough]]; case EntryType::none: vcard = crd; activeKeys = aks; inactiveKeys = iaks; break; default: break; } type = EntryType::ownAccount; } void Shared::Info::setAddress (const QString& addr) { address = addr; } QString Shared::Info::getAddress () const { return address; } const QString& Shared::Info::getAddressRef () const { return address; } Shared::EntryType Shared::Info::getType () const { return type; } std::list& Shared::Info::getActiveKeysRef () { switch (type) { case EntryType::contact: case EntryType::ownAccount: return *activeKeys; break; default: throw 354; } } const std::list& Shared::Info::getActiveKeysRef () const { switch (type) { case EntryType::contact: case EntryType::ownAccount: return *activeKeys; break; default: throw 355; } } std::list* Shared::Info::getActiveKeys () { switch (type) { case EntryType::contact: case EntryType::ownAccount: return activeKeys; break; default: throw 356; } } const std::list* Shared::Info::getActiveKeys () const { switch (type) { case EntryType::contact: case EntryType::ownAccount: return activeKeys; break; default: throw 357; } } std::list& Shared::Info::getInactiveKeysRef () { switch (type) { case EntryType::contact: case EntryType::ownAccount: return *inactiveKeys; break; default: throw 358; } } const std::list& Shared::Info::getInactiveKeysRef () const { switch (type) { case EntryType::contact: case EntryType::ownAccount: return *inactiveKeys; break; default: throw 359; } } std::list* Shared::Info::getInactiveKeys () { switch (type) { case EntryType::contact: case EntryType::ownAccount: return inactiveKeys; break; default: throw 360; } } const std::list* Shared::Info::getInactiveKeys () const { switch (type) { case EntryType::contact: case EntryType::ownAccount: return inactiveKeys; break; default: throw 361; } } const Shared::VCard& Shared::Info::getVCardRef () const { switch (type) { case EntryType::contact: case EntryType::ownAccount: return *vcard; break; default: throw 362; } } Shared::VCard& Shared::Info::getVCardRef () { switch (type) { case EntryType::contact: case EntryType::ownAccount: return *vcard; break; default: throw 363; } } const Shared::VCard* Shared::Info::getVCard () const { switch (type) { case EntryType::contact: case EntryType::ownAccount: return vcard; break; default: throw 364; } } Shared::VCard* Shared::Info::getVCard () { switch (type) { case EntryType::contact: case EntryType::ownAccount: return vcard; break; default: throw 365; } } void Shared::Info::setActiveKeys (std::list* keys) { switch (type) { case EntryType::contact: case EntryType::ownAccount: activeKeys = keys; break; default: throw 366; } } void Shared::Info::setVCard (Shared::VCard* card) { switch (type) { case EntryType::contact: case EntryType::ownAccount: vcard = card; break; default: throw 367; } }