Skip to content

Commit fd18fa4

Browse files
gbookerKwiboo
authored andcommitted
Added fetching of photos from multiple servers for screensaver.
1 parent 3d6a1f1 commit fd18fa4

File tree

2 files changed

+45
-44
lines changed

2 files changed

+45
-44
lines changed

plex/GUI/GUIPlexScreenSaverPhoto.cpp

Lines changed: 44 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,6 @@ bool CGUIPlexScreenSaverPhoto::OnMessage(CGUIMessage &message)
4343
{
4444
if (!m_multiImage)
4545
{
46-
CPlexServerPtr server = g_plexApplication.serverManager->GetBestServer();
47-
if (!server)
48-
return false;
49-
5046
CLabelInfo info;
5147
info.textColor = 0xfff5f5f5;
5248
info.font = g_fontManager.GetFont("Regular-30", true);
@@ -109,24 +105,8 @@ bool CGUIPlexScreenSaverPhoto::OnMessage(CGUIMessage &message)
109105
else
110106
m_showType = FANART;
111107

112-
CURL art = server->BuildPlexURL("/library/arts");
113-
art.SetOption("sort", "random");
114-
115-
if (m_showType == PHOTOS)
116-
{
117-
art.SetOption("type", boost::lexical_cast<std::string>(PLEX_MEDIA_FILTER_TYPE_PHOTO));
118-
}
119-
else
120-
{
121-
std::stringstream optval;
122-
optval << PLEX_MEDIA_FILTER_TYPE_MOVIE << "," << PLEX_MEDIA_FILTER_TYPE_SHOW << ","
123-
<< PLEX_MEDIA_FILTER_TYPE_ARTIST;
124-
art.SetOption("type", optval.str());
125-
}
126-
127-
art.SetOption("X-Plex-Container-Start", "0");
128-
art.SetOption("X-Plex-Container-Size", "50");
129-
CJobManager::GetInstance().AddJob(new CPlexDirectoryFetchJob(art), this);
108+
if (!loadPhotos())
109+
return false;
130110

131111
m_moveTimer.restart();
132112
}
@@ -161,34 +141,55 @@ bool CGUIPlexScreenSaverPhoto::OnMessage(CGUIMessage &message)
161141
}
162142
}
163143
case GUI_MSG_PLEX_MULTIIMAGE_ROLLOVER:
144+
{
164145
if (m_multiImage && message.GetSenderId() == m_multiImage->GetID())
165146
{
166-
CPlexServerPtr server = g_plexApplication.serverManager->GetBestServer();
167-
if (!server)
147+
if (!loadPhotos())
168148
return false;
169-
CURL art = server->BuildPlexURL("/library/arts");
170-
art.SetOption("sort", "random");
171-
172-
if (m_showType == PHOTOS)
173-
{
174-
art.SetOption("type", boost::lexical_cast<std::string>(PLEX_MEDIA_FILTER_TYPE_PHOTO));
175-
}
176-
else
177-
{
178-
std::stringstream optval;
179-
optval << PLEX_MEDIA_FILTER_TYPE_MOVIE << "," << PLEX_MEDIA_FILTER_TYPE_SHOW << ","
180-
<< PLEX_MEDIA_FILTER_TYPE_ARTIST;
181-
art.SetOption("type", optval.str());
182-
}
183-
184-
art.SetOption("X-Plex-Container-Start", "0");
185-
art.SetOption("X-Plex-Container-Size", "50");
186-
CJobManager::GetInstance().AddJob(new CPlexDirectoryFetchJob(art), this);
187149
}
150+
}
188151
}
189152
return CGUIDialog::OnMessage(message);
190153
}
191154

155+
///////////////////////////////////////////////////////////////////////////////////////////////////
156+
bool CGUIPlexScreenSaverPhoto::loadPhotos()
157+
{
158+
PlexServerList servers = g_plexApplication.serverManager->GetAllServers(CPlexServerManager::SERVER_OWNED, true);
159+
160+
if (servers.empty())
161+
servers = g_plexApplication.serverManager->GetAllServers(CPlexServerManager::SERVER_ALL, true);
162+
163+
if (servers.empty())
164+
return false;
165+
166+
m_images = CFileItemListPtr(new CFileItemList());
167+
168+
BOOST_FOREACH(const CPlexServerPtr& server, servers)
169+
{
170+
CURL art = server->BuildPlexURL("/library/arts");
171+
art.SetOption("sort", "random");
172+
173+
if (m_showType == PHOTOS)
174+
{
175+
art.SetOption("type", boost::lexical_cast<std::string>(PLEX_MEDIA_FILTER_TYPE_PHOTO));
176+
}
177+
else
178+
{
179+
std::stringstream optval;
180+
optval << PLEX_MEDIA_FILTER_TYPE_MOVIE << "," << PLEX_MEDIA_FILTER_TYPE_SHOW << ","
181+
<< PLEX_MEDIA_FILTER_TYPE_ARTIST;
182+
art.SetOption("type", optval.str());
183+
}
184+
185+
art.SetOption("X-Plex-Container-Start", "0");
186+
art.SetOption("X-Plex-Container-Size", "50");
187+
CJobManager::GetInstance().AddJob(new CPlexDirectoryFetchJob(art), this);
188+
}
189+
190+
return true;
191+
}
192+
192193
///////////////////////////////////////////////////////////////////////////////////////////////////
193194
void CGUIPlexScreenSaverPhoto::getXYPosition(int& x, int& y, int& alignment)
194195
{
@@ -337,8 +338,7 @@ void CGUIPlexScreenSaverPhoto::OnJobComplete(unsigned int jobID, bool success, C
337338
CPlexDirectoryFetchJob *fj = static_cast<CPlexDirectoryFetchJob*>(job);
338339
if (fj)
339340
{
340-
m_images = CFileItemListPtr(new CFileItemList());
341-
m_images->Assign(fj->m_items);
341+
m_images->Assign(fj->m_items, true);
342342

343343
if (!m_multiImage)
344344
m_multiImage = new CGUIMultiImage(GetID(), 1234, 0, 0,

plex/GUI/GUIPlexScreenSaverPhoto.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ class CGUIPlexScreenSaverPhoto : public CGUIDialog, public IJobCallback
3232

3333
void OnJobComplete(unsigned int jobID, bool success, CJob *job);
3434

35+
bool loadPhotos();
3536
void moveLabels();
3637
void getXYPosition(int &x, int &y, int &alignment);
3738

0 commit comments

Comments
 (0)