type = VIDEODB_CONTENT_TVSHOWS;
if (HasVideoInfoTag() && GetVideoInfoTag()->m_iSeason > -1 && !m_bIsFolder) // episode
type = VIDEODB_CONTENT_EPISODES;
- if (HasVideoInfoTag() && !GetVideoInfoTag()->m_strArtist.IsEmpty())
+ if (HasVideoInfoTag() && !GetVideoInfoTag()->m_artist.empty())
type = VIDEODB_CONTENT_MUSICVIDEOS;
return type;
}
strContent = "files";
if (m_currentFile->HasVideoInfoTag() && m_currentFile->GetVideoInfoTag()->m_iSeason > -1) // episode
strContent = "episodes";
- if (m_currentFile->HasVideoInfoTag() && !m_currentFile->GetVideoInfoTag()->m_strArtist.IsEmpty())
+ if (m_currentFile->HasVideoInfoTag() && !m_currentFile->GetVideoInfoTag()->m_artist.empty())
strContent = "musicvideos";
if (m_currentFile->HasVideoInfoTag() && m_currentFile->GetVideoInfoTag()->m_strStatus == "livetv")
strContent = "livetv";
case VIDEOPLAYER_CAST_AND_ROLE:
return m_currentFile->GetVideoInfoTag()->GetCast(true);
case VIDEOPLAYER_ARTIST:
- return m_currentFile->GetVideoInfoTag()->m_strArtist;
+ return StringUtils::Join(m_currentFile->GetVideoInfoTag()->m_artist, g_advancedSettings.m_videoItemSeparator);
case VIDEOPLAYER_ALBUM:
return m_currentFile->GetVideoInfoTag()->m_strAlbum;
case VIDEOPLAYER_WRITER:
}
case LISTITEM_ARTIST:
if (item->HasVideoInfoTag())
- return item->GetVideoInfoTag()->m_strArtist;
+ return StringUtils::Join(item->GetVideoInfoTag()->m_artist, g_advancedSettings.m_videoItemSeparator);
if (item->HasMusicInfoTag())
return StringUtils::Join(item->GetMusicInfoTag()->GetArtist(), g_advancedSettings.m_musicItemSeparator);
break;
if (item->HasMusicInfoTag())
artist = StringUtils::Join(item->GetMusicInfoTag()->GetArtist(), g_advancedSettings.m_musicItemSeparator);
else if (item->HasVideoInfoTag())
- artist = item->GetVideoInfoTag()->m_strArtist;
+ artist = StringUtils::Join(item->GetVideoInfoTag()->m_artist, g_advancedSettings.m_videoItemSeparator);
label += " " + artist;
if (item->HasMusicInfoTag())
if (item->HasMusicInfoTag())
artist = StringUtils::Join(item->GetMusicInfoTag()->GetArtist(), g_advancedSettings.m_musicItemSeparator);
else if (item->HasVideoInfoTag())
- artist = item->GetVideoInfoTag()->m_strArtist;
+ artist = StringUtils::Join(item->GetVideoInfoTag()->m_artist, g_advancedSettings.m_videoItemSeparator);
label += " " + RemoveArticles(artist);
if (item->HasMusicInfoTag())
if (item->HasMusicInfoTag())
label = StringUtils::Join(item->GetMusicInfoTag()->GetArtist(), g_advancedSettings.m_musicItemSeparator);
else if (item->HasVideoInfoTag())
- label = item->GetVideoInfoTag()->m_strArtist;
+ label = StringUtils::Join(item->GetVideoInfoTag()->m_artist, g_advancedSettings.m_videoItemSeparator);
if (g_advancedSettings.m_bMusicLibraryAlbumsSortByArtistThenYear)
{
if (item->HasMusicInfoTag())
label = StringUtils::Join(item->GetMusicInfoTag()->GetArtist(), g_advancedSettings.m_musicItemSeparator);
else if (item->HasVideoInfoTag())
- label = item->GetVideoInfoTag()->m_strArtist;
+ label = StringUtils::Join(item->GetVideoInfoTag()->m_artist, g_advancedSettings.m_videoItemSeparator);
label = RemoveArticles(label);
if (g_advancedSettings.m_bMusicLibraryAlbumsSortByArtistThenYear)
{
if (!item.HasVideoInfoTag())
return "";
- if (!item.GetVideoInfoTag()->m_strArtist.IsEmpty())
- return GetThumb(item.GetVideoInfoTag()->m_strArtist,g_settings.GetMusicFanartFolder());
+ if (!item.GetVideoInfoTag()->m_artist.empty())
+ return GetThumb(StringUtils::Join(item.GetVideoInfoTag()->m_artist, g_advancedSettings.m_videoItemSeparator),g_settings.GetMusicFanartFolder());
if (!item.m_bIsFolder && !item.GetVideoInfoTag()->m_strShowTitle.IsEmpty())
{
CStdString showPath;
#include <stdio.h>
#include "utils/log.h"
#include "utils/Variant.h"
+#include "utils/StringUtils.h"
#include "FileItem.h"
#include "music/tags/MusicInfoTag.h"
#include "music/MusicDatabase.h"
case VIDEODB_CONTENT_MUSICVIDEOS:
if (!item->GetVideoInfoTag()->m_strAlbum.empty())
object["album"] = item->GetVideoInfoTag()->m_strAlbum;
- if (!item->GetVideoInfoTag()->m_strArtist.empty())
- object["artist"] = item->GetVideoInfoTag()->m_strArtist;
+ if (!item->GetVideoInfoTag()->m_artist.empty())
+ object["artist"] = StringUtils::Join(item->GetVideoInfoTag()->m_artist, " / ");
break;
}
}
if (item->HasMusicInfoTag())
strArtist = StringUtils::Join(item->GetMusicInfoTag()->GetArtist(), g_advancedSettings.m_musicItemSeparator);
if (item->HasVideoInfoTag())
- strArtist = item->GetVideoInfoTag()->m_strArtist;
+ strArtist = StringUtils::Join(item->GetVideoInfoTag()->m_artist, g_advancedSettings.m_videoItemSeparator);
if (strArtist.IsEmpty())
continue;
map<CStdString, CStdString>::iterator artist = artists.find(strArtist);
*file_path = tag.m_strFileNameAndPath;
if (tag.m_iDbId != -1 ) {
- if (!tag.m_strArtist.IsEmpty()) {
+ if (!tag.m_artist.empty()) {
object.m_ObjectClass.type = "object.item.videoItem.musicVideoClip";
- object.m_Creator = tag.m_strArtist;
+ object.m_Creator = StringUtils::Join(tag.m_artist, g_advancedSettings.m_videoItemSeparator);
object.m_Title = tag.m_strTitle;
object.m_ReferenceID = NPT_String::Format("videodb://3/2/%i", tag.m_iDbId);
} else if (!tag.m_strShowTitle.IsEmpty()) {
break;
case VIDEODATABASEDIRECTORY::NODE_TYPE_ACTOR:
container->m_ObjectClass.type += ".person.videoArtist";
- container->m_Creator = tag.m_strArtist;
+ container->m_Creator = StringUtils::Join(tag.m_artist, g_advancedSettings.m_videoItemSeparator);
container->m_Title = tag.m_strTitle;
break;
case VIDEODATABASEDIRECTORY::NODE_TYPE_TITLE_TVSHOWS:
case 'A':
if (music && music->GetArtist().size())
value = StringUtils::Join(music->GetArtist(), g_advancedSettings.m_musicItemSeparator);
- if (movie && movie->m_strArtist.size())
- value = movie->m_strArtist;
+ if (movie && movie->m_artist.size())
+ value = StringUtils::Join(movie->m_artist, g_advancedSettings.m_videoItemSeparator);
break;
case 'T':
if (music && music->GetTitle().size())
home->SetProperty("LatestMusicVideo." + value + ".Plot" , item->GetVideoInfoTag()->m_strPlot);
home->SetProperty("LatestMusicVideo." + value + ".RunningTime" , item->GetVideoInfoTag()->m_strRuntime);
home->SetProperty("LatestMusicVideo." + value + ".Path" , item->GetVideoInfoTag()->m_strFileNameAndPath);
- home->SetProperty("LatestMusicVideo." + value + ".Artist" , item->GetVideoInfoTag()->m_strArtist);
+ home->SetProperty("LatestMusicVideo." + value + ".Artist" , StringUtils::Join(item->GetVideoInfoTag()->m_artist, g_advancedSettings.m_videoItemSeparator));
if (!item->HasThumbnail())
m_thumbLoader.LoadItem(item.get());
{
CVideoInfoTag tag = GetDetailsForMusicVideo(m_pDS);
CFileItemPtr pItem(new CFileItem(tag));
- pItem->SetLabel(tag.m_strArtist);
+ pItem->SetLabel(StringUtils::Join(tag.m_artist, g_advancedSettings.m_videoItemSeparator));
items.Add(pItem);
m_pDS->next();
}
AddGenreAndDirectorsAndStudios(details,vecDirectors,vecGenres,vecStudios);
// add artists...
- if (!details.m_strArtist.IsEmpty())
+ if (!details.m_artist.empty())
{
- CStdStringArray vecArtists;
- StringUtils::SplitString(details.m_strArtist, g_advancedSettings.m_videoItemSeparator, vecArtists);
- for (unsigned int i = 0; i < vecArtists.size(); i++)
+ for (unsigned int i = 0; i < details.m_artist.size(); i++)
{
- CStdString artist = vecArtists[i];
+ CStdString artist = details.m_artist[i];
artist.Trim();
int idArtist = AddActor(artist,"");
AddArtistToMusicVideo(idMVideo, idArtist);
pItem->SetLabelPreformated(true);
if (!items.Contains(pItem->GetPath()))
{
- pItem->GetVideoInfoTag()->m_strArtist = it->second.second;
+ pItem->GetVideoInfoTag()->m_artist.push_back(it->second.second);
CStdString strThumb = CThumbnailCache::GetAlbumThumb(*pItem);
if (CFile::Exists(strThumb))
pItem->SetThumbnailImage(strThumb);
pItem->SetLabelPreformated(true);
if (!items.Contains(pItem->GetPath()))
{
- pItem->GetVideoInfoTag()->m_strArtist = m_pDS->fv(2).get_asString();
+ pItem->GetVideoInfoTag()->m_artist.push_back(m_pDS->fv(2).get_asString());
CStdString strThumb = CThumbnailCache::GetAlbumThumb(pItem->GetLabel(), m_pDS->fv(2).get_asString());
if (CFile::Exists(strThumb))
pItem->SetThumbnailImage(strThumb);
pItem->GetVideoInfoTag()->m_playCount = (m_pDS->fv(4).get_asInt() == m_pDS->fv(3).get_asInt()) ? 1 : 0;
}
if (idContent == VIDEODB_CONTENT_MUSICVIDEOS)
- pItem->GetVideoInfoTag()->m_strArtist = pItem->GetLabel();
+ pItem->GetVideoInfoTag()->m_artist.push_back(pItem->GetLabel());
items.Add(pItem);
m_pDS->next();
}
CFileItem saveItem(item);
if (!singleFiles)
{
- CStdString strFileName(movie.m_strArtist + "." + movie.m_strTitle);
+ CStdString strFileName(StringUtils::Join(movie.m_artist, g_advancedSettings.m_videoItemSeparator) + "." + movie.m_strTitle);
if (movie.m_iYear > 0)
strFileName.AppendFormat("_%i", movie.m_iYear);
saveItem = CFileItem(GetSafeFile(musicvideosDir, strFileName) + ".avi", false);
bool useFolders = info.m_basePath.IsEmpty() ? LookupByFolders(item.GetPath()) : false;
scanner.AddVideo(&item, CONTENT_MUSICVIDEOS, useFolders);
SetPlayCount(item, info.m_playCount, info.m_lastPlayed);
- CStdString strFileName(info.m_strArtist + "." + info.m_strTitle);
+ CStdString strFileName(StringUtils::Join(info.m_artist, g_advancedSettings.m_videoItemSeparator) + "." + info.m_strTitle);
if (iVersion >= 1 && info.m_iYear > 0)
strFileName.AppendFormat("_%i", info.m_iYear);
CStdString file(GetSafeFile(musicvideosDir, strFileName));
{ VIDEODB_TYPE_INT, my_offsetof(CVideoInfoTag,m_iYear) },
{ VIDEODB_TYPE_STRING, my_offsetof(CVideoInfoTag,m_strPlot) },
{ VIDEODB_TYPE_STRING, my_offsetof(CVideoInfoTag,m_strAlbum) },
- { VIDEODB_TYPE_STRING, my_offsetof(CVideoInfoTag,m_strArtist) },
+ { VIDEODB_TYPE_STRINGARRAY, my_offsetof(CVideoInfoTag,m_artist) },
{ VIDEODB_TYPE_STRINGARRAY, my_offsetof(CVideoInfoTag,m_genre) },
{ VIDEODB_TYPE_INT, my_offsetof(CVideoInfoTag,m_iTrack) },
{ VIDEODB_TYPE_STRING, my_offsetof(CVideoInfoTag,m_basePath) },
m_firstAired.Reset();
m_studio.clear();
m_strAlbum.clear();
- m_strArtist.clear();
+ m_artist.clear();
m_strTrailer.clear();
m_iTop250 = 0;
m_iYear = 0;
TiXmlText th(it->thumbUrl.GetFirstThumb().m_url);
thumbNode->InsertEndChild(th);
}
- XMLUtils::SetAdditiveString(movie, "artist",
- g_advancedSettings.m_videoItemSeparator, m_strArtist);
+ XMLUtils::SetStringArray(movie, "artist", m_artist);
XMLUtils::SetStringArray(movie, "showlink", m_showLink);
TiXmlElement resume("resume");
ar << m_firstAired;
ar << m_strShowTitle;
ar << m_strAlbum;
- ar << m_strArtist;
+ ar << m_artist;
ar << m_playCount;
ar << m_lastPlayed;
ar << m_iTop250;
ar >> m_firstAired;
ar >> m_strShowTitle;
ar >> m_strAlbum;
- ar >> m_strArtist;
+ ar >> m_artist;
ar >> m_playCount;
ar >> m_lastPlayed;
ar >> m_iTop250;
value["firstaired"] = m_firstAired.IsValid() ? m_firstAired.GetAsDBDate() : StringUtils::EmptyString;
value["showtitle"] = m_strShowTitle;
value["album"] = m_strAlbum;
- value["artist"] = m_strArtist;
+ value["artist"] = StringUtils::Join(m_artist, " / ");
value["playcount"] = m_playCount;
value["lastplayed"] = m_lastPlayed.IsValid() ? m_lastPlayed.GetAsDBDateTime() : StringUtils::EmptyString;
value["top250"] = m_iTop250;
// artists
node = movie->FirstChildElement("artist");
if (node && node->FirstChild() && prioritise)
- m_strArtist.clear();
+ m_artist.clear();
while (node)
{
const TiXmlNode* pNode = node->FirstChild("name");
if (pValue)
{
const char* clear=node->Attribute("clear");
- if (m_strArtist.IsEmpty() || (clear && stricmp(clear,"true")==0))
- m_strArtist = pValue;
- else
- m_strArtist += g_advancedSettings.m_videoItemSeparator + pValue;
+ if (clear && stricmp(clear,"true")==0)
+ m_artist.clear();
+ vector<string> artists = StringUtils::Split(pValue, g_advancedSettings.m_videoItemSeparator);
+ m_artist.insert(m_artist.end(), artists.begin(), artists.end());
}
node = node->NextSiblingElement("artist");
}
CStdString m_strTitle;
CStdString m_strSortTitle;
CStdString m_strVotes;
- CStdString m_strArtist;
+ std::vector<std::string> m_artist;
std::vector< SActorInfo > m_cast;
typedef std::vector< SActorInfo >::const_iterator iCast;
std::vector<std::string> m_set;
VIDEODB_CONTENT_TYPE type = (VIDEODB_CONTENT_TYPE)m_movieItem->GetVideoContentType();
if (type == VIDEODB_CONTENT_MUSICVIDEOS)
{ // music video
- CStdStringArray artists;
- StringUtils::SplitString(m_movieItem->GetVideoInfoTag()->m_strArtist, g_advancedSettings.m_videoItemSeparator, artists);
- for (std::vector<CStdString>::const_iterator it = artists.begin(); it != artists.end(); ++it)
+ const std::vector<std::string> &artists = m_movieItem->GetVideoInfoTag()->m_artist;
+ for (std::vector<std::string>::const_iterator it = artists.begin(); it != artists.end(); ++it)
{
CFileItemPtr item(new CFileItem(*it));
if (CFile::Exists(item->GetCachedArtistThumb()))
{
if (m_bViewReview)
{
- if (!m_movieItem->GetVideoInfoTag()->m_strArtist.IsEmpty())
+ if (!m_movieItem->GetVideoInfoTag()->m_artist.empty())
{
SET_CONTROL_LABEL(CONTROL_BTN_TRACKS, 133);
}
db.GetMusicVideosByArtist(strSearch, movies);
for (int i = 0; i < movies.Size(); ++i)
{
- CStdString label = movies[i]->GetVideoInfoTag()->m_strArtist + " - " + movies[i]->GetVideoInfoTag()->m_strTitle;
+ CStdString label = StringUtils::Join(movies[i]->GetVideoInfoTag()->m_artist, g_advancedSettings.m_videoItemSeparator) + " - " + movies[i]->GetVideoInfoTag()->m_strTitle;
if (movies[i]->GetVideoInfoTag()->m_iYear > 0)
label.AppendFormat(" (%i)", movies[i]->GetVideoInfoTag()->m_iYear);
movies[i]->SetLabel(label);
}
if (pItem->HasVideoInfoTag() && pItem->GetVideoInfoTag()->m_iSeason > -1 && !pItem->m_bIsFolder)
iType = VIDEODB_CONTENT_EPISODES;
- if (pItem->HasVideoInfoTag() && !pItem->GetVideoInfoTag()->m_strArtist.IsEmpty())
+ if (pItem->HasVideoInfoTag() && !pItem->GetVideoInfoTag()->m_artist.empty())
iType = VIDEODB_CONTENT_MUSICVIDEOS;
if (params.GetSetId() != -1 && params.GetMovieId() == -1)
iType = VIDEODB_CONTENT_MOVIE_SETS;
#include "storage/MediaManager.h"
#include "utils/log.h"
#include "utils/URIUtils.h"
+#include "utils/StringUtils.h"
#include "pictures/Picture.h"
#include "TextureCache.h"
iType = VIDEODB_CONTENT_TVSHOWS;
if (pItem->HasVideoInfoTag() && pItem->GetVideoInfoTag()->m_iSeason > -1 && !pItem->m_bIsFolder)
iType = VIDEODB_CONTENT_EPISODES;
- if (pItem->HasVideoInfoTag() && !pItem->GetVideoInfoTag()->m_strArtist.IsEmpty())
+ if (pItem->HasVideoInfoTag() && !pItem->GetVideoInfoTag()->m_artist.empty())
iType = VIDEODB_CONTENT_MUSICVIDEOS;
// dont allow update while scanning
bool inPlaylists = m_vecItems->GetPath().Equals(CUtil::VideoPlaylistsLocation()) ||
m_vecItems->GetPath().Equals("special://videoplaylists/");
- if (item->HasVideoInfoTag() && !item->GetVideoInfoTag()->m_strArtist.IsEmpty())
+ if (item->HasVideoInfoTag() && !item->GetVideoInfoTag()->m_artist.empty())
{
CMusicDatabase database;
database.Open();
- if (database.GetArtistByName(item->GetVideoInfoTag()->m_strArtist) > -1)
+ if (database.GetArtistByName(StringUtils::Join(item->GetVideoInfoTag()->m_artist, g_advancedSettings.m_videoItemSeparator)) > -1)
buttons.Add(CONTEXT_BUTTON_GO_TO_ARTIST, 20396);
}
if (item->HasVideoInfoTag() && item->GetVideoInfoTag()->m_strAlbum.size() > 0)
buttons.Add(CONTEXT_BUTTON_GO_TO_ALBUM, 20397);
}
if (item->HasVideoInfoTag() && item->GetVideoInfoTag()->m_strAlbum.size() > 0 &&
- item->GetVideoInfoTag()->m_strArtist.size() > 0 &&
+ item->GetVideoInfoTag()->m_artist.size() > 0 &&
item->GetVideoInfoTag()->m_strTitle.size() > 0)
{
CMusicDatabase database;
database.Open();
- if (database.GetSongByArtistAndAlbumAndTitle(item->GetVideoInfoTag()->m_strArtist,
+ if (database.GetSongByArtistAndAlbumAndTitle(StringUtils::Join(item->GetVideoInfoTag()->m_artist, g_advancedSettings.m_videoItemSeparator),
item->GetVideoInfoTag()->m_strAlbum,
item->GetVideoInfoTag()->m_strTitle) > -1)
{
}
if (m_database.HasContent(VIDEODB_CONTENT_TVSHOWS) && item->HasVideoInfoTag() &&
!item->m_bIsFolder && item->GetVideoInfoTag()->m_iEpisode == -1 &&
- item->GetVideoInfoTag()->m_strArtist.IsEmpty() && item->GetVideoInfoTag()->m_iDbId >= 0) // movie entry
+ item->GetVideoInfoTag()->m_artist.empty() && item->GetVideoInfoTag()->m_iDbId >= 0) // movie entry
{
if (m_database.IsLinkedToTvshow(item->GetVideoInfoTag()->m_iDbId))
buttons.Add(CONTEXT_BUTTON_UNLINK_MOVIE,20385);
CStdString strPath;
CMusicDatabase database;
database.Open();
- strPath.Format("musicdb://2/%ld/",database.GetArtistByName(m_vecItems->Get(itemNumber)->GetVideoInfoTag()->m_strArtist));
+ strPath.Format("musicdb://2/%ld/",database.GetArtistByName(StringUtils::Join(m_vecItems->Get(itemNumber)->GetVideoInfoTag()->m_artist, g_advancedSettings.m_videoItemSeparator)));
g_windowManager.ActivateWindow(WINDOW_MUSIC_NAV,strPath);
return true;
}
CMusicDatabase database;
database.Open();
CSong song;
- if (database.GetSongById(database.GetSongByArtistAndAlbumAndTitle(m_vecItems->Get(itemNumber)->GetVideoInfoTag()->m_strArtist,m_vecItems->Get(itemNumber)->GetVideoInfoTag()->m_strAlbum,
+ if (database.GetSongById(database.GetSongByArtistAndAlbumAndTitle(StringUtils::Join(m_vecItems->Get(itemNumber)->GetVideoInfoTag()->m_artist, g_advancedSettings.m_videoItemSeparator),m_vecItems->Get(itemNumber)->GetVideoInfoTag()->m_strAlbum,
m_vecItems->Get(itemNumber)->GetVideoInfoTag()->m_strTitle),
song))
{