Example #1
0
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());
    }
}
Example #2
0
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];
  }
}