mirror of
https://github.com/Jackett/Jackett.git
synced 2025-09-17 17:34:09 +02:00
Add the ability to select multiple public indexers at one time. (#11721)
This commit is contained in:
@@ -316,36 +316,7 @@ function displayUnconfiguredIndexersList() {
|
|||||||
$(btn).click(function () {
|
$(btn).click(function () {
|
||||||
$('#select-indexer-modal').modal('hide').on('hidden.bs.modal', function (e) {
|
$('#select-indexer-modal').modal('hide').on('hidden.bs.modal', function (e) {
|
||||||
var indexerId = $(btn).attr("data-id");
|
var indexerId = $(btn).attr("data-id");
|
||||||
api.getIndexerConfig(indexerId, function (data) {
|
addIndexer(indexerId, true);
|
||||||
if (data.result !== undefined && data.result == "error") {
|
|
||||||
doNotify("Error: " + data.error, "danger", "glyphicon glyphicon-alert");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
api.updateIndexerConfig(indexerId, data, function (data) {
|
|
||||||
if (data == undefined) {
|
|
||||||
reloadIndexers();
|
|
||||||
doNotify("Successfully configured " + name, "success", "glyphicon glyphicon-ok");
|
|
||||||
} else if (data.result == "error") {
|
|
||||||
if (data.config) {
|
|
||||||
populateConfigItems(configForm, data.config);
|
|
||||||
}
|
|
||||||
doNotify("Configuration failed: " + data.error, "danger", "glyphicon glyphicon-alert");
|
|
||||||
}
|
|
||||||
}).fail(function (data) {
|
|
||||||
if (data.responseJSON.error !== undefined) {
|
|
||||||
var indexEnd = 2048 - "https://github.com/Jackett/Jackett/issues/new?title=[".length - indexerId.length - "] ".length - " (Config)".length; // keep url <= 2k #5104
|
|
||||||
var githubrepo = "Jackett/Jackett";
|
|
||||||
var githubtext = "this indexer";
|
|
||||||
if (data.responseJSON.error.includes("check FlareSolverr logs") || data.responseJSON.error.includes("cookies provided by FlareSolverr are not valid")) {
|
|
||||||
githubrepo = "FlareSolverr/FlareSolverr";
|
|
||||||
githubtext = "FlareSolverr";
|
|
||||||
}
|
|
||||||
doNotify("An error occurred while configuring this indexer<br /><b>" + data.responseJSON.error.substring(0, indexEnd) + "</b><br /><i><a href=\"https://github.com/" + githubrepo + "/issues/new?title=[" + indexerId + "] " + data.responseJSON.error.substring(0, indexEnd) + " (Config)\" target=\"_blank\">Click here to open an issue on GitHub for " + githubtext + ".</a><i>", "danger", "glyphicon glyphicon-alert", false);
|
|
||||||
} else {
|
|
||||||
doNotify("An error occurred while configuring this indexer, is Jackett server running ?", "danger", "glyphicon glyphicon-alert");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -388,6 +359,9 @@ function displayUnconfiguredIndexersList() {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
"drawCallback": function (settings) {
|
||||||
|
addCheckOnCellClick();
|
||||||
|
},
|
||||||
"stateSave": true,
|
"stateSave": true,
|
||||||
"stateDuration": 0,
|
"stateDuration": 0,
|
||||||
"fnStateSaveParams": function (oSettings, sValue) {
|
"fnStateSaveParams": function (oSettings, sValue) {
|
||||||
@@ -400,47 +374,58 @@ function displayUnconfiguredIndexersList() {
|
|||||||
[10, 20, 50, 100, 250, 500, -1],
|
[10, 20, 50, 100, 250, 500, -1],
|
||||||
[10, 20, 50, 100, 250, 500, "All"]
|
[10, 20, 50, 100, 250, 500, "All"]
|
||||||
],
|
],
|
||||||
|
"select": {
|
||||||
|
style: 'os',
|
||||||
|
selector: 'td:first-child'
|
||||||
|
},
|
||||||
"order": [
|
"order": [
|
||||||
[0, "asc"]
|
[1, "asc"]
|
||||||
],
|
],
|
||||||
"columnDefs": [{
|
"columnDefs": [{
|
||||||
"name": "name",
|
"name": "select",
|
||||||
"targets": 0,
|
"targets": 0,
|
||||||
"visible": true,
|
"visible": true,
|
||||||
"searchable": true,
|
"searchable": false,
|
||||||
"orderable": true
|
"orderable": false
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "description",
|
"name": "name",
|
||||||
"targets": 1,
|
"targets": 1,
|
||||||
"visible": true,
|
"visible": true,
|
||||||
"searchable": true,
|
"searchable": true,
|
||||||
"orderable": true
|
"orderable": true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "type",
|
"name": "description",
|
||||||
"targets": 2,
|
"targets": 2,
|
||||||
"visible": true,
|
"visible": true,
|
||||||
"searchable": true,
|
"searchable": true,
|
||||||
"orderable": true
|
"orderable": true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "type_string",
|
"name": "type",
|
||||||
"targets": 3,
|
"targets": 3,
|
||||||
"visible": false,
|
"visible": true,
|
||||||
"searchable": true,
|
"searchable": true,
|
||||||
"orderable": true,
|
"orderable": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "type_string",
|
||||||
|
"targets": 4,
|
||||||
|
"visible": false,
|
||||||
|
"searchable": false,
|
||||||
|
"orderable": false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "language",
|
"name": "language",
|
||||||
"targets": 4,
|
"targets": 5,
|
||||||
"visible": true,
|
"visible": true,
|
||||||
"searchable": true,
|
"searchable": true,
|
||||||
"orderable": true
|
"orderable": true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "buttons",
|
"name": "buttons",
|
||||||
"targets": 5,
|
"targets": 6,
|
||||||
"visible": true,
|
"visible": true,
|
||||||
"searchable": false,
|
"searchable": false,
|
||||||
"orderable": false
|
"orderable": false
|
||||||
@@ -461,9 +446,64 @@ function displayUnconfiguredIndexersList() {
|
|||||||
|
|
||||||
$("#modals").append(UnconfiguredIndexersDialog);
|
$("#modals").append(UnconfiguredIndexersDialog);
|
||||||
|
|
||||||
|
$('#add-selected-indexers').click(function () {
|
||||||
|
var selectedIndexers = $('#unconfigured-indexer-datatable').DataTable().$('input[type="checkbox"]');
|
||||||
|
var hasSelectedIndexers = selectedIndexers.is(':checked');
|
||||||
|
if (hasSelectedIndexers) {
|
||||||
|
doNotify("Adding selected Indexers, please wait...", "info", "glyphicon glyphicon-transfer", false);
|
||||||
|
$('#select-indexer-modal button').attr('disabled', true);
|
||||||
|
|
||||||
|
addIndexers(selectedIndexers,
|
||||||
|
addSelectedIndexersSuccess,
|
||||||
|
addSelectedIndexersError);
|
||||||
|
} else {
|
||||||
|
doNotify("Error: You must select more than one indexer", "danger", "glyphicon glyphicon-alert");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
UnconfiguredIndexersDialog.modal("show");
|
UnconfiguredIndexersDialog.modal("show");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function addSelectedIndexersSuccess() {
|
||||||
|
$.notifyClose();
|
||||||
|
$('#select-indexer-modal').modal('hide');
|
||||||
|
doNotify("Selected indexers successfully added.", "success", "glyphicon glyphicon-ok");
|
||||||
|
$('#select-indexer-modal button').attr('disabled', false);
|
||||||
|
}
|
||||||
|
|
||||||
|
function addSelectedIndexersError(e, xhr, options, err) {
|
||||||
|
doNotify("Configuration failed", "danger", "glyphicon glyphicon-alert");
|
||||||
|
}
|
||||||
|
|
||||||
|
function addCheckOnCellClick() {
|
||||||
|
$('td.checkboxColumn')
|
||||||
|
.off('click')
|
||||||
|
.on('click', (function (event) {
|
||||||
|
if (!$(event.target).is('input')) {
|
||||||
|
$('input:checkbox', this).prop('checked', function (i, value) {
|
||||||
|
return !value;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
function addIndexers(selectedIndexerList, successCallback, errorCallback) {
|
||||||
|
$(document).ajaxStop(function () {
|
||||||
|
if (successCallback == addSelectedIndexersSuccess) {
|
||||||
|
$(document).ajaxStop().unbind(); // Keep future AJAX events from effecting this
|
||||||
|
successCallback();
|
||||||
|
}
|
||||||
|
}).ajaxError(function (e, xhr, options, err) {
|
||||||
|
errorCallback(e, xhr, options, err);
|
||||||
|
});
|
||||||
|
|
||||||
|
selectedIndexerList.each(function () {
|
||||||
|
if (this.checked) {
|
||||||
|
addIndexer($(this).data('id'), false);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
function createDropDownHtml(column, exactMatch) {
|
function createDropDownHtml(column, exactMatch) {
|
||||||
var select = $('<select><option value="">Show all</option></select>')
|
var select = $('<select><option value="">Show all</option></select>')
|
||||||
.appendTo($(column.footer()).empty())
|
.appendTo($(column.footer()).empty())
|
||||||
@@ -486,6 +526,42 @@ function createDropDownHtml(column, exactMatch) {
|
|||||||
return select;
|
return select;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function addIndexer(indexerId, displayNotification) {
|
||||||
|
api.getIndexerConfig(indexerId, function (data) {
|
||||||
|
if (data.result !== undefined && data.result == "error") {
|
||||||
|
doNotify("Error: " + data.error, "danger", "glyphicon glyphicon-alert");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
api.updateIndexerConfig(indexerId, data, function (data) {
|
||||||
|
if (data == undefined) {
|
||||||
|
reloadIndexers();
|
||||||
|
if (displayNotification) {
|
||||||
|
doNotify("Successfully configured " + indexerId, "success", "glyphicon glyphicon-ok");
|
||||||
|
}
|
||||||
|
} else if (data.result == "error") {
|
||||||
|
if (data.config) {
|
||||||
|
populateConfigItems(configForm, data.config);
|
||||||
|
}
|
||||||
|
doNotify("Configuration failed: " + data.error, "danger", "glyphicon glyphicon-alert");
|
||||||
|
}
|
||||||
|
}).fail(function (data) {
|
||||||
|
if (data.responseJSON.error !== undefined) {
|
||||||
|
var indexEnd = 2048 - "https://github.com/Jackett/Jackett/issues/new?title=[".length - indexerId.length - "] ".length - " (Config)".length; // keep url <= 2k #5104
|
||||||
|
var githubrepo = "Jackett/Jackett";
|
||||||
|
var githubtext = "this indexer";
|
||||||
|
if (data.responseJSON.error.includes("check FlareSolverr logs") || data.responseJSON.error.includes("cookies provided by FlareSolverr are not valid")) {
|
||||||
|
githubrepo = "FlareSolverr/FlareSolverr";
|
||||||
|
githubtext = "FlareSolverr";
|
||||||
|
}
|
||||||
|
doNotify("An error occurred while configuring this indexer<br /><b>" + data.responseJSON.error.substring(0, indexEnd) + "</b><br /><i><a href=\"https://github.com/" + githubrepo + "/issues/new?title=[" + indexerId + "] " + data.responseJSON.error.substring(0, indexEnd) + " (Config)\" target=\"_blank\">Click here to open an issue on GitHub for " + githubtext + ".</a><i>", "danger", "glyphicon glyphicon-alert", false);
|
||||||
|
} else {
|
||||||
|
doNotify("An error occurred while configuring this indexer, is Jackett server running ?", "danger", "glyphicon glyphicon-alert");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
function copyToClipboard(text) {
|
function copyToClipboard(text) {
|
||||||
// create hidden text element, if it doesn't already exist
|
// create hidden text element, if it doesn't already exist
|
||||||
var targetId = "_hiddenCopyText_";
|
var targetId = "_hiddenCopyText_";
|
||||||
@@ -1274,6 +1350,7 @@ function bindUIButtons() {
|
|||||||
$('#jackett-add-indexer').click(function () {
|
$('#jackett-add-indexer').click(function () {
|
||||||
$("#modals").empty();
|
$("#modals").empty();
|
||||||
displayUnconfiguredIndexersList();
|
displayUnconfiguredIndexersList();
|
||||||
|
addCheckOnCellClick();
|
||||||
$('#unconfigured-indexer-datatable tfoot tr').insertAfter($('#unconfigured-indexer-datatable thead tr'));
|
$('#unconfigured-indexer-datatable tfoot tr').insertAfter($('#unconfigured-indexer-datatable thead tr'));
|
||||||
$('#unconfigured-indexer-datatable').DataTable().search('').columns().search('').draw();
|
$('#unconfigured-indexer-datatable').DataTable().search('').columns().search('').draw();
|
||||||
});
|
});
|
||||||
|
@@ -351,10 +351,11 @@
|
|||||||
<table id="unconfigured-indexer-datatable" class="indexer-table dataTable compact cell-border hover stripe table table-responsive">
|
<table id="unconfigured-indexer-datatable" class="indexer-table dataTable compact cell-border hover stripe table table-responsive">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
|
<th></th>
|
||||||
<th>Indexer</th>
|
<th>Indexer</th>
|
||||||
<th>Categories</th>
|
<th>Categories</th>
|
||||||
<th>Type</th>
|
<th>Type</th>
|
||||||
<th>Type string</th>
|
<th data-type="hiddendata">Type string</th>
|
||||||
<th>Language</th>
|
<th>Language</th>
|
||||||
<th></th>
|
<th></th>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -362,10 +363,15 @@
|
|||||||
<tbody>
|
<tbody>
|
||||||
{{#each indexers}}
|
{{#each indexers}}
|
||||||
<tr class="unconfigured-indexer-row">
|
<tr class="unconfigured-indexer-row">
|
||||||
|
<td class="checkboxColumn">
|
||||||
|
{{#if_eq type "public"}}
|
||||||
|
<input type="checkbox" id="select{{id}}" data-id="{{id}}" />
|
||||||
|
{{/if_eq}}
|
||||||
|
</td>
|
||||||
<td><a target="_blank" href="{{site_link}}" title="{{description}}">{{name}}</a></td>
|
<td><a target="_blank" href="{{site_link}}" title="{{description}}">{{name}}</a></td>
|
||||||
<td>{{mains_cats}}</td>
|
<td>{{mains_cats}}</td>
|
||||||
<td class="fit"><span title="{{type}}" class="label label-{{type_label}}" style="text-transform: capitalize;">{{type}}</span></td>
|
<td class="fit"><span title="{{type}}" class="label label-{{type_label}}" style="text-transform: capitalize;">{{type}}</span></td>
|
||||||
<td>{{type}}</td>
|
<td data-type="hiddendata">{{type}}</td>
|
||||||
<td class="fit">{{language}}</td>
|
<td class="fit">{{language}}</td>
|
||||||
<td class="fit">
|
<td class="fit">
|
||||||
<div class="indexer-buttons">
|
<div class="indexer-buttons">
|
||||||
@@ -384,10 +390,11 @@
|
|||||||
</tbody>
|
</tbody>
|
||||||
<tfoot>
|
<tfoot>
|
||||||
<tr>
|
<tr>
|
||||||
|
<th></th>
|
||||||
<th>Indexer</th>
|
<th>Indexer</th>
|
||||||
<th>Categories</th>
|
<th>Categories</th>
|
||||||
<th>Type</th>
|
<th>Type</th>
|
||||||
<th>Type string</th>
|
<th data-type="hiddendata">Type string</th>
|
||||||
<th>Language</th>
|
<th>Language</th>
|
||||||
<th></th>
|
<th></th>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -618,7 +625,9 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
|
<button type="button" id="add-selected-indexers" class="btn btn-default">Add Selected</button>
|
||||||
|
<button type="button" id="close-selected-indexers" class="btn btn-default"
|
||||||
|
data-dismiss="modal">Close</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -723,6 +732,6 @@
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<script type="text/javascript" src="../libs/api.js?changed=2017083001"></script>
|
<script type="text/javascript" src="../libs/api.js?changed=2017083001"></script>
|
||||||
<script type="text/javascript" src="../custom.js?changed=PR11717"></script>
|
<script type="text/javascript" src="../custom.js?changed=PR11721"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
Reference in New Issue
Block a user