diff --git a/RingD.cpp b/RingD.cpp index 77f84c92a2dfd40e8c43e70237db2a6d19c9fbe5..945b23002beb9ba3adff53d9373ce199ac7dc521 100644 --- a/RingD.cpp +++ b/RingD.cpp @@ -234,7 +234,9 @@ RingD::parseAccountDetails(const AccountDetailsBlob& allAccountDetails) void RingD::connectivityChanged() { - DRing::connectivityChanged(); + if (daemonRunning_) { + DRing::connectivityChanged(); + } } void @@ -1206,11 +1208,14 @@ RingD::registerCallbacks() // Otherwise, if it is not already been trusted, we can ignore it completely. if (contact) { if (contact->_trustStatus == TrustStatus::CONTACT_REQUEST_SENT) { - // get the vcard first - auto vcard = contact->getVCard(); - auto parsedPayload = VCardUtils::parseContactRequestPayload(payloadString); - vcard->setData(parsedPayload.at("VCARD")); - vcard->completeReception(); + + if (!payloadString.empty()) { + auto vcard = contact->getVCard(); + auto parsedPayload = VCardUtils::parseContactRequestPayload(payloadString); + vcard->setData(parsedPayload.at("VCARD")); + vcard->completeReception(); + contact->_displayName = Utils::toPlatformString(vcard->getPart("FN")); + } DRing::acceptTrustRequest(account_id, from); MSG_("Auto accepted IncomingTrustRequest"); @@ -1224,33 +1229,38 @@ RingD::registerCallbacks() else { // No contact found, so add a new contact with the INCOMNG_CONTACT_REQUEST trust status flag contact = contactListModel->addNewContact("", fromP, TrustStatus::INCOMING_CONTACT_REQUEST, false); - } - // The visible ring id will potentially be replaced by a username after a lookup - RingD::instance->lookUpAddress(account_id, Utils::toPlatformString(from)); + // The visible ring id will potentially be replaced by a username after a lookup + RingD::instance->lookUpAddress(account_id, Utils::toPlatformString(from)); - auto vcard = contact->getVCard(); - auto parsedPayload = VCardUtils::parseContactRequestPayload(payloadString); - vcard->setData(parsedPayload.at("VCARD")); - vcard->completeReception(); + if (!contact) + return; - // The name is the ring id for now - contact->_name = Utils::toPlatformString(from); - contact->_displayName = Utils::toPlatformString(vcard->getPart("FN")); + auto vcard = contact->getVCard(); + if (!payloadString.empty()) { + auto parsedPayload = VCardUtils::parseContactRequestPayload(payloadString); + vcard->setData(parsedPayload.at("VCARD")); + vcard->completeReception(); + contact->_displayName = Utils::toPlatformString(vcard->getPart("FN")); + } - contactListModel->saveContactsToFile(); - AccountsViewModel::instance->raiseUnreadContactRequest(); + // The name is the ring id for now + contact->_name = Utils::toPlatformString(from); - SmartPanelItemsViewModel::instance->refreshFilteredItemsList(); - SmartPanelItemsViewModel::instance->update(ViewModel::NotifyStrings::notifySmartPanelItem); + contactListModel->saveContactsToFile(); + AccountsViewModel::instance->raiseUnreadContactRequest(); + + SmartPanelItemsViewModel::instance->refreshFilteredItemsList(); + SmartPanelItemsViewModel::instance->update(ViewModel::NotifyStrings::notifySmartPanelItem); - // Add a corresponding contact request control item to the list. - auto newContactRequest = ref new ContactRequestItem(); - newContactRequest->_contact = contact; - ContactRequestItemsViewModel::instance->itemsList->InsertAt(0, newContactRequest); + // Add a corresponding contact request control item to the list. + auto newContactRequest = ref new ContactRequestItem(); + newContactRequest->_contact = contact; + ContactRequestItemsViewModel::instance->itemsList->InsertAt(0, newContactRequest); - ContactRequestItemsViewModel::instance->refreshFilteredItemsList(); - ContactRequestItemsViewModel::instance->update(ViewModel::NotifyStrings::notifyContactRequestItem); + ContactRequestItemsViewModel::instance->refreshFilteredItemsList(); + ContactRequestItemsViewModel::instance->update(ViewModel::NotifyStrings::notifyContactRequestItem); + } } })); }), @@ -1504,12 +1514,12 @@ RingD::startDaemon() IAsyncAction^ action = ThreadPool::RunAsync(ref new WorkItemHandler([=](IAsyncAction^ spAction) { - CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(CoreDispatcherPriority::Normal, - ref new DispatchedHandler([=]() { - if (!isInWizard) { - setOverlayStatusText("Loading from config...", "#ff000000"); - } - })); + if (!isInWizard) { + CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(CoreDispatcherPriority::Normal, + ref new DispatchedHandler([=]() { + setOverlayStatusText("Loading from config...", "#ff000000"); + })); + } daemonRunning_ = DRing::start(); diff --git a/VCardUtils.cpp b/VCardUtils.cpp index fe8521b021eb7b1b1619ccf88bf9923e465a0587..aea0c332ad150ed5604e5d4a3b965afffb930095 100644 --- a/VCardUtils.cpp +++ b/VCardUtils.cpp @@ -136,11 +136,6 @@ VCard::parseFromString() break; } - while (std::getline(_data, _line)) { - if (_line.find("PHOTO;") != std::string::npos) - break; - } - size_t pos = _line.find("PNG:"); if (pos == std::string::npos) { pos = _line.find("JPEG:"); diff --git a/VCardUtils.h b/VCardUtils.h index 105f523c18900477310f0f42d3e7280809e54fd4..f2bf0033f46d3d14a8349c2c6bcf5764d6980692 100644 --- a/VCardUtils.h +++ b/VCardUtils.h @@ -43,7 +43,7 @@ struct Symbols { constexpr static const char* OF_TOKEN = "of="; constexpr static const char* SEPERATOR1 = ";"; constexpr static const char* SEPERATOR2 = ":"; - constexpr static const char* PHOTO_ENC = "ENDCODING=BASE64"; + constexpr static const char* PHOTO_ENC = "ENCODING=BASE64"; constexpr static const char* PHOTO_TYPE = "TYPE=PNG"; };