1
0
Fork 0
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:
Luke Pulverenti 2015-09-15 00:31:12 -04:00
parent fcc1746fde
commit 4ed9e6d637
12 changed files with 297 additions and 25 deletions

View file

@ -46,7 +46,7 @@
return deferred.promise();
}
function createLocalItem(libraryItem, serverId, originalFileName) {
function createLocalItem(libraryItem, serverInfo, originalFileName) {
var item = {};

View file

@ -198,7 +198,7 @@
require(['localassetmanager'], function () {
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 () {

View file

@ -11,12 +11,29 @@
}
}
return null;
var deferred = DeferredBuilder.Deferred();
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]);
}
function saveOfflineUser(user) {
var deferred = DeferredBuilder.Deferred();
deferred.resolve();
}).fail(getOnFail(deferred));
return;
}
deferred.resolveWith(null, [null]);
}).fail(getOnFail(deferred));
return deferred.promise();
}
@ -46,71 +63,292 @@
return deferred.promise();
}
function saveOfflineUser(user) {
// TODO
var deferred = DeferredBuilder.Deferred();
deferred.resolve();
return deferred.promise();
}
function getOfflineActions(serverId) {
// TODO
var deferred = DeferredBuilder.Deferred();
deferred.resolveWith(null, [[]]);
return deferred.promise();
}
function getServerItemIds(serverId) {
// TODO
var deferred = DeferredBuilder.Deferred();
deferred.resolveWith(null, [[]]);
return deferred.promise();
}
function removeLocalItem(itemId, serverId) {
// TODO
var deferred = DeferredBuilder.Deferred();
deferred.resolveWith(null, []);
return deferred.promise();
}
function getLocalItem(itemId, serverId) {
// TODO
var deferred = DeferredBuilder.Deferred();
deferred.resolveWith(null, []);
return deferred.promise();
}
function addOrUpdateLocalItem(localItem) {
// TODO
var deferred = DeferredBuilder.Deferred();
deferred.resolveWith(null, []);
deferred.resolveWith(null, [null]);
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 deferred = DeferredBuilder.Deferred();
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();
}
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) {
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();
}
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) {
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();
}
function downloadImage(url, serverId, itemId, imageTag) {
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();
}
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 = {
getLocalMediaSource: getLocalMediaSource,
saveOfflineUser: saveOfflineUser,

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

View file

@ -73,6 +73,11 @@
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) {
.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) {
.nowPlayingPage .btnCommand, .nowPlayingPage .btnPlayStateCommand {

View file

@ -105,6 +105,9 @@
vertical-align: middle;
text-align: center;
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 {
@ -150,6 +153,8 @@
bottom: 12px;
right: 10px;
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 {
@ -159,8 +164,6 @@
.nowPlayingBarCurrentTime {
vertical-align: middle;
font-weight: normal;
position: absolute;
bottom: 31px;
text-align: center;
display: inline-block;
margin: 0 auto;
@ -204,8 +207,9 @@
.nowPlayingBarCurrentTime {
padding-left: 0;
bottom: 30px;
top: 12px;
right: 130px;
position: absolute;
}
.nowPlayingBarCenter > *:not(.nowPlayingBarCurrentTime) {

View file

@ -12,8 +12,8 @@
<div style="float:right;position:relative;top:5px;right:5px;text-align:right;">
<div>
<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="slideshow" class="btnSlideshow" style="vertical-align:middle;background:#888;z-index:1;margin-left:.5em;"></paper-fab>
</div>
</div>
@ -144,7 +144,7 @@
</div>
</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>
</neon-animatable>
</neon-animated-pages>

View file

@ -46,7 +46,7 @@
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) {
html += '<h2>';

View file

@ -1561,8 +1561,8 @@
posterWidth = 200;
}
else if (options.shape == 'detailPageSquare') {
posterWidth = 200;
squareSize = 200;
posterWidth = 240;
squareSize = 240;
}
else if (options.shape == 'detailPage169') {
posterWidth = 320;

View file

@ -587,6 +587,11 @@
};
self.currentPlaylistIndex = function (i) {
if (i == null) {
return currentPlayer.currentPlaylistIndex();
}
currentPlayer.currentPlaylistIndex(i);
};

View file

@ -700,6 +700,18 @@
var itemsContainer = page.querySelector('.playlist');
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);
}