コード例 #1
0
ファイル: AudioLibrary.cpp プロジェクト: AFFLUENTSOCIETY/SPMC
JSONRPC_STATUS CAudioLibrary::GetAlbumDetails(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
{
  int albumID = (int)parameterObject["albumid"].asInteger();

  CMusicDatabase musicdatabase;
  if (!musicdatabase.Open())
    return InternalError;

  CAlbum album;
  if (!musicdatabase.GetAlbumInfo(albumID, album, NULL))
    return InvalidParams;

  CStdString path;
  if (!musicdatabase.GetAlbumPath(albumID, path))
    return InternalError;

  CFileItemPtr albumItem;
  FillAlbumItem(album, path, albumItem);

  CFileItemList items;
  items.Add(albumItem);
  JSONRPC_STATUS ret = GetAdditionalAlbumDetails(parameterObject, items, musicdatabase);
  if (ret != OK)
    return ret;
  
  HandleFileItem("albumid", false, "albumdetails", items[0], parameterObject, parameterObject["properties"], result, false);

  return OK;
}
コード例 #2
0
ファイル: AudioLibrary.cpp プロジェクト: marlboroman/xbmc
JSON_STATUS CAudioLibrary::GetAlbumDetails(const CStdString &method, ITransportLayer *transport, IClient *client, const Value &parameterObject, Value &result)
{
  int albumID = parameterObject["albumid"].asInt();

  CMusicDatabase musicdatabase;
  if (!musicdatabase.Open())
    return InternalError;

  CAlbum album;
  if (!musicdatabase.GetAlbumInfo(albumID, album, NULL))
  {
    musicdatabase.Close();
    return InvalidParams;
  }

  Json::Value validFields;
  MakeFieldsList(parameterObject, validFields);

  CStdString path;
  musicdatabase.GetAlbumPath(albumID, path);

  CFileItemPtr m_albumItem( new CFileItem(path, album) );
  m_albumItem->SetLabel(album.strAlbum);
  CMusicDatabase::SetPropertiesFromAlbum(*m_albumItem, album);
  m_albumItem->SetMusicThumb();
  HandleFileItem("albumid", false, "albumdetails", m_albumItem, parameterObject, validFields, result);

  musicdatabase.Close();
  return OK;
}
コード例 #3
0
ファイル: AudioLibrary.cpp プロジェクト: SunSeosahai/xbmc
bool CAudioLibrary::FillFileItem(const CStdString &strFilename, CFileItem &item)
{
  CMusicDatabase musicdatabase;
  if (strFilename.empty() || !musicdatabase.Open())
    return false;

  if (CDirectory::Exists(strFilename))
  {
    CAlbum album;
    int albumid = musicdatabase.GetAlbumIdByPath(strFilename);
    if (!musicdatabase.GetAlbumInfo(albumid, album, NULL))
      return false;

    item = CFileItem(strFilename, album);
  }
  else
  {
    CSong song;
    if (!musicdatabase.GetSongByFileName(strFilename, song))
      return false;

    item = CFileItem(song);
  }

  return true;
}
コード例 #4
0
JSON_STATUS CAudioLibrary::GetAlbumDetails(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
{
  int albumID = (int)parameterObject["albumid"].asInteger();

  CMusicDatabase musicdatabase;
  if (!musicdatabase.Open())
    return InternalError;

  CAlbum album;
  if (!musicdatabase.GetAlbumInfo(albumID, album, NULL))
  {
    musicdatabase.Close();
    return InvalidParams;
  }

  CStdString path;
  musicdatabase.GetAlbumPath(albumID, path);

  CFileItemPtr m_albumItem;
  FillAlbumItem(album, path, m_albumItem);
  HandleFileItem("albumid", false, "albumdetails", m_albumItem, parameterObject, parameterObject["properties"], result, false);

  musicdatabase.Close();
  return OK;
}
コード例 #5
0
bool CAudioLibrary::FillFileItem(const CStdString &strFilename, CFileItemPtr &item, const CVariant &parameterObject /* = CVariant(CVariant::VariantTypeArray) */)
{
    CMusicDatabase musicdatabase;
    if (strFilename.empty())
        return false;

    bool filled = false;
    if (musicdatabase.Open())
    {
        if (CDirectory::Exists(strFilename))
        {
            CAlbum album;
            int albumid = musicdatabase.GetAlbumIdByPath(strFilename);
            if (musicdatabase.GetAlbumInfo(albumid, album, NULL))
            {
                item->SetFromAlbum(album);

                CFileItemList items;
                items.Add(item);
                if (GetAdditionalAlbumDetails(parameterObject, items, musicdatabase) == OK)
                    filled = true;
            }
        }
        else
        {
            CSong song;
            if (musicdatabase.GetSongByFileName(strFilename, song))
            {
                item->SetFromSong(song);

                CFileItemList items;
                items.Add(item);
                if (GetAdditionalSongDetails(parameterObject, items, musicdatabase) == OK)
                    filled = true;
            }
        }
    }

    if (item->GetLabel().empty())
    {
        item->SetLabel(CUtil::GetTitleFromPath(strFilename, false));
        if (item->GetLabel().empty())
            item->SetLabel(URIUtils::GetFileName(strFilename));
    }

    return filled;
}
コード例 #6
0
ファイル: GUIDialogMusicInfo.cpp プロジェクト: OV3RDOSE/xbmc
void CGUIDialogMusicInfo::OnSearch(const CFileItem* pItem)
{
  CMusicDatabase database;
  database.Open();
  long idAlbum = database.GetAlbumByName(pItem->GetLabel(),m_artist.strArtist);
  if (idAlbum != -1)
  {
    CAlbum album;
    if (database.GetAlbumInfo(idAlbum,album,&album.songs))
    {
      CStdString strPath;
      database.GetAlbumPath(idAlbum,strPath);
      SetAlbum(album,strPath);
      Update();
    }
  }
}
コード例 #7
0
ファイル: MusicInfoLoader.cpp プロジェクト: DanielCoufal/xbmc
bool CMusicInfoLoader::LoadAdditionalTagInfo(CFileItem* pItem)
{
  if (!pItem || pItem->m_bIsFolder || pItem->IsPlayList() || pItem->IsNFO() || pItem->IsInternetStream())
    return false;

  if (pItem->GetProperty("hasfullmusictag") == "true")
    return false; // already have the information

  CStdString path(pItem->GetPath());
  if (pItem->IsMusicDb())
  {
    // set the artist / album properties
    XFILE::MUSICDATABASEDIRECTORY::CQueryParams param;
    XFILE::MUSICDATABASEDIRECTORY::CDirectoryNode::GetDatabaseInfo(pItem->GetPath(),param);
    CArtist artist;
    CMusicDatabase database;
    database.Open();
    if (database.GetArtistInfo(param.GetArtistId(),artist,false))
      CMusicDatabase::SetPropertiesFromArtist(*pItem,artist);

    CAlbum album;
    if (database.GetAlbumInfo(param.GetAlbumId(),album,NULL))
      CMusicDatabase::SetPropertiesFromAlbum(*pItem,album);

    path = pItem->GetMusicInfoTag()->GetURL();
  }

  CLog::Log(LOGDEBUG, "Loading additional tag info for file %s", path.c_str());

  // we load up the actual tag for this file
  auto_ptr<IMusicInfoTagLoader> pLoader (CMusicInfoTagLoaderFactory::CreateLoader(path));
  if (NULL != pLoader.get())
  {
    CMusicInfoTag tag;
    pLoader->Load(path, tag);
    // then we set the fields from the file tags to the item
    pItem->SetProperty("lyrics", tag.GetLyrics());
    pItem->SetProperty("hasfullmusictag", "true");
    return true;
  }
  return false;
}
コード例 #8
0
ファイル: AudioLibrary.cpp プロジェクト: AFFLUENTSOCIETY/SPMC
JSONRPC_STATUS CAudioLibrary::SetAlbumDetails(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
{
  int id = (int)parameterObject["albumid"].asInteger();

  CMusicDatabase musicdatabase;
  if (!musicdatabase.Open())
    return InternalError;

  CAlbum album;
  VECSONGS songs;
  if (!musicdatabase.GetAlbumInfo(id, album, &songs) || album.idAlbum <= 0)
    return InvalidParams;

  if (ParameterNotNull(parameterObject, "title"))
    album.strAlbum = parameterObject["title"].asString();
  if (ParameterNotNull(parameterObject, "artist"))
    CopyStringArray(parameterObject["artist"], album.artist);
  if (ParameterNotNull(parameterObject, "description"))
    album.strReview = parameterObject["description"].asString();
  if (ParameterNotNull(parameterObject, "genre"))
    CopyStringArray(parameterObject["genre"], album.genre);
  if (ParameterNotNull(parameterObject, "theme"))
    CopyStringArray(parameterObject["theme"], album.themes);
  if (ParameterNotNull(parameterObject, "mood"))
    CopyStringArray(parameterObject["mood"], album.moods);
  if (ParameterNotNull(parameterObject, "style"))
    CopyStringArray(parameterObject["style"], album.styles);
  if (ParameterNotNull(parameterObject, "type"))
    album.strType = parameterObject["type"].asString();
  if (ParameterNotNull(parameterObject, "albumlabel"))
    album.strLabel = parameterObject["albumlabel"].asString();
  if (ParameterNotNull(parameterObject, "rating"))
    album.iRating = (int)parameterObject["rating"].asInteger();
  if (ParameterNotNull(parameterObject, "year"))
    album.iYear = (int)parameterObject["year"].asInteger();

  if (musicdatabase.SetAlbumInfo(id, album, songs) <= 0)
    return InternalError;

  CJSONRPCUtils::NotifyItemUpdated();
  return ACK;
}
コード例 #9
0
bool CAudioLibrary::FillFileItem(const CStdString &strFilename, CFileItemPtr &item, const CVariant &parameterObject /* = CVariant(CVariant::VariantTypeArray) */)
{
    CMusicDatabase musicdatabase;
    if (strFilename.empty() || !musicdatabase.Open())
        return false;

    if (CDirectory::Exists(strFilename))
    {
        CAlbum album;
        int albumid = musicdatabase.GetAlbumIdByPath(strFilename);
        if (!musicdatabase.GetAlbumInfo(albumid, album, NULL))
            return false;

        item->SetFromAlbum(album);

        CFileItemList items;
        items.Add(item);
        if (GetAdditionalAlbumDetails(parameterObject, items, musicdatabase) != OK)
            return false;
    }
    else
    {
        CSong song;
        if (!musicdatabase.GetSongByFileName(strFilename, song))
            return false;

        item->SetFromSong(song);

        CFileItemList items;
        items.Add(item);
        if (GetAdditionalSongDetails(parameterObject, items, musicdatabase) != OK)
            return false;
    }

    return true;
}