%PDF- %PDF-
| Direktori : /proc/thread-self/root/data/old/usr/local/share/gpac/gui/extensions/player/ |
| Current File : //proc/thread-self/root/data/old/usr/local/share/gpac/gui/extensions/player/playlist.js |
extension.playlist_wnd = null;
extension.playlist_filter_event = function(evt) {
switch (evt.type) {
case GF_JS_EVENT_PLAYLIST_ADD:
this.add_playlist_item(evt.url);
return true;
case GF_JS_EVENT_PLAYLIST_RESET:
this.reset_playlist();
return true;
case GF_JS_EVENT_PLAYLIST_PLAY:
this.playlist_idx = evt.index - 1;
this.start();
this.playlist_next();
return true;
default:
return false;
}
}
extension.create_playlist_event_filter = function (__anobj) {
return function (evt) {
return __anobj.playlist_filter_event(evt);
}
}
extension.pl_event_filter = null;
extension.playlist = [];
var plist = extension.get_option('Playlist');
if ((plist != null) && (plist != '')) {
extension.playlist = gwskin.parse(plist);
}
extension.playlist_idx = 0;
var plistidx = extension.get_option('PlaylistIndex');
if (plistidx != null) {
extension.playlist_idx = parseInt(plistidx);
}
extension.view_playlist = function () {
if (this.playlist_wnd) {
this.playlist_wnd.close();
this.playlist_wnd = null;
return;
}
var plist = gw_new_window_full(null, true, 'Playlist');
this.playlist_wnd = plist;
plist.extension = this;
plist.hide_controler = false;
this.controler.hide();
plist.on_close = function () {
if (! this.hide_controler)
this.extension.controler.show();
this.extension.playlist_wnd = null;
this.extension.file_open_dlg = false;
}
plist.area = gw_new_grid_container(plist);
plist.area.break_at_line = true;
plist.area.dlg = plist;
plist.go_prev = plist.add_tool('previous');
plist.go_prev.on_click = function () {
this.dlg.area._move_page(-1);
}
plist.go_next = plist.add_tool('next');
plist.go_next.on_click = function () {
this.dlg.area._move_page(1);
}
plist.add = plist.add_tool('add');
plist.add.on_click = function () {
this.dlg.browse_files();
}
plist.browse_files = function() {
this.hide();
var fb = this.extension.open_local_file();
fb.playlist = this;
fb.on_browse = function (value, directory) {
this.playlist.show();
plist.add_files(value, false, false);
if (directory) gpac.last_working_directory = directory;
}
fb.on_close = function () {
this.playlist.show();
}
fb.on_long_click = function (filename, path, directory) {
var popup = gw_new_window_full(null, true, '');
popup.fb = fb;
this.disable();
popup.area = gw_new_grid_container(popup);
popup.area.dlg = popup;
popup.area.break_at_line = true;
popup.set_size(0.9 * this.width, 0.9 * this.height);
popup.move(this.translation.x, this.translation.y);
if (directory) {
var item = gw_new_icon_button(popup.area, 'scan_directory', 'Add directory', true, 'listitem');
item.set_size(popup.width, gwskin.default_control_height);
item.dlg = popup;
item.on_click = function() {
var filelist = gpac.enum_directory(path, '*', false);
item.dlg.fb.playlist.add_files(filelist, false, false);
item.dlg.fb.close();
item.dlg.close();
}
item = gw_new_icon_button(popup.area, 'scan_directory', 'Insert directory', true, 'listitem');
item.set_size(popup.width, gwskin.default_control_height);
item.dlg = popup;
item.on_click = function() {
var filelist = gpac.enum_directory(path, '*', false);
item.dlg.fb.playlist.add_files(filelist, true, false);
item.dlg.fb.close();
item.dlg.close();
}
} else {
var item = gw_new_icon_button(popup.area, 'add', 'Add file', true, 'listitem');
item.set_size(popup.width, gwskin.default_control_height);
item.dlg = popup;
item.on_click = function() {
item.dlg.fb.playlist.add_files(path, false, false);
item.dlg.fb.close();
item.dlg.close();
}
item = gw_new_icon_button(popup.area, 'add', 'Insert file', true, 'listitem');
item.set_size(popup.width, gwskin.default_control_height);
item.dlg = popup;
item.on_click = function() {
item.dlg.fb.playlist.add_files(path, true, false);
item.dlg.fb.close();
item.dlg.close();
}
}
popup.area.layout();
popup.set_alpha(1);
popup.on_close = function () {
this.fb.enable();
}
popup.show();
}
}
plist.add_object = function(pl_item, is_selected) {
var icon_name = is_selected ? 'play' : gw_guess_mime_icon(pl_item.name);
var item = gw_new_icon_button(this.area, icon_name, pl_item.name, true, 'listitem');
item.set_size(this.width, gwskin.default_control_height);
item.dlg = this;
item.pl_item = pl_item;
item.on_click = function() {
this.dlg.extension.playlist_play(this.pl_item);
this.dlg.hide_controler = true;
this.dlg.close();
}
this.trash.enable();
if (plist.extension.playlist.length>1)
this.sort.enable();
}
plist.add_files = function(list, is_insert, recursive) {
if (typeof list =='string') {
var obj = {};
var names = list.split('/');
if (names.length == 0) names = list.split('\\');
obj.name = names.pop();
var len = list.length - obj.name.length;
obj.path = list.slice(0, len);
if (is_insert) {
this.extension.playlist.splice(this.extension.playlist_idx+1, 0, obj);
} else {
this.extension.playlist.push(obj);
this.add_object(obj, false);
}
} else {
//temp array for sorting, we have issues sorting Arrays creating by native code
var ar = [];
for (var i=0; i<list.length; i++) {
if (list[i].directory) continue;
var obj = {};
obj.path = list[i].path;
obj.name = list[i].name;
ar.push(obj);
}
if (list.length) gpac.last_working_directory = list[0].path;
//sort
if (!this._sort_type) {
ar.sort( function(a, b) { return a.name > b.name; } );
} else {
ar.sort( function(a, b) { return a.name < b.name; } );
}
for (var i=0; i<ar.length; i++) {
var obj = ar[i];
if (is_insert) {
this.extension.playlist.splice(this.extension.playlist_idx+1+i, 0, obj);
} else {
this.extension.playlist.push(obj);
this.add_object(obj, false);
}
}
}
//in insert mode rebuild the UI (we cannot insert SFNode easily in an MFNode field)
if (is_insert) {
this.refresh_items();
}
this.area.layout();
this.extension.set_option('Playlist', gwskin.stringify(this.extension.playlist));
}
plist._sort_type = 0;
plist.sort = plist.add_tool('sort');
plist.sort.on_click = function() {
var wnd = this.dlg;
wnd.area.reset_children();
if (!wnd._sort_type) {
wnd.extension.playlist.sort( function (a, b) { return a.name > b.name;} );
wnd._sort_type = 1;
} else {
wnd.extension.playlist.sort( function (a, b) { return a.name < b.name;} );
wnd._sort_type = 0;
}
wnd.extension.set_option('Playlist', gwskin.stringify(wnd.extension.playlist));
wnd.refresh_items();
}
plist.area.on_page_changed = function () {
if (this.is_first_page()) this.dlg.go_prev.disable();
else this.dlg.go_prev.enable();
if (this.is_last_page()) this.dlg.go_next.disable();
else this.dlg.go_next.enable();
}
plist.trash = plist.add_tool('trash');
plist.trash.on_click = function () {
this.dlg.area.reset_children();
this.dlg.extension.playlist = [];
this.dlg.extension.set_option('Playlist', gwskin.stringify(this.dlg.extension.playlist));
this.dlg.extension.set_option('PlaylistIndex', '0');
this.dlg.extension.set_playlist_mode(true);
this.disable();
}
plist.trash.disable();
plist.sort.disable();
plist.refresh_items = function() {
this.area.reset_children();
for (var i=0; i<this.extension.playlist.length; i++) {
var is_selected = false;
if (this.extension.playlist_mode && this.extension.current_url && (this.extension.playlist_idx==i)) {
is_selected = true;
}
this.add_object(this.extension.playlist[i], is_selected);
}
this.area.layout();
}
//init playlist
plist.refresh_items();
plist.on_size = function (width, height) {
var __children = this.area.get_children();
for (var i = 0; i < __children.length; i++) {
__children[i].set_size(width, gwskin.default_control_height);
}
this.area.set_size(width, height);
}
plist.on_display_size = function (width, height) {
var w = 2*width / 3;
this.set_size(w, 0.8 * height);
}
plist.on_display_size(gw_display_width, gw_display_height);
plist.set_alpha(0.9);
plist.show();
}
extension.playlist_mode = false;
extension.set_playlist_mode = function(value)
{
if (!this.pl_event_filter) {
this.pl_event_filter = this.create_playlist_event_filter(this);
gwlib_add_event_filter(this.pl_event_filter);
}
if (!value || (this.playlist.length<=1)) {
if (this.controler.playlist_next.visible) {
this.controler.playlist_next.hide();
this.controler.playlist_prev.hide();
}
} else {
if (!this.controler.playlist_next.visible) {
this.controler.playlist_next.show();
this.controler.playlist_prev.show();
}
if (this.playlist_idx == 0) {
this.controler.playlist_next.enable();
this.controler.playlist_prev.disable();
} else if (this.playlist_idx+1 == this.playlist.length) {
this.controler.playlist_next.disable();
this.controler.playlist_prev.enable();
}
}
extension.playlist_mode = value;
this.controler.layout();
}
extension.playlist_play = function (pl_item) {
this.set_playlist_mode(true);
this.set_movie_url(pl_item.path + pl_item.name);
//save current index
this.playlist_idx = this.playlist.indexOf(pl_item);
this.set_option('PlaylistIndex', '' + this.playlist_idx);
var e = {};
e.type = GF_JS_EVENT_PLAYBACK;
e.is_playing = true;
e.index = this.playlist_idx;
gwlib_filter_event(e);
}
extension.playlist_next = function()
{
if (this.playlist_idx + 1 == this.playlist.length) return;
this.playlist_idx++;
this.playlist_play( this.playlist[this.playlist_idx] );
}
extension.playlist_prev = function()
{
if (!this.playlist_idx) return;
this.playlist_idx--;
this.playlist_play( this.playlist[this.playlist_idx] );
}
extension.add_playlist_item = function(file)
{
var obj = {};
var names = file.split('/');
if (names.length == 0) names = file.split('\\');
obj.name = names.pop();
var len = file.length - obj.name.length;
obj.path = file.slice(0, len);
this.playlist.push(obj);
this.set_playlist_mode(true);
}
extension.reset_playlist = function()
{
this.playlist = [];
this.playlist_idx = -1;
}