1
0
Fork 0
mirror of https://github.com/jellyfin/jellyfin-web synced 2025-03-30 19:56:21 +00:00

stub out web client media controller

This commit is contained in:
Luke Pulverenti 2014-03-29 11:40:32 -04:00
parent 8842110e54
commit 355c3dcb42
21 changed files with 399 additions and 1061 deletions

View file

@ -13,15 +13,18 @@
var canClientSeek;
var currentPlaylistIndex = 0;
self.currentTimeElement;
self.unmuteButton;
self.muteButton;
self.positionSlider;
self.isPositionSliderActive;
self.volumeSlider;
self.startTimeTicksOffset;
self.currentTimeElement = null;
self.unmuteButton = null;
self.muteButton = null;
self.positionSlider = null;
self.isPositionSliderActive = null;
self.volumeSlider = null;
self.startTimeTicksOffset = null;
self.playlist = [];
self.isLocalPlayer = true;
self.updateCanClientSeek = function (elem) {
var duration = elem.duration;
canClientSeek = duration && !isNaN(duration) && duration != Number.POSITIVE_INFINITY && duration != Number.NEGATIVE_INFINITY;
@ -275,7 +278,7 @@
audioBitrate: audioBitrate,
videoBitrate: videoBitrate
};
if (params.videoCodec == 'h264') {
params.profile = 'baseline';
params.level = '3';
@ -284,46 +287,6 @@
return params;
};
self.canPlay = function (item, user) {
if (item.PlayAccess != 'Full') {
return false;
}
if (item.LocationType == "Virtual" || item.IsPlaceHolder) {
return false;
}
if (item.Type == "MusicAlbum" || item.Type == "MusicArtist" || item.Type == "MusicGenre") {
return true;
}
if (item.GameSystem == "Nintendo" && item.MediaType == "Game" && item.ProviderIds.NesBox && item.ProviderIds.NesBoxRom) {
return true;
}
if (item.GameSystem == "Super Nintendo" && item.MediaType == "Game" && item.ProviderIds.NesBox && item.ProviderIds.NesBoxRom) {
return true;
}
return self.canPlayMediaType(item.MediaType);
};
self.getPlayUrl = function (item) {
if (item.GameSystem == "Nintendo" && item.MediaType == "Game" && item.ProviderIds.NesBox && item.ProviderIds.NesBoxRom) {
return "http://nesbox.com/game/" + item.ProviderIds.NesBox + '/rom/' + item.ProviderIds.NesBoxRom;
}
if (item.GameSystem == "Super Nintendo" && item.MediaType == "Game" && item.ProviderIds.NesBox && item.ProviderIds.NesBoxRom) {
return "http://snesbox.com/game/" + item.ProviderIds.NesBox + '/rom/' + item.ProviderIds.NesBoxRom;
}
return null;
};
self.canPlayMediaType = function (mediaType) {
if (mediaType === "Video") {
@ -337,84 +300,45 @@
return false;
};
self.play = function (items, startPosition) {
self.canQueueMediaType = function (mediaType) {
return currentItem && currentItem.MediaType == mediaType;
};
self.play = function (options) {
Dashboard.getCurrentUser().done(function (user) {
var item = items[0];
if (options.items) {
var videoType = (item.VideoType || "").toLowerCase();
self.playInternal(options.items[0], options.startPositionTicks, user);
var expirementalText = "This feature is experimental. It may not work at all with some titles. Do you wish to continue?";
self.playlist = options.items;
currentPlaylistIndex = 0;
if (videoType == "dvd") {
} else {
self.playWithWarning(items, startPosition, user, "dvdstreamconfirmed", "Dvd Folder Streaming", expirementalText);
return;
}
else if (videoType == "bluray") {
self.getItemsForPlayback({
self.playWithWarning(items, startPosition, user, "bluraystreamconfirmed", "Blu-ray Folder Streaming", expirementalText);
return;
}
else if (videoType == "iso") {
Ids: options.ids.join(',')
var isoType = (item.IsoType || "").toLowerCase();
}).done(function (result) {
if (isoType == "dvd") {
options.items = result.Items;
self.playWithWarning(items, startPosition, user, "dvdisostreamconfirmed", "Dvd Iso Streaming", expirementalText);
return;
}
else if (isoType == "bluray") {
self.playInternal(options.items[0], options.startPositionTicks, user);
self.playWithWarning(items, startPosition, user, "blurayisostreamconfirmed", "Blu-ray Iso Streaming", expirementalText);
return;
}
}
self.playlist = options.items;
currentPlaylistIndex = 0;
self.playInternal(items[0], startPosition, user);
self.onPlaybackStarted(items);
});
};
self.playWithWarning = function (items, startPosition, user, localStorageKeyName, header, text) {
// Increment this version when changes are made and we want users to see the prompts again
var warningVersion = "2";
localStorageKeyName += new Date().getMonth() + warningVersion;
if (localStorage.getItem(localStorageKeyName) == "1") {
self.playInternal(items[0], startPosition, user);
self.onPlaybackStarted(items);
return;
}
Dashboard.confirm(text, header, function (result) {
if (result) {
localStorage.setItem(localStorageKeyName, "1");
self.playInternal(items[0], startPosition, user);
self.onPlaybackStarted(items);
});
}
});
};
self.onPlaybackStarted = function (items) {
self.playlist = items;
currentPlaylistIndex = 0;
};
self.getBitrateSetting = function() {
self.getBitrateSetting = function () {
return parseInt(localStorage.getItem('preferredVideoBitrate') || '') || 1500000;
};
@ -569,163 +493,11 @@
query.Limit = query.Limit || 100;
query.Fields = getItemFields;
query.ExcludeLocationTypes = "Virtual";
return ApiClient.getItems(userId, query);
};
self.playById = function (id, startPositionTicks) {
ApiClient.getItem(Dashboard.getCurrentUserId(), id).done(function (item) {
if (item.IsFolder) {
self.getItemsForPlayback({
ParentId: id,
Recursive: true,
SortBy: "SortName"
}).done(function (result) {
self.play(result.Items, startPositionTicks);
});
} else {
self.play([item], startPositionTicks);
}
});
};
self.playInstantMixFromSong = function (id) {
ApiClient.getInstantMixFromSong(id, {
UserId: Dashboard.getCurrentUserId(),
Fields: getItemFields,
Limit: 50
}).done(function (result) {
self.play(result.Items);
});
};
self.playInstantMixFromAlbum = function (id) {
ApiClient.getInstantMixFromAlbum(id, {
UserId: Dashboard.getCurrentUserId(),
Fields: getItemFields,
Limit: 50
}).done(function (result) {
self.play(result.Items);
});
};
self.playInstantMixFromArtist = function (name) {
ApiClient.getInstantMixFromArtist(name, {
UserId: Dashboard.getCurrentUserId(),
Fields: getItemFields,
Limit: 50
}).done(function (result) {
self.play(result.Items);
});
};
self.playInstantMixFromMusicGenre = function (name) {
ApiClient.getInstantMixFromMusicGenre(name, {
UserId: Dashboard.getCurrentUserId(),
Fields: getItemFields,
Limit: 50
}).done(function (result) {
self.play(result.Items);
});
};
self.playArtist = function (artist) {
self.getItemsForPlayback({
Artists: artist,
Recursive: true,
SortBy: "Album,SortName",
IncludeItemTypes: "Audio"
}).done(function (result) {
self.play(result.Items);
});
};
self.shuffleArtist = function (artist) {
self.getItemsForPlayback({
Artists: artist,
Recursive: true,
SortBy: "Random",
IncludeItemTypes: "Audio"
}).done(function (result) {
self.play(result.Items);
});
};
self.shuffleMusicGenre = function (genre) {
self.getItemsForPlayback({
Genres: genre,
Recursive: true,
SortBy: "Random",
IncludeItemTypes: "Audio"
}).done(function (result) {
self.play(result.Items);
});
};
self.shuffleFolder = function (id) {
self.getItemsForPlayback({
ParentId: id,
Recursive: true,
SortBy: "Random"
}).done(function (result) {
self.play(result.Items);
});
};
self.removeFromPlaylist = function (index) {
self.playlist.remove(index);
@ -797,51 +569,66 @@
}
};
self.queue = function (id) {
self.queue = function (options) {
if (!currentMediaElement) {
self.playById(id);
self.play(options);
return;
}
ApiClient.getItem(Dashboard.getCurrentUserId(), id).done(function (item) {
Dashboard.getCurrentUser().done(function (user) {
if (item.IsFolder) {
if (options.items) {
self.queueItems(options.items);
} else {
self.getItemsForPlayback({
ParentId: id,
Recursive: true,
SortBy: "SortName"
Ids: options.ids.join(',')
}).done(function (result) {
self.queueItems(result.Items);
options.items = result.Items;
self.queueItems(options.items);
});
} else {
self.queueItems([item]);
}
});
};
self.queueArtist = function (artist) {
self.queueNext = function (options) {
self.getItemsForPlayback({
if (!currentMediaElement) {
self.play(options);
return;
}
Artists: artist,
Recursive: true,
SortBy: "Album,SortName",
IncludeItemTypes: "Audio"
Dashboard.getCurrentUser().done(function (user) {
}).done(function (result) {
if (options.items) {
self.queueItems(result.Items);
self.queueItemsNext(options.items);
} else {
self.getItemsForPlayback({
Ids: options.ids.join(',')
}).done(function (result) {
options.items = result.Items;
self.queueItemsNext(options.items);
});
}
});
};
self.pause = function () {
@ -905,6 +692,108 @@
}
};
self.shuffle = function (id) {
var userId = Dashboard.getCurrentUserId();
ApiClient.getItem(userId, id).done(function (item) {
var query = {
UserId: userId,
Fields: getItemFields,
Limit: 50,
Filters: "IsNotFolder",
Recursive: true,
SortBy: "Random"
};
if (item.IsFolder) {
query.ParentId = id;
}
else if (item.Type == "MusicArtist") {
query.MediaTypes = "Audio";
query.Artists = item.Name;
}
else if (item.Type == "MusicGenre") {
query.MediaTypes = "Audio";
query.Genres = item.Name;
} else {
return;
}
self.getItemsForPlayback(query).done(function (result) {
self.play({ items: result.Items });
});
});
};
self.instantMix = function (id) {
var userId = Dashboard.getCurrentUserId();
ApiClient.getItem(userId, id).done(function (item) {
var promise;
if (item.Type == "MusicArtist") {
promise = ApiClient.getInstantMixFromArtist(name, {
UserId: Dashboard.getCurrentUserId(),
Fields: getItemFields,
Limit: 50
});
}
else if (item.Type == "MusicGenre") {
promise = ApiClient.getInstantMixFromMusicGenre(name, {
UserId: Dashboard.getCurrentUserId(),
Fields: getItemFields,
Limit: 50
});
}
else if (item.Type == "MusicAlbum") {
promise = ApiClient.getInstantMixFromAlbum(id, {
UserId: Dashboard.getCurrentUserId(),
Fields: getItemFields,
Limit: 50
});
}
else if (item.Type == "Audio") {
promise = ApiClient.getInstantMixFromSong(id, {
UserId: Dashboard.getCurrentUserId(),
Fields: getItemFields,
Limit: 50
});
}
else {
return;
}
promise.done(function (result) {
self.play({ items: result.Items });
});
});
};
self.stop = function () {
var elem = currentMediaElement;
@ -933,14 +822,6 @@
return currentMediaElement;
};
self.showSendMediaMenu = function () {
RemoteControl.showMenuForItem({
item: currentItem
});
};
self.bindPositionSlider = function () {
self.positionSlider.on('slidestart', function (e) {
@ -1220,4 +1101,7 @@
window.MediaPlayer = new mediaPlayer();
window.MediaController.registerPlayer(window.MediaPlayer);
})(document, setTimeout, clearTimeout, screen, localStorage, $, setInterval, window);