void CTCPServer::Announce(EAnnouncementFlag flag, const char *sender, const char *message, const CVariant &data) { Value root; root["jsonrpc"] = "2.0"; root["method"] = "Announcement"; root["params"]["sender"] = sender; root["params"]["message"] = message; if (!data.isNull()) data.toJsonValue(root["params"]["data"]); StyledWriter writer; std::string str = writer.write(root); for (unsigned int i = 0; i < m_connections.size(); i++) { { CSingleLock lock (m_connections[i].m_critSection); if ((m_connections[i].GetAnnouncementFlags() & flag) == 0) continue; } unsigned int sent = 0; do { CSingleLock lock (m_connections[i].m_critSection); sent += send(m_connections[i].m_socket, str.c_str(), str.size() - sent, sent); } while (sent < str.size()); } }
void CFileItemHandler::FillDetails(ISerializable* info, CFileItemPtr item, const Value& fields, Value &result) { if (info == NULL || fields.size() == 0) return; CVariant data; info->Serialize(data); Value serialization; data.toJsonValue(serialization); for (unsigned int i = 0; i < fields.size(); i++) { CStdString field = fields[i].asString(); if (item) { if (item->IsAlbum() && item->HasProperty("album_" + field)) { if (field == "rating") result[field] = item->GetPropertyInt("album_rating"); else if (field == "label") result["album_label"] = item->GetProperty("album_label"); else result[field] = item->GetProperty("album_" + field); continue; } if (item->HasProperty("artist_" + field)) { result[field] = item->GetProperty("artist_" + field); continue; } if (field == "fanart") { CStdString cachedFanArt = item->GetCachedFanart(); if (!cachedFanArt.IsEmpty()) { result["fanart"] = cachedFanArt.c_str(); } continue; } } if (serialization.isMember(field) && !result.isMember(field)) result[field] = serialization[field]; } }