Docker services on my home NAS
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

1068 lines
35 KiB

/*
* Copyright (C) 2015 Binux <roy@binux.me>
*
* This file is part of YAAW (https://github.com/binux/yaaw).
*
* YAAW is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation, either version 3 of
* the License, or (at your option) any later version.
*
* YAAW is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You may get a copy of the GNU Lesser General Public License
* from http://www.gnu.org/licenses/lgpl.txt
*
*/
var YAAW = (function() {
var selected_tasks = false;
var selected_range_start = null;
var selected_range_close = null;
var on_gid = null;
var torrent_file = null, file_type = null;
return {
init: function() {
$('#main-control').show();
this.tpl.init();
this.setting.init();
this.contextmenu.init();
this.event_init();
this.aria2_init();
},
aria2_init: function() {
ARIA2.init(this.setting.jsonrpc_path, function() {
if (YAAW.setting.add_task_option) {
$("#add-task-option-wrap").empty().append(YAAW.tpl.add_task_option(YAAW.setting.add_task_option));
} else {
ARIA2.init_add_task_option();
}
ARIA2.refresh();
ARIA2.auto_refresh(YAAW.setting.refresh_interval);
ARIA2.finish_notification = YAAW.setting.finish_notification;
ARIA2.get_version();
ARIA2.global_stat();
});
},
event_init: function() {
$("#add-task-submit").live("click", function() {
YAAW.add_task.submit();return false;
});
$("#add-task-uri").submit(function() {
YAAW.add_task.submit();return false;
});
$("#saveSettings").live("click", function() {
YAAW.setting.submit();return false;
});
$("#setting-form").submit(function() {
YAAW.setting.submit();return false;
});
$("#add-task-clear").live("click", function() {
YAAW.add_task.clean();
});
$("#btnRemove").live("click", function() {
YAAW.tasks.remove();YAAW.tasks.unSelectAll();
});
$("#btnPause").live("click", function() {
YAAW.tasks.pause();YAAW.tasks.unSelectAll();
});
$("#btnUnPause").live("click", function() {
YAAW.tasks.unpause();YAAW.tasks.unSelectAll();
});
$("#btnClearAlert").live("click", function() {
$('#main-alert').hide();
});
$("#btnSelectActive").live("click", function() {
YAAW.tasks.selectActive();
});
$("#btnSelectWaiting").live("click", function() {
YAAW.tasks.selectWaiting();
});
$("#btnSelectPaused").live("click", function() {
YAAW.tasks.selectPaused();
});
$("#btnSelectStopped").live("click", function() {
YAAW.tasks.selectStopped();
});
$("#btnStartAll").live("click", function() {
ARIA2.unpause_all();
});
$("#btnPauseAll").live("click", function() {
ARIA2.pause_all();
});
$("#btnRemoveFinished").live("click", function() {
ARIA2.purge_download_result();
});
$("#closeAlert").live("click", function() {
$('#add-task-alert').hide();
});
$("#menuMoveTop").live("click", function() {
if (selected_tasks) {
YAAW.tasks.movetop();
YAAW.tasks.unSelectAll();
} else {
YAAW.contextmenu.movetop();
}
});
$("#menuMoveUp").live("click", function() {
if (selected_tasks) {
YAAW.tasks.moveup();
YAAW.tasks.unSelectAll();
} else {
YAAW.contextmenu.moveup();
}
});
$("#menuMoveDown").live("click", function() {
if (selected_tasks) {
YAAW.tasks.movedown();
YAAW.tasks.unSelectAll();
} else {
YAAW.contextmenu.movedown();
}
});
$("#menuMoveEnd").live("click", function() {
if (selected_tasks) {
YAAW.tasks.moveend();
YAAW.tasks.unSelectAll();
} else {
YAAW.contextmenu.moveend();
}
});
$("#menuRestart").live("click", function() {
if (selected_tasks) {
YAAW.tasks.restart();
YAAW.tasks.unSelectAll();
} else {
YAAW.contextmenu.restart();
}
});
$("#menuStart").live("click", function() {
if (selected_tasks) {
YAAW.tasks.unpause();
YAAW.tasks.unSelectAll();
} else {
YAAW.contextmenu.unpause();
}
});
$("#menuPause").live("click", function() {
if (selected_tasks) {
YAAW.tasks.pause();
YAAW.tasks.unSelectAll();
} else {
YAAW.contextmenu.pause();
}
});
$("#menuRemove").live("click", function() {
if (selected_tasks) {
YAAW.tasks.remove();
YAAW.tasks.unSelectAll();
} else {
YAAW.contextmenu.remove();
}
});
$("[rel=tooltip]").tooltip({"placement": "bottom"});
$(".task .select-box").live("click", function(e) {
if (!e.shiftKey) {
YAAW.tasks.toggle($(this).parents(".task"));
selected_range_start = $(this).parents(".task").hasClass("selected") ? $(this).parents(".task")[0] : null;
selected_range_close = null;
} else {
YAAW.tasks.select($(this).parents(".task"));
if (!selected_range_start)
selected_range_start = $(this).parents(".task")[0];
else if (!selected_range_close)
selected_range_close = $(this).parents(".task")[0];
}
if (selected_range_start && selected_range_close) {
if (selected_range_start == selected_range_close) {
selected_range_close = null;
} else {
var task_in_range = false;
$(".tasks-table .task").each(function (i, n) {
if (n == selected_range_start || n == selected_range_close) task_in_range = !task_in_range;
if (task_in_range) YAAW.tasks.select(n);
});
selected_range_start = selected_range_close;
selected_range_close = null;
}
}
YAAW.tasks.check_select();
});
$(".task .task-name > span").live("click", function() {
var task = $(this).parents(".task");
if (task.hasClass("info-open")) {
YAAW.tasks.info_close();
} else {
YAAW.tasks.info_close();
YAAW.tasks.info(task);
}
});
$("#uri-more").click(function() {
$("#add-task-uri .input-append").toggle();
$("#uri-textarea").toggle();
$("#uri-more .or-and").toggle();
$("#uri-input").val("");
$("#uri-textarea").val("");
$("#ati-out").parents(".control-group").val("").toggle();
});
$("#ib-files .ib-file-title, #ib-files .select-box").live("click", function() {
if ($(this).parent().find(".select-box:first").hasClass("icon-ok")) {
$(this).parent().find(".select-box").removeClass("icon-ok");
} else {
$(this).parent().find(".select-box").addClass("icon-ok");
}
});
$("#ib-file-save").live("click", function() {
var indexes = [];
$("#ib-files .select-box.icon-ok[data-index]").each(function(i, n) {
indexes.push(n.getAttribute("data-index"));
});
if (indexes.length == 0) {
ARIA2.main_alert("alert-error", "At least one file should be selected. Or just stop the task.", 5000);
} else {
var options = {
"select-file": indexes.join(","),
};
ARIA2.change_option($(this).parents(".info-box").attr("data-gid"), options);
};
});
$("#ib-options-a").live("click", function() {
ARIA2.get_options($(".info-box").attr("data-gid"));
});
$("#ib-peers-a").live("click", function() {
ARIA2.get_peers($(".info-box").attr("data-gid"));
});
var active_task_allowed_options = ["max-download-limit", "max-upload-limit"];
$("#ib-options-save").live("click", function() {
var options = {};
var gid = $(this).parents(".info-box").attr("data-gid");
var status = $("#task-gid-"+gid).attr("data-status");
$.each($("#ib-options-form input"), function(n, e) {
if (status == "active" && active_task_allowed_options.indexOf(e.name) == -1)
return;
options[e.name] = e.value;
});
ARIA2.change_options($(".info-box").attr("data-gid"), options);
});
$("#select-all-btn").click(function() {
if (selected_tasks) {
YAAW.tasks.unSelectAll();
} else {
YAAW.tasks.selectAll();
}
});
$("#refresh-btn").click(function() {
YAAW.tasks.unSelectAll();
YAAW.tasks.info_close();
$("#main-alert").hide();
ARIA2.refresh();
return false;
});
$("#setting-modal").on("show", function() {
ARIA2.get_global_option();
});
if (window.FileReader) {
var holder = $("#add-task-modal .modal-body").get(0);
holder.ondragover = function() {
$(this).addClass("hover");
return false;
}
holder.ondragend = function() {
$(this).removeClass("hover");
return false;
}
holder.ondrop = function(e) {
$(this).removeClass("hover");
e.preventDefault();
var file = e.dataTransfer.files[0];
YAAW.add_task.upload(file);
return false;
}
var tup = $("#torrent-up-input").get(0);
tup.onchange = function(e) {
var file = e.target.files[0];
YAAW.add_task.upload(file);
}
} else {
$("#torrent-up-input").remove();
$("#torrent-up-btn").addClass("disabled").tooltip({title: "File API is Not Supported."});
}
if (window.applicationCache) {
var appcache = window.applicationCache;
$(document).ready(function() {
if (appcache.status == appcache.IDLE)
$("#offline-cached").text("cached");
});
appcache.addEventListener("cached", function(){
$("#offline-cached").text("cached");
});
}
},
tpl: {
init: function() {
var _this = this;
$("script[type='text/mustache-template']").each(function(i, n) {
var key = n.getAttribute("id").replace(/-tpl$/, "").replace(/-/g, "_");
_this[key] = function() {
var tpl = Mustache.compile($(n).text());
return function(view) {
view._v = _this.view;
return tpl(view);
};
}();
});
},
files_tree: function(files) {
var file_dict = {}, f;
for (var i = 0; i < files.length; i++) {
var at = files[i].title.split('/');
f = file_dict;
for (var j = 0; j < at.length; j++) {
f[at[j]] = f[at[j]] || {};
f = f[at[j]];
}
f['_file'] = files[i];
}
function render(f) {
var content = '<ul>';
for (var k in f) {
if (f[k]['_file'] !== undefined) {
continue;
}
content += '<li>';
content += '<i class="select-box icon-ok"></i>';
content += '<span class="ib-file-title">'+$('<div>').text(k).html()+'</span>';
content += render(f[k]);
content += '</li>';
}
for (k in f) {
if (f[k]['_file'] === undefined) {
continue;
}
f[k]['_file']['relative_title'] = k;
content += YAAW.tpl.file(f[k]['_file']);
}
content += '</ul>';
return content;
}
//console.log(file_dict);
return render(file_dict);
},
view: {
bitfield: function() {
var graphic = "░▒▓█";
return function(text) {
var len = text.length;
var result = "";
for (var i=0; i<len; i++)
result += graphic[Math.floor(parseInt(text[i], 16)/4)] + "&#8203;";
return result;
};
},
bitfield_to_10: function() {
var graphic = "░▒▓█";
return function(text) {
var len = text.length;
var part_len = Math.ceil(len/10);
var result = "";
for (var i=0; i<10; i++) {
p = 0;
for (var j=0; j<part_len; j++) {
if (i*part_len+j >= len)
p += 16;
else
p += parseInt(text[i*part_len+j], 16);
}
result += graphic[Math.floor(p/part_len/4)] + "&#8203;";
}
return result;
};
},
bitfield_to_percent: function() {
return function(text) {
var len = text.length - 1;
var p, one = 0;
for (var i=0; i<len; i++) {
p = parseInt(text[i], 16);
for (var j=0; j<4; j++) {
one += (p & 1);
p >>= 1;
}
}
return Math.floor(one/(4*len)*100).toString();
};
},
format_size: function() {
var format_text = ["B", "KB", "MB", "GB", "TB", ];
return function format_size(size) {
if (size === '') return '';
size = parseInt(size);
var i = 0;
while (size >= 1024) {
size /= 1024;
i++;
}
if (size==0) {
return "0 KB";
} else {
return size.toFixed(2)+" "+format_text[i];
}
};
},
format_size_0: function() {
var format_text = ["B", "KB", "MB", "GB", "TB", ];
return function format_size(size) {
if (size === '') return '';
size = parseInt(size);
var i = 0;
while (size >= 1024) {
size /= 1024;
i++;
}
if (size==0) {
return "0 KB";
} else {
return size.toFixed(0)+" "+format_text[i];
}
};
},
format_time: function() {
var time_interval = [60, 60, 24];
var time_text = ["s", "m", "h"];
return function format_time(time) {
if (time == Infinity) {
return "INF";
} else if (time == 0) {
return "0s";
}
time = Math.floor(time);
var i = 0;
var result = "";
while (time > 0 && i < 3) {
result = time % time_interval[i] + time_text[i] + result;
time = Math.floor(time/time_interval[i]);
i++;
}
if (time > 0) {
result = time + "d" + result;
}
return result;
};
},
format_peerid: function() {
return function format_peerid(peerid) {
try {
var ret = window.format_peerid(peerid);
if (ret.client == 'unknown') throw 'unknown';
return ret.client+(ret.version ? '-'+ret.version : '');
} catch(e) {
if (peerid == '%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00')
return 'unknown';
var ret = unescape(peerid).split('-');
for (var i=0; i<ret.length; i++) {
if (ret[i].trim().length) return ret[i];
}
return 'unknown';
}
}
},
error_msg: function() {
var error_code_map = {
0: "",
1: "unknown error occurred.",
2: "time out occurred.",
3: "resource was not found.",
4: "resource was not found. See --max-file-not-found option.",
5: "resource was not found. See --lowest-speed-limit option.",
6: "network problem occurred.",
7: "unfinished download.",
8: "remote server did not support resume when resume was required to complete download.",
9: "there was not enough disk space available.",
10: "piece length was different from one in .aria2 control file. See --allow-piece-length-change option.",
11: "aria2 was downloading same file at that moment.",
12: "aria2 was downloading same info hash torrent at that moment.",
13: "file already existed. See --allow-overwrite option.",
14: "renaming file failed. See --auto-file-renaming option.",
15: "aria2 could not open existing file.",
16: "aria2 could not create new file or truncate existing file.",
17: "I/O error occurred.",
18: "aria2 could not create directory.",
19: "name resolution failed.",
20: "could not parse Metalink document.",
21: "FTP command failed.",
22: "HTTP response header was bad or unexpected.",
23: "too many redirections occurred.",
24: "HTTP authorization failed.",
25: "aria2 could not parse bencoded file(usually .torrent file).",
26: ".torrent file was corrupted or missing information that aria2 needed.",
27: "Magnet URI was bad.",
28: "bad/unrecognized option was given or unexpected option argument was given.",
29: "the remote server was unable to handle the request due to a temporary overloading or maintenance.",
30: "aria2 could not parse JSON-RPC request.",
};
return function(text) {
return error_code_map[text] || "";
};
},
status_icon: function() {
var status_icon_map = {
active: "icon-download-alt",
waiting: "icon-time",
paused: "icon-pause",
error: "icon-remove",
complete: "icon-ok",
removed: "icon-trash",
};
return function(text) {
return status_icon_map[text] || "";
};
},
},
},
add_task: {
submit: function(_this) {
var uri = $("#uri-input").val() || $("#uri-textarea").val() && $("#uri-textarea").val().split("\n");
var options = {}, options_save = {};
$("#add-task-option input[name], #add-task-option textarea[name]").each(function(i, n) {
var name = n.getAttribute("name");
var value = (n.type == "checkbox" ? n.checked : n.value);
if (name && value) {
options[name] = String(value);
if ($(n).hasClass("input-save")) {
options_save[name] = String(value);
}
}
});
if (uri) {
ARIA2.madd_task(uri, options);
YAAW.setting.save_add_task_option(options_save);
} else if (torrent_file) {
if (file_type.indexOf("metalink") != -1) {
ARIA2.add_metalink(torrent_file, options);
} else {
ARIA2.add_torrent(torrent_file, options);
}
YAAW.setting.save_add_task_option(options_save);
}
},
clean: function() {
$("#uri-input").attr("placeholder", "HTTP, FTP or Magnet");
$("#add-task-modal .input-clear").val("");
$("#add-task-alert").hide();
torrent_file = null;
file_type = null;
},
upload: function(file) {
var reader = new FileReader();
reader.onload = function(e) {
$("#uri-input").attr("placeholder", file.name);
torrent_file = e.target.result.replace(/.*?base64,/, "");
file_type = file.type;
};
reader.onerror = function(e) {
$("#torrent-up-input").remove();
$("#torrent-up-btn").addClass("disabled");
};
reader.readAsDataURL(file);
},
},
tasks: {
check_select: function() {
var selected = $(".tasks-table .task.selected");
if (selected.length == 0) {
selected_tasks = false;
$("#select-btn .select-box").removeClass("icon-minus icon-ok");
} else if (selected.length < $(".tasks-table .task").length) {
selected_tasks = true;
$("#select-btn .select-box").removeClass("icon-ok").addClass("icon-minus");
} else {
selected_tasks = true;
$("#select-btn .select-box").removeClass("icon-minus").addClass("icon-ok");
}
if (selected.length + $(".info-box").length == 0) {
ARIA2.select_lock(false);
} else {
ARIA2.select_lock(true);
}
if (selected_tasks) {
$("#not-selected-grp").hide();
$("#selected-grp").show();
} else {
$("#not-selected-grp").show();
$("#selected-grp").hide();
}
},
select: function(task) {
$(task).addClass("selected").find(".select-box").addClass("icon-ok");
},
unSelect: function(task) {
$(task).removeClass("selected").find(".select-box").removeClass("icon-ok");
},
toggle: function(task) {
$(task).toggleClass("selected").find(".select-box").toggleClass("icon-ok");
},
unSelectAll: function(notupdate) {
var _this = this;
$(".tasks-table .task.selected").each(function(i, n) {
_this.unSelect(n);
});
if (!notupdate)
this.check_select();
},
selectAll: function() {
var _this = this;
$(".tasks-table .task").each(function(i, n) {
_this.select(n);
});
this.check_select();
},
selectActive: function() {
var _this = this;
this.unSelectAll(true);
$(".tasks-table .task[data-status=active]").each(function(i, n) {
_this.select(n);
});
this.check_select();
},
selectWaiting: function() {
var _this = this;
this.unSelectAll(true);
$(".tasks-table .task[data-status=waiting]").each(function(i, n) {
_this.select(n);
});
this.check_select();
},
selectPaused: function() {
var _this = this;
this.unSelectAll(true);
$(".tasks-table .task[data-status=paused]").each(function(i, n) {
_this.select(n);
});
this.check_select();
},
selectStopped: function() {
var _this = this;
this.unSelectAll(true);
$("#stopped-tasks-table .task").each(function(i, n) {
_this.select(n);
});
this.check_select();
},
getSelectedGids: function() {
var gids = new Array();
$(".tasks-table .task.selected").each(function(i, n) {
gids.push(n.getAttribute("data-gid"));
});
return gids;
},
restart: function() {
var gids = new Array();
$(".tasks-table .task.selected").each(function(i, n) {
var status = n.getAttribute("data-status");
if (status == "removed" || status == "complete" || status == "error")
gids.push(n.getAttribute("data-gid"));
});
if (gids.length) ARIA2.restart_task(gids);
},
pause: function() {
var gids = new Array();
$(".tasks-table .task.selected").each(function(i, n) {
if (n.getAttribute("data-status") == "active" ||
n.getAttribute("data-status") == "waiting")
gids.push(n.getAttribute("data-gid"));
});
if (gids.length) ARIA2.pause(this.getSelectedGids());
},
unpause: function() {
var gids = new Array();
var stopped_gids = new Array();
$(".tasks-table .task.selected").each(function(i, n) {
var status = n.getAttribute("data-status");
if (status == "paused") {
gids.push(n.getAttribute("data-gid"));
} else if ("removed/error".indexOf(status) != -1) {
stopped_gids.push(n.getAttribute("data-gid"));
}
});
if (gids.length) ARIA2.unpause(gids);
if (stopped_gids.length) ARIA2.restart_task(stopped_gids);
},
remove: function() {
var gids = new Array();
var remove_list = ["active", "waiting", "paused"];
var remove_gids = new Array();
$(".tasks-table .task.selected").each(function(i, n) {
if (remove_list.indexOf(n.getAttribute("data-status")) != -1)
remove_gids.push(n.getAttribute("data-gid"));
else
gids.push(n.getAttribute("data-gid"));
});
if (remove_gids.length) ARIA2.remove(remove_gids);
if (gids.length) ARIA2.remove_result(gids);
},
movetop: function() {
var gids = new Array();
$(".tasks-table .task.selected").each(function(i, n) {
if (n.getAttribute("data-status") == "waiting" ||
n.getAttribute("data-status") == "paused")
gids.push(n.getAttribute("data-gid"));
});
gids.reverse();
ARIA2.change_selected_pos(gids, 0, 'POS_SET');
},
moveup: function() {
var gids = new Array();
$(".tasks-table .task.selected").each(function(i, n) {
if (n.getAttribute("data-status") == "waiting" ||
n.getAttribute("data-status") == "paused")
gids.push(n.getAttribute("data-gid"));
});
ARIA2.change_selected_pos(gids, -1, 'POS_CUR');
},
movedown: function() {
var gids = new Array();
$(".tasks-table .task.selected").each(function(i, n) {
if (n.getAttribute("data-status") == "waiting" ||
n.getAttribute("data-status") == "paused")
gids.push(n.getAttribute("data-gid"));
});
gids.reverse();
ARIA2.change_selected_pos(gids, 1, 'POS_CUR');
},
moveend: function() {
var gids = new Array();
$(".tasks-table .task.selected").each(function(i, n) {
if (n.getAttribute("data-status") == "waiting" ||
n.getAttribute("data-status") == "paused")
gids.push(n.getAttribute("data-gid"));
});
ARIA2.change_selected_pos(gids, 0, 'POS_END');
},
info: function(task) {
task.addClass("info-open");
task.after(YAAW.tpl.info_box({gid: task.attr("data-gid")}));
if (task.parents("#stopped-tasks-table").length) {
$("#ib-options-a").hide();
}
ARIA2.get_status(task.attr("data-gid"));
ARIA2.select_lock(true);
},
info_close: function(task) {
$(".info-box").remove();
$(".info-open").removeClass("info-open");
if ($(".tasks-table .task.selected").length == 0) {
ARIA2.select_lock(false);
} else {
ARIA2.select_lock(true);
}
},
},
contextmenu: {
init: function() {
$(".task").live("contextmenu", function(ev) {
var status = this.getAttribute("data-status");
if (status == "waiting" || status == "paused")
$("#task-contextmenu .task-move").show();
else
$("#task-contextmenu .task-move").hide();
if (status == "removed" || status == "complete" || status == "error") {
$(".task-restart").show();
$(".task-start").hide();
$(".task-pause").hide();
} else {
$(".task-restart").hide();
if (status == "active" || status == "waiting") {
$(".task-start").hide();
$(".task-pause").show();
} else {
$(".task-start").show();
$(".task-pause").hide();
}
}
var contextmenu_position_y = ev.clientY;
var contextmenu_position_x = ev.clientX;
if ($(window).height() - ev.clientY < 200) {
contextmenu_position_y = ev.clientY - $("#task-contextmenu").height();
}
if ($(window).width() - ev.clientX < 200) {
contextmenu_position_x = ev.clientX - $("#task-contextmenu").width();
}
$("#task-contextmenu").css("top", contextmenu_position_y).css("left", contextmenu_position_x).show();
on_gid = ""+this.getAttribute("data-gid");
return false;
}).live("mouseout", function(ev) {
// toElement is not available in Firefox, use relatedTarget instead.
var enteredElement = ev.toElement || ev.relatedTarget;
if ($.contains(this, enteredElement) ||
$("#task-contextmenu").get(0) == enteredElement ||
$.contains($("#task-contextmenu").get(0), enteredElement)) {
return;
}
on_gid = null;
$("#task-contextmenu").hide();
});
$("#task-contextmenu a").click(function() {
$("#task-contextmenu").hide();
});
var mouse_on = false;
$("#task-contextmenu").hover(function() {
mouse_on = true;
}, function() {
if (mouse_on) {
on_gid = null;
$("#task-contextmenu").hide();
}
});
},
restart: function() {
if (on_gid) ARIA2.restart_task([on_gid, ]);
on_gid = null;
},
pause: function() {
if (on_gid) ARIA2.pause(on_gid);
on_gid = null;
},
unpause: function() {
if (on_gid) ARIA2.unpause(on_gid);
on_gid = null;
},
remove: function() {
if (on_gid) {
var status = $("#task-gid-"+on_gid).attr("data-status");
if (status == "removed" || status == "complete" || status == "error") {
ARIA2.remove_result(on_gid);
} else {
ARIA2.remove(on_gid);
}
}
on_gid = null;
},
movetop: function() {
if (on_gid) ARIA2.change_pos(on_gid, 0, 'POS_SET');
on_gid = null;
},
moveup: function() {
if (on_gid) ARIA2.change_pos(on_gid, -1, 'POS_CUR');
on_gid = null;
},
movedown: function() {
if (on_gid) ARIA2.change_pos(on_gid, 1, 'POS_CUR');
on_gid = null;
},
moveend: function() {
if (on_gid) ARIA2.change_pos(on_gid, 0, 'POS_END');
on_gid = null;
},
},
setting: {
init: function() {
this.jsonrpc_path = $.Storage.get("jsonrpc_path") || location.protocol+"//"+(location.host.split(":")[0]||"localhost")+":6800"+"/jsonrpc";
this.refresh_interval = Number($.Storage.get("refresh_interval") || 10000);
this.finish_notification = Number($.Storage.get("finish_notification") || 1);
this.add_task_option = $.Storage.get("add_task_option");
this.jsonrpc_history = JSON.parse($.Storage.get("jsonrpc_history") || "[]");
if (this.add_task_option) {
this.add_task_option = JSON.parse(this.add_task_option);
}
// overwrite settings with hash
if (location.hash && location.hash.length) {
var args = location.hash.substring(1).split('&'), kwargs = {};
$.each(args, function(i, n) {
n = n.split('=', 2);
kwargs[n[0]] = n[1];
});
if (kwargs['path']) this.jsonrpc_path = kwargs['path'];
this.kwargs = kwargs;
}
var _this = this;
$('#setting-modal').on('hidden', function () {
_this.update();
});
this.update();
},
save_add_task_option: function(options) {
this.add_task_option = options;
$.Storage.set("add_task_option", JSON.stringify(options));
},
save: function() {
$.Storage.set("jsonrpc_path", this.jsonrpc_path);
if (this.jsonrpc_history.indexOf(this.jsonrpc_path) == -1) {
if (this.jsonrpc_history.push(this.jsonrpc_path) > 10) {
this.jsonrpc_history.shift();
}
$.Storage.set("jsonrpc_history", JSON.stringify(this.jsonrpc_history));
}
$.Storage.set("refresh_interval", String(this.refresh_interval));
$.Storage.set("finish_notification", String(this.finish_notification));
},
update: function() {
$("#setting-form #rpc-path").val(this.jsonrpc_path);
$("#setting-form input:radio[name=refresh_interval][value="+this.refresh_interval+"]").attr("checked", true);
$("#setting-form input:radio[name=finish_notification][value="+this.finish_notification+"]").attr("checked", true);
if (this.jsonrpc_history.length) {
$(".rpc-path-wrap .dropdown-menu").remove();
var content = '<ul class="dropdown-menu">';
$.each(this.jsonrpc_history, function(n, e) {
content += '<li><a href="#">'+e+'</a></li>';
});
content += '</ul>';
$(".rpc-path-wrap").append(content).on("click", "li>a", function() {
$("#setting-form #rpc-path").val($(this).text());
});
$(".rpc-path-wrap .dropdown-toggle").removeAttr("disabled").dropdown();
}
if (this.finish_notification && window.Notification && Notification.permission !== "granted") {
Notification.requestPermission();
}
},
submit: function() {
_this = $("#setting-form");
var _jsonrpc_path = _this.find("#rpc-path").val();
var _refresh_interval = Number(_this.find("input:radio[name=refresh_interval]:checked").val());
var _finish_notification = Number(_this.find("input:radio[name=finish_notification]:checked").val());
var changed = false;
if (_jsonrpc_path !== undefined && this.jsonrpc_path != _jsonrpc_path) {
this.jsonrpc_path = _jsonrpc_path;
YAAW.tasks.unSelectAll();
$("#main-alert").hide();
YAAW.aria2_init();
changed = true;
}
if (_refresh_interval !== undefined && this.refresh_interval != _refresh_interval) {
this.refresh_interval = _refresh_interval;
ARIA2.auto_refresh(this.refresh_interval);
changed = true;
}
if (_finish_notification !== undefined && this.finish_notification != _finish_notification) {
this.finish_notification = _finish_notification;
ARIA2.finish_notification = _finish_notification;
changed = true;
}
if (changed) {
this.save();
}
if (this.finish_notification && window.Notification && Notification.permission !== "granted") {
Notification.requestPermission();
}
// submit aria2 global setting
var options = {};
$("#aria2-gs-form input[name]").each(function(i, n) {
var name = n.getAttribute("name");
var value = n.value;
if (name && value)
options[name] = value;
});
ARIA2.change_global_option(options);
$("#setting-modal").modal('hide');
},
},
notification: function(title, content) {
if (!window.Notification) {
return false;
}
if (Notification.permission !== "granted")
Notification.requestPermission();
var notification = new Notification(title, {
body: content,
});
return notification;
},
}
})();
YAAW.init();