mirror of
https://github.com/jellyfin/jellyfin-web
synced 2025-03-30 19:56:21 +00:00
more client sync stubs
This commit is contained in:
parent
fcc1746fde
commit
4ed9e6d637
12 changed files with 297 additions and 25 deletions
|
@ -46,7 +46,7 @@
|
||||||
return deferred.promise();
|
return deferred.promise();
|
||||||
}
|
}
|
||||||
|
|
||||||
function createLocalItem(libraryItem, serverId, originalFileName) {
|
function createLocalItem(libraryItem, serverInfo, originalFileName) {
|
||||||
|
|
||||||
var item = {};
|
var item = {};
|
||||||
|
|
||||||
|
|
|
@ -198,7 +198,7 @@
|
||||||
require(['localassetmanager'], function () {
|
require(['localassetmanager'], function () {
|
||||||
|
|
||||||
var libraryItem = jobItem.Item;
|
var libraryItem = jobItem.Item;
|
||||||
LocalAssetManager.createLocalItem(libraryItem, serverInfo.Id, jobItem.OriginalFileName).done(function (localItem) {
|
LocalAssetManager.createLocalItem(libraryItem, serverInfo, jobItem.OriginalFileName).done(function (localItem) {
|
||||||
|
|
||||||
downloadMedia(apiClient, jobItem, localItem).done(function () {
|
downloadMedia(apiClient, jobItem, localItem).done(function () {
|
||||||
|
|
||||||
|
|
268
dashboard-ui/cordova/localassetmanager.js
vendored
268
dashboard-ui/cordova/localassetmanager.js
vendored
|
@ -11,12 +11,29 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
function saveOfflineUser(user) {
|
|
||||||
var deferred = DeferredBuilder.Deferred();
|
var deferred = DeferredBuilder.Deferred();
|
||||||
deferred.resolve();
|
getLocalItem(itemId, serverId).done(function (localItem) {
|
||||||
|
|
||||||
|
if (localItem && localItem.MediaSources.length) {
|
||||||
|
|
||||||
|
var mediaSource = localItem.MediaSources[0];
|
||||||
|
|
||||||
|
fileExists(mediaSource.Path).done(function (exists) {
|
||||||
|
|
||||||
|
if (exists) {
|
||||||
|
deferred.resolveWith(null, [mediaSource]);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
deferred.resolveWith(null, [null]);
|
||||||
|
}
|
||||||
|
|
||||||
|
}).fail(getOnFail(deferred));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
deferred.resolveWith(null, [null]);
|
||||||
|
|
||||||
|
}).fail(getOnFail(deferred));
|
||||||
return deferred.promise();
|
return deferred.promise();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -46,71 +63,292 @@
|
||||||
return deferred.promise();
|
return deferred.promise();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function saveOfflineUser(user) {
|
||||||
|
|
||||||
|
// TODO
|
||||||
|
var deferred = DeferredBuilder.Deferred();
|
||||||
|
deferred.resolve();
|
||||||
|
return deferred.promise();
|
||||||
|
}
|
||||||
|
|
||||||
function getOfflineActions(serverId) {
|
function getOfflineActions(serverId) {
|
||||||
|
// TODO
|
||||||
var deferred = DeferredBuilder.Deferred();
|
var deferred = DeferredBuilder.Deferred();
|
||||||
deferred.resolveWith(null, [[]]);
|
deferred.resolveWith(null, [[]]);
|
||||||
return deferred.promise();
|
return deferred.promise();
|
||||||
}
|
}
|
||||||
|
|
||||||
function getServerItemIds(serverId) {
|
function getServerItemIds(serverId) {
|
||||||
|
// TODO
|
||||||
var deferred = DeferredBuilder.Deferred();
|
var deferred = DeferredBuilder.Deferred();
|
||||||
deferred.resolveWith(null, [[]]);
|
deferred.resolveWith(null, [[]]);
|
||||||
return deferred.promise();
|
return deferred.promise();
|
||||||
}
|
}
|
||||||
|
|
||||||
function removeLocalItem(itemId, serverId) {
|
function removeLocalItem(itemId, serverId) {
|
||||||
|
// TODO
|
||||||
var deferred = DeferredBuilder.Deferred();
|
var deferred = DeferredBuilder.Deferred();
|
||||||
deferred.resolveWith(null, []);
|
deferred.resolveWith(null, []);
|
||||||
return deferred.promise();
|
return deferred.promise();
|
||||||
}
|
}
|
||||||
|
|
||||||
function getLocalItem(itemId, serverId) {
|
function getLocalItem(itemId, serverId) {
|
||||||
|
// TODO
|
||||||
var deferred = DeferredBuilder.Deferred();
|
var deferred = DeferredBuilder.Deferred();
|
||||||
deferred.resolveWith(null, []);
|
deferred.resolveWith(null, []);
|
||||||
return deferred.promise();
|
return deferred.promise();
|
||||||
}
|
}
|
||||||
|
|
||||||
function addOrUpdateLocalItem(localItem) {
|
function addOrUpdateLocalItem(localItem) {
|
||||||
|
// TODO
|
||||||
var deferred = DeferredBuilder.Deferred();
|
var deferred = DeferredBuilder.Deferred();
|
||||||
deferred.resolveWith(null, []);
|
deferred.resolveWith(null, [null]);
|
||||||
return deferred.promise();
|
return deferred.promise();
|
||||||
}
|
}
|
||||||
|
|
||||||
function createLocalItem(libraryItem, serverId, originalFileName) {
|
function createLocalItem(libraryItem, serverInfo, originalFileName) {
|
||||||
|
|
||||||
|
var path = getDirectoryPath(libraryItem, serverInfo);
|
||||||
|
path.push(getLocalFileName(libraryItem, originalFileName));
|
||||||
|
|
||||||
var item = {};
|
var item = {};
|
||||||
|
|
||||||
var deferred = DeferredBuilder.Deferred();
|
var deferred = DeferredBuilder.Deferred();
|
||||||
deferred.resolveWith(null, [item]);
|
|
||||||
|
getFileSystem().done(function (fileSystem) {
|
||||||
|
|
||||||
|
var localPath = fileSystem.root.toURL() + "/" + path.join('/');
|
||||||
|
|
||||||
|
item.LocalPath = localPath;
|
||||||
|
|
||||||
|
for (var i = 0, length = libraryItem.MediaSources.length; i < length; i++) {
|
||||||
|
|
||||||
|
var mediaSource = libraryItem.MediaSources[i];
|
||||||
|
mediaSource.setPath(localPath);
|
||||||
|
mediaSource.setProtocol(MediaProtocol.File);
|
||||||
|
}
|
||||||
|
|
||||||
|
item.ServerId = serverInfo.Id;
|
||||||
|
item.Item = libraryItem;
|
||||||
|
item.ItemId = libraryItem.Id;
|
||||||
|
item.Id = getLocalId(item.ServerId, item.ItemId);
|
||||||
|
deferred.resolveWith(null, [item]);
|
||||||
|
});
|
||||||
|
|
||||||
return deferred.promise();
|
return deferred.promise();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getDirectoryPath(item, serverInfo) {
|
||||||
|
|
||||||
|
var parts = [];
|
||||||
|
parts.push(server.Name);
|
||||||
|
|
||||||
|
if (item.Type == "Episode") {
|
||||||
|
parts.push("TV");
|
||||||
|
parts.push(item.SeriesName);
|
||||||
|
|
||||||
|
if (item.SeasonName) {
|
||||||
|
parts.push(item.SeasonName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (item.MediaType == 'Video') {
|
||||||
|
parts.push("Videos");
|
||||||
|
parts.push(item.Name);
|
||||||
|
}
|
||||||
|
else if (item.MediaType == 'Audio') {
|
||||||
|
parts.push("Music");
|
||||||
|
|
||||||
|
if (item.AlbumArtist) {
|
||||||
|
parts.push(item.AlbumArtist);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (item.Album) {
|
||||||
|
parts.push(item.Album);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (item.MediaType == 'Photo') {
|
||||||
|
parts.push("Photos");
|
||||||
|
|
||||||
|
if (item.Album) {
|
||||||
|
parts.push(item.Album);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return parts.map(getValidFileName);
|
||||||
|
}
|
||||||
|
|
||||||
|
function getLocalFileName(libraryItem, originalFileName) {
|
||||||
|
|
||||||
|
var filename = originalFileName || libraryItem.Name;
|
||||||
|
|
||||||
|
return fileRepository.getValidFileName(filename);
|
||||||
|
}
|
||||||
|
|
||||||
|
function getValidFileName(filename) {
|
||||||
|
// TODO
|
||||||
|
return filename;
|
||||||
|
}
|
||||||
|
|
||||||
function downloadFile(url, localPath) {
|
function downloadFile(url, localPath) {
|
||||||
|
|
||||||
var deferred = DeferredBuilder.Deferred();
|
var deferred = DeferredBuilder.Deferred();
|
||||||
deferred.resolveWith(null, []);
|
|
||||||
|
Logger.log('downloading: ' + url + ' to ' + localPath);
|
||||||
|
var ft = new FileTransfer();
|
||||||
|
ft.download(url, localPath, function (entry) {
|
||||||
|
|
||||||
|
var localUrl = normalizeReturnUrl(entry.toURL());
|
||||||
|
|
||||||
|
Logger.log('Downloaded local url: ' + localUrl);
|
||||||
|
deferred.resolveWith(null, [localUrl]);
|
||||||
|
});
|
||||||
|
|
||||||
return deferred.promise();
|
return deferred.promise();
|
||||||
}
|
}
|
||||||
|
|
||||||
function downloadSubtitles(url, localItem, subtitleStreamh) {
|
function downloadSubtitles(url, localItem, subtitleStream) {
|
||||||
|
|
||||||
|
var path = item.LocalPath;
|
||||||
|
|
||||||
|
var filename = getSubtitleSaveFileName(item, subtitleStream.Language, subtitleStream.IsForced) + "." + subtitleStream.Codec.toLowerCase();
|
||||||
|
|
||||||
|
var parentPath = getParentDirectoryPath(path);
|
||||||
|
|
||||||
|
path = combinePaths(parentPath, filename);
|
||||||
|
|
||||||
|
return downloadFile(url, path);
|
||||||
|
}
|
||||||
|
|
||||||
|
function getSubtitleSaveFileName(item, language, isForced) {
|
||||||
|
|
||||||
|
var path = item.LocalPath;
|
||||||
|
|
||||||
|
var name = getNameWithoutExtension(path);
|
||||||
|
|
||||||
|
if (language) {
|
||||||
|
name += "." + language.toLowerCase();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isForced) {
|
||||||
|
name += ".foreign";
|
||||||
|
}
|
||||||
|
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getNameWithoutExtension(path) {
|
||||||
|
|
||||||
|
var parts = path.split('/');
|
||||||
|
var name = parts[parts.length - 1];
|
||||||
|
|
||||||
|
var index = name.lastIndexOf('.');
|
||||||
|
|
||||||
|
if (index != -1) {
|
||||||
|
name = name.substring(0, index);
|
||||||
|
}
|
||||||
|
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getParentDirectoryPath(path) {
|
||||||
|
|
||||||
|
var parts = path.split('/');
|
||||||
|
parts.length--;
|
||||||
|
|
||||||
|
return parts.join('/');
|
||||||
|
}
|
||||||
|
|
||||||
|
function combinePaths(path1, path2) {
|
||||||
|
|
||||||
|
return path1 + path2;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getLocalId(serverId, itemId) {
|
||||||
|
|
||||||
var deferred = DeferredBuilder.Deferred();
|
|
||||||
deferred.resolveWith(null, [""]);
|
|
||||||
return deferred.promise();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function hasImage(serverId, itemId, imageTag) {
|
function hasImage(serverId, itemId, imageTag) {
|
||||||
|
|
||||||
var deferred = DeferredBuilder.Deferred();
|
var deferred = DeferredBuilder.Deferred();
|
||||||
deferred.resolveWith(null, [false]);
|
getImageLocalPath(serverId, itemId, imageTag).done(function (localPath) {
|
||||||
|
|
||||||
|
fileExists(localPath).done(function (exists) {
|
||||||
|
|
||||||
|
deferred.resolveWith(null, [exists]);
|
||||||
|
|
||||||
|
}).fail(getOnFail(deferred));
|
||||||
|
|
||||||
|
}).fail(getOnFail(deferred));
|
||||||
return deferred.promise();
|
return deferred.promise();
|
||||||
}
|
}
|
||||||
|
|
||||||
function downloadImage(url, serverId, itemId, imageTag) {
|
function downloadImage(url, serverId, itemId, imageTag) {
|
||||||
|
|
||||||
var deferred = DeferredBuilder.Deferred();
|
var deferred = DeferredBuilder.Deferred();
|
||||||
deferred.resolveWith(null, [false]);
|
getImageLocalPath(serverId, itemId, imageTag).done(function (localPath) {
|
||||||
|
|
||||||
|
downloadFile(url, localPath).done(function () {
|
||||||
|
|
||||||
|
deferred.resolve();
|
||||||
|
|
||||||
|
}).fail(getOnFail(deferred));
|
||||||
|
|
||||||
|
}).fail(getOnFail(deferred));
|
||||||
return deferred.promise();
|
return deferred.promise();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getImageLocalPath(serverId, itemId, imageTag) {
|
||||||
|
var deferred = DeferredBuilder.Deferred();
|
||||||
|
|
||||||
|
getFileSystem().done(function (fileSystem) {
|
||||||
|
var path = fileSystem.root.toURL() + "/emby/images/" + serverId + "/" + itemId + "/" + imageTag;
|
||||||
|
|
||||||
|
deferred.resolveWith(null, [path]);
|
||||||
|
});
|
||||||
|
|
||||||
|
return deferred.promise();
|
||||||
|
}
|
||||||
|
|
||||||
|
function fileExists(path) {
|
||||||
|
|
||||||
|
var deferred = DeferredBuilder.Deferred();
|
||||||
|
|
||||||
|
resolveLocalFileSystemURL(path, function (fileEntry) {
|
||||||
|
|
||||||
|
deferred.resolveWith(null, [true]);
|
||||||
|
|
||||||
|
}, function () {
|
||||||
|
|
||||||
|
deferred.resolveWith(null, [false]);
|
||||||
|
});
|
||||||
|
|
||||||
|
return deferred.promise();
|
||||||
|
}
|
||||||
|
|
||||||
|
var fileSystem;
|
||||||
|
function getFileSystem() {
|
||||||
|
|
||||||
|
var deferred = DeferredBuilder.Deferred();
|
||||||
|
|
||||||
|
if (fileSystem) {
|
||||||
|
deferred.resolveWith(null, [fileSystem]);
|
||||||
|
} else {
|
||||||
|
requestFileSystem(PERSISTENT, 0, function (fs) {
|
||||||
|
fileSystem = fs;
|
||||||
|
deferred.resolveWith(null, [fileSystem]);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return deferred.promise();
|
||||||
|
}
|
||||||
|
|
||||||
|
function getOnFail(deferred) {
|
||||||
|
return function () {
|
||||||
|
|
||||||
|
deferred.reject();
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
window.LocalAssetManager = {
|
window.LocalAssetManager = {
|
||||||
getLocalMediaSource: getLocalMediaSource,
|
getLocalMediaSource: getLocalMediaSource,
|
||||||
saveOfflineUser: saveOfflineUser,
|
saveOfflineUser: saveOfflineUser,
|
||||||
|
|
BIN
dashboard-ui/css/images/ani_equalizer_black.gif
Normal file
BIN
dashboard-ui/css/images/ani_equalizer_black.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.2 KiB |
BIN
dashboard-ui/css/images/ani_equalizer_white.gif
Normal file
BIN
dashboard-ui/css/images/ani_equalizer_white.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.6 KiB |
|
@ -73,6 +73,11 @@
|
||||||
box-shadow: 0 0 12px 7px #cc3333;
|
box-shadow: 0 0 12px 7px #cc3333;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.playlistIndexIndicatorImage {
|
||||||
|
background-size: initial !important;
|
||||||
|
background-image: url(images/ani_equalizer_white.gif) !important;
|
||||||
|
}
|
||||||
|
|
||||||
@media all and (max-width: 700px) {
|
@media all and (max-width: 700px) {
|
||||||
|
|
||||||
.nowPlayingPageImage img {
|
.nowPlayingPageImage img {
|
||||||
|
@ -81,6 +86,14 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@media all and (max-width: 600px) and (orientation: portrait) {
|
||||||
|
|
||||||
|
.btnSlideshow {
|
||||||
|
display: block;
|
||||||
|
margin-top: 1em;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@media all and (max-height: 600px) {
|
@media all and (max-height: 600px) {
|
||||||
|
|
||||||
.nowPlayingPage .btnCommand, .nowPlayingPage .btnPlayStateCommand {
|
.nowPlayingPage .btnCommand, .nowPlayingPage .btnPlayStateCommand {
|
||||||
|
|
|
@ -105,6 +105,9 @@
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
margin-top: 12px;
|
margin-top: 12px;
|
||||||
|
position: relative;
|
||||||
|
/* Need this to make sure it's on top of nowPlayingBarPositionContainer so that buttons are fully clickable */
|
||||||
|
z-index: 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
.nowPlayingBarPositionContainer {
|
.nowPlayingBarPositionContainer {
|
||||||
|
@ -150,6 +153,8 @@
|
||||||
bottom: 12px;
|
bottom: 12px;
|
||||||
right: 10px;
|
right: 10px;
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
|
/* Need this to make sure it's on top of nowPlayingBarPositionContainer so that buttons are fully clickable */
|
||||||
|
z-index: 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mediaButton img {
|
.mediaButton img {
|
||||||
|
@ -159,8 +164,6 @@
|
||||||
.nowPlayingBarCurrentTime {
|
.nowPlayingBarCurrentTime {
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
position: absolute;
|
|
||||||
bottom: 31px;
|
|
||||||
text-align: center;
|
text-align: center;
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
|
@ -204,8 +207,9 @@
|
||||||
|
|
||||||
.nowPlayingBarCurrentTime {
|
.nowPlayingBarCurrentTime {
|
||||||
padding-left: 0;
|
padding-left: 0;
|
||||||
bottom: 30px;
|
top: 12px;
|
||||||
right: 130px;
|
right: 130px;
|
||||||
|
position: absolute;
|
||||||
}
|
}
|
||||||
|
|
||||||
.nowPlayingBarCenter > *:not(.nowPlayingBarCurrentTime) {
|
.nowPlayingBarCenter > *:not(.nowPlayingBarCurrentTime) {
|
||||||
|
|
|
@ -12,8 +12,8 @@
|
||||||
<div style="float:right;position:relative;top:5px;right:5px;text-align:right;">
|
<div style="float:right;position:relative;top:5px;right:5px;text-align:right;">
|
||||||
<div>
|
<div>
|
||||||
<span class="nowPlayingSelectedPlayer"></span>
|
<span class="nowPlayingSelectedPlayer"></span>
|
||||||
<paper-fab mini icon="slideshow" class="btnSlideshow" style="vertical-align:middle;background:#888;z-index:1;margin-right:.5em;"></paper-fab>
|
|
||||||
<paper-fab mini icon="cast" class="blue nowPlayingCastIcon" onclick="MediaController.showPlayerSelection();" style="vertical-align:middle;"></paper-fab>
|
<paper-fab mini icon="cast" class="blue nowPlayingCastIcon" onclick="MediaController.showPlayerSelection();" style="vertical-align:middle;"></paper-fab>
|
||||||
|
<paper-fab mini icon="slideshow" class="btnSlideshow" style="vertical-align:middle;background:#888;z-index:1;margin-left:.5em;"></paper-fab>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -144,7 +144,7 @@
|
||||||
</div>
|
</div>
|
||||||
</neon-animatable>
|
</neon-animatable>
|
||||||
<neon-animatable>
|
<neon-animatable>
|
||||||
<div class="playlist itemsContainer" style="max-width:800px;margin: 1.5em auto 0;">
|
<div class="playlist itemsContainer" style="max-width:800px;margin: 2em auto 0;padding-bottom:200px;">
|
||||||
</div>
|
</div>
|
||||||
</neon-animatable>
|
</neon-animatable>
|
||||||
</neon-animated-pages>
|
</neon-animated-pages>
|
||||||
|
|
|
@ -46,7 +46,7 @@
|
||||||
style += 'position:fixed;top:' + pos.top + 'px;left:' + pos.left + 'px';
|
style += 'position:fixed;top:' + pos.top + 'px;left:' + pos.left + 'px';
|
||||||
}
|
}
|
||||||
|
|
||||||
html += '<paper-dialog id="' + id + '" entry-animation="fade-in-animation" exit-animation="fade-out-animation" with-backdrop style="' + style + '">';
|
html += '<paper-dialog id="' + id + '" with-backdrop style="' + style + '">';
|
||||||
|
|
||||||
if (options.title) {
|
if (options.title) {
|
||||||
html += '<h2>';
|
html += '<h2>';
|
||||||
|
|
|
@ -1561,8 +1561,8 @@
|
||||||
posterWidth = 200;
|
posterWidth = 200;
|
||||||
}
|
}
|
||||||
else if (options.shape == 'detailPageSquare') {
|
else if (options.shape == 'detailPageSquare') {
|
||||||
posterWidth = 200;
|
posterWidth = 240;
|
||||||
squareSize = 200;
|
squareSize = 240;
|
||||||
}
|
}
|
||||||
else if (options.shape == 'detailPage169') {
|
else if (options.shape == 'detailPage169') {
|
||||||
posterWidth = 320;
|
posterWidth = 320;
|
||||||
|
|
|
@ -587,6 +587,11 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
self.currentPlaylistIndex = function (i) {
|
self.currentPlaylistIndex = function (i) {
|
||||||
|
|
||||||
|
if (i == null) {
|
||||||
|
return currentPlayer.currentPlaylistIndex();
|
||||||
|
}
|
||||||
|
|
||||||
currentPlayer.currentPlaylistIndex(i);
|
currentPlayer.currentPlaylistIndex(i);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -700,6 +700,18 @@
|
||||||
|
|
||||||
var itemsContainer = page.querySelector('.playlist');
|
var itemsContainer = page.querySelector('.playlist');
|
||||||
itemsContainer.innerHTML = html;
|
itemsContainer.innerHTML = html;
|
||||||
|
|
||||||
|
var index = MediaController.currentPlaylistIndex();
|
||||||
|
|
||||||
|
if (index != -1) {
|
||||||
|
|
||||||
|
var item = itemsContainer.querySelectorAll('.listItem')[index];
|
||||||
|
var img = item.querySelector('.listviewImage');
|
||||||
|
|
||||||
|
img.classList.remove('lazy');
|
||||||
|
img.classList.add('playlistIndexIndicatorImage');
|
||||||
|
}
|
||||||
|
|
||||||
ImageLoader.lazyChildren(itemsContainer);
|
ImageLoader.lazyChildren(itemsContainer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue