Remove import code.

This commit is contained in:
James Cole
2020-06-06 21:23:26 +02:00
parent 60fa0d7244
commit 6cc4d14fcb
217 changed files with 41 additions and 23415 deletions

View File

@@ -1 +0,0 @@
Options -Indexes

View File

@@ -1 +0,0 @@
Options -Indexes

View File

@@ -1,40 +0,0 @@
/*
* configure-upload.js
* Copyright (c) 2019 james@firefly-iii.org
*
* This file is part of Firefly III (https://github.com/firefly-iii).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
$(function () {
"use strict";
var importMultiSelect = {
disableIfEmpty: true,
selectAllText: selectAllText,
nonSelectedText: nonSelectedText,
nSelectedText: nSelectedText,
allSelectedText: allSelectedText,
includeSelectAllOption: true,
enableFiltering: true,
enableCaseInsensitiveFiltering: true,
filterPlaceholder: filterPlaceholder,
enableHTML: true,
};
// make account select a hip new bootstrap multi-select thing.
$('#inputSpecifics').multiselect(importMultiSelect);
});

View File

@@ -1,301 +0,0 @@
/*
* status.js
* Copyright (c) 2019 james@firefly-iii.org
*
* This file is part of Firefly III (https://github.com/firefly-iii).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
/** global: job, langImportSingleError, langImportMultiError, jobStartUrl, langImportTimeOutError, langImportFinished, langImportFatalError */
var timeOutId;
var startInterval = 1000;
var interval = 500;
// these vars are used to detect a stalled job:
var numberOfSteps = 0;
var numberOfReports = 0;
var jobFailed = false;
var pressedStart = false;
// counts how many errors have been detected
var knownErrors = 0;
$(function () {
"use strict";
timeOutId = setTimeout(checkJobStatus, startInterval);
$('.start-job').click(function () {
// notify (extra) that start button is pressed.
pressedStart = true;
startJob();
});
if (job.configuration['auto-start']) {
startJob();
}
});
/**
* Downloads some JSON and responds to its content to see what the status is of the current import.
*/
function checkJobStatus() {
console.log('In checkJobStatus()');
if(jobFailed) {
return;
}
$.getJSON(jobStatusUri).done(reportOnJobStatus).fail(reportFailedJob);
}
/**
* This method is called when the JSON query returns an error. If possible, this error is relayed to the user.
*/
function reportFailedJob(jqxhr, textStatus, error) {
console.log('In reportFailedJob()');
// cancel refresh
clearTimeout(timeOutId);
// hide all possible boxes:
$('.statusbox').hide();
// fill in some details:
var errorMessage = textStatus + " " + error;
$('.fatal_error_txt').text(errorMessage);
// show the fatal error box:
$('.fatal_error').show();
}
/**
* This method is called when the job enquiry (JSON) returns some info.
* It also decides whether or not to check again.
*
* @param data
*/
function reportOnJobStatus(data) {
console.log('In reportOnJobStatus()');
switch (data.status) {
case "configured":
console.log('Job reports configured.');
// job is ready. Do not check again, just show the start-box. Hide the rest.
if (!job.configuration['auto-start']) {
$('.statusbox').hide();
$('.status_configured').show();
}
if (job.configuration['auto-start']) {
timeOutId = setTimeout(checkJobStatus, interval);
}
if (pressedStart) {
// do a time out just in case. Could be that job is running or is even done already.
timeOutId = setTimeout(checkJobStatus, 2000);
pressedStart = false;
}
break;
case "running":
console.log('Job reports running.');
// job is running! Show the running box:
$('.statusbox').hide();
$('.status_running').show();
// update the bar
updateBar(data);
// update the status text:
updateStatusText(data);
// report on detected errors:
reportOnErrors(data);
if (jobIsStalled(data)) {
// do something
showStalledBox();
} else {
// check again in 500ms
timeOutId = setTimeout(checkJobStatus, interval);
}
break;
case "finished":
console.log('Job reports finished.');
$('.statusbox').hide();
$('.status_finished').show();
// report on detected errors:
reportOnErrors(data);
// show text:
$('#import-status-more-info').html(data.finishedText);
break;
case "error":
clearTimeout(timeOutId);
console.log('Job reports ERROR.');
// hide all possible boxes:
$('.statusbox').hide();
// fill in some details:
var errorMessage = data.errors.join(", ");
$('.fatal_error_txt').text(errorMessage);
// show the fatal error box:
$('.fatal_error').show();
break;
case "configuring":
console.log('Job reports configuring.');
// redirect back to configure screen.
window.location = jobConfigureUri;
break;
default:
console.error('Cannot handle job status ' + data.status);
break;
}
}
/**
* Shows a fatal error when the job seems to be stalled.
*/
function showStalledBox() {
console.log('In showStalledBox().');
$('.statusbox').hide();
$('.fatal_error').show();
$('.fatal_error_txt').text(langImportTimeOutError);
}
/**
* Detects if a job is frozen.
*
* @param data
*/
function jobIsStalled(data) {
console.log('In jobIsStalled().');
if (data.done === numberOfSteps) {
numberOfReports++;
console.log('Number of reports ' + numberOfReports);
}
if (data.done !== numberOfSteps) {
numberOfReports = 0;
console.log('Number of reports ' + numberOfReports);
}
if (numberOfReports > 20) {
console.log('Number of reports > 20! ' + numberOfReports);
return true;
}
numberOfSteps = data.done;
console.log('Number of steps ' + numberOfSteps);
return false;
}
/**
* This function tells Firefly start the job. It will also initialize a re-check in 500ms time.
* Only when job is in "configured" state.
*/
function startJob() {
console.log('In startJob().');
if (job.status === "configured") {
console.log('Job status = configured.');
// disable the button, add loading thing.
$('.start-job').prop('disabled', true).text('...');
$.post(jobStartUri, {_token: token}).fail(reportOnSubmitError);
// check status, every 500 ms.
timeOutId = setTimeout(checkJobStatus, startInterval);
return;
}
console.log('Job.status = ' + job.status);
}
/**
* When the start button fails (returns error code) this function reports. It assumes a time out.
*/
function reportOnSubmitError(jqxhr, textStatus, error) {
console.log('In reportOnSubmitError().');
// stop the refresh thing
clearTimeout(timeOutId);
// hide all possible boxes:
$('.statusbox').hide();
// fill in some details:
var errorMessage = "Submitting the job returned an error: " + textStatus + ' ' + error;
$('.fatal_error_txt').text(errorMessage);
// show the fatal error box:
$('.fatal_error').show();
jobFailed = true;
}
/**
* This method updates the percentage bar thing if the job is running!
*/
function updateBar(data) {
console.log('In updateBar().');
var bar = $('#import-status-bar');
if (data.show_percentage) {
bar.addClass('progress-bar-success').removeClass('progress-bar-info');
bar.attr('aria-valuenow', data.percentage);
bar.css('width', data.percentage + '%');
$('#import-status-bar').text(data.done + '/' + data.steps);
return true;
}
// dont show percentage:
bar.removeClass('progress-bar-success').addClass('progress-bar-info');
bar.attr('aria-valuenow', 100);
bar.css('width', '100%');
return true;
}
/**
* Add text with current import status.
* @param data
*/
function updateStatusText(data) {
"use strict";
console.log('In updateStatusText().');
$('#import-status-txt').removeClass('text-danger').text(data.statusText);
}
/**
* Report on errors found in import:
* @param data
*/
function reportOnErrors(data) {
console.log('In reportOnErrors().');
if (knownErrors === data.errors.length) {
return;
}
if (data.errors.length === 0) {
return;
}
if (data.errors.length === 1) {
$('#import-status-error-intro').text(langImportSingleError);
//'An error has occurred during the import. The import can continue, however.'
}
if (data.errors.length > 1) {
// 'Errors have occurred during the import. The import can continue, however.'
$('#import-status-error-intro').text(langImportMultiError);
}
$('.info_errors').show();
// fill the list with error texts
$('#import-status-error-list').empty();
for (var i = 0; i < data.errors.length; i++) {
var errorSet = data.errors[i];
for (var j = 0; j < errorSet.length; j++) {
var item = $('<li>').html(errorSet[j]);
$('#import-status-error-list').append(item);
}
}
}

View File

@@ -1,296 +0,0 @@
/*
* status_v2.js
* Copyright (c) 2019 james@firefly-iii.org
*
* This file is part of Firefly III (https://github.com/firefly-iii).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
/** global: jobStatusUri */
var timeOutId;
var jobRunRoutineStarted = false;
var jobStorageRoutineStarted = false;
var checkInitialInterval = 1000;
var checkNextInterval = 500;
var maxLoops = 65536;
var totalLoops = 0;
var startCount = 0;
var jobFailed = false;
// set to true when error is reported.
// will prevent double error reporting
var reportedError = false;
$(function () {
"use strict";
timeOutId = setTimeout(checkJobJSONStatus, checkInitialInterval);
});
/**
* Downloads some JSON and responds to its content to see what the status is of the current import job.
*/
function checkJobJSONStatus() {
//console.log('In checkJobJSONStatus()');
if (jobFailed === false) {
$.getJSON(jobStatusUri).done(reportJobJSONDone).fail(reportJobJSONFailure);
}
if (jobFailed === true) {
console.error('Job has failed, will not check.');
}
}
/**
* Reports to the user what the state is of the current job.
*
* @param data
*/
function reportJobJSONDone(data) {
//console.log('In reportJobJSONDone() with status "' + data.status + '"');
//console.log(data);
switch (data.status) {
case "ready_to_run":
if (startCount > 0) {
jobRunRoutineStarted = false;
}
startCount++;
sendJobPOSTStart();
recheckJobJSONStatus();
break;
case "need_job_config":
console.log("Will redirect user to " + jobConfigurationUri);
// redirect user to configuration for this job.
window.location.replace(jobConfigurationUri);
break;
case 'error':
reportJobError(data);
break;
case 'provider_finished':
// call routine to store stuff:
sendJobPOSTStore();
recheckJobJSONStatus();
break;
case "storage_finished":
case "finished":
showJobResults(data);
break;
default:
//console.warn('No specific action for status ' + data.status);
showProgressBox(data.status);
recheckJobJSONStatus();
}
}
/**
*
* @param data
*/
function showJobResults(data) {
//console.log('In showJobResults()');
// hide all boxes.
$('.statusbox').hide();
// render the count:
$('#import-status-more-info').append($('<span>').html(data.report_txt));
// render relevant data from JSON thing.
if (data.errors.length > 0) {
$('#import-status-error-txt').show();
data.errors.forEach(function (element) {
console.error(element);
$('#import-status-errors').append($('<li>').text(element));
});
}
if(data.download_config) {
$('#import-status-download').append($('<span>').html(data.download_config_text));
}
// show success box.
$('.status_finished').show();
}
/**
* Will refresh and get job status.
*/
function recheckJobJSONStatus() {
//console.log('In recheckJobJSONStatus()');
if (maxLoops !== 0 && totalLoops < maxLoops && jobFailed === false) {
timeOutId = setTimeout(checkJobJSONStatus, checkNextInterval);
}
if (maxLoops !== 0) {
console.log('max: ' + maxLoops + ' current: ' + totalLoops);
}
if (jobFailed === true) {
console.error('Job has failed, will not do recheck.');
}
totalLoops++;
}
/**
* Start the job.
*/
function sendJobPOSTStart() {
console.log('In sendJobPOSTStart()');
if (jobRunRoutineStarted) {
console.log('Import job already started!');
return;
}
if (jobFailed === true) {
console.log('Job has failed, will not start again.');
return;
}
console.log('Job was started');
jobRunRoutineStarted = true;
$.post(jobStartUri, {_token: token}).fail(reportJobPOSTFailure).done(reportJobPOSTDone)
}
/**
* Start the storage routine for this job.
*/
function sendJobPOSTStore() {
console.log('In sendJobPOSTStore()');
if (jobStorageRoutineStarted) {
console.log('Store job already started!');
return;
}
if (jobFailed === true) {
console.log('Job has failed, will not start again.');
return;
}
console.log('Storage job has started!');
jobStorageRoutineStarted = true;
$.post(jobStorageStartUri, {_token: token}).fail(reportJobPOSTFailure).done(reportJobPOSTDone)
}
/**
* Function is called when the JSON array could not be retrieved.
*
* @param xhr
* @param status
* @param error
*/
function reportJobJSONFailure(xhr, status, error) {
console.log('In reportJobJSONFailure()');
jobFailed = true;
if (reportedError === false) {
reportedError = true;
// cancel checking again for job status:
clearTimeout(timeOutId);
// hide status boxes:
$('.statusbox').hide();
// show fatal error box:
$('.fatal_error').show();
$('.fatal_error_txt').text('Cannot get status of current job: ' + status + ': ' + error);
}
}
/**
*
*/
function showProgressBox(status) {
//console.log('In showProgressBox()');
// hide fatal error box:
$('.fatal_error').hide();
// hide initial status box:
$('.status_initial').hide();
// show running box:
$('.status_running').show();
if (status === 'running' || status === 'ready_to_run') {
$('#import-status-txt').text(langImportRunning);
return;
}
if (status === 'storing_data' || status === 'storage_finished' || status === 'stored_data') {
$('#import-status-txt').text(langImportStoring);
return;
}
if (status === 'applying_rules' || status === 'linking_to_tag' || status === 'linked_to_tag' || status === 'rules_applied') {
$('#import-status-txt').text(langImportRules);
return;
}
$('#import-status-txt').text('Job status: ' + status);
}
/**
* Function is called when the job could not be started.
*
* @param xhr
* @param status
* @param error
*/
function reportJobPOSTFailure(xhr, status, error) {
//console.log('In reportJobPOSTFailure()');
// cancel checking again for job status:
clearTimeout(timeOutId);
if (reportedError === false) {
reportedError = true;
// hide status boxes:
$('.statusbox').hide();
// show fatal error box:
$('.fatal_error').show();
console.error('Job could not be started or crashed: ' + status + ': ' + error);
$('.fatal_error_txt').text('Job could not be started or crashed: ' + status + ': ' + error);
// show error box.
}
}
/**
* Show error to user.
*/
function reportJobError(data) {
console.log('In reportJobError()');
// cancel checking again for job status:
clearTimeout(timeOutId);
if (reportedError === false) {
reportedError = true;
// hide status boxes:
$('.statusbox').hide();
// show fatal error box:
$('.fatal_error').show();
console.error(data.report_txt);
$('.fatal_error_txt').text('Job reports error. Please start again. Apologies. Error message is: ' + data.report_txt);
}
}
function reportJobPOSTDone(data) {
console.log('In function reportJobPOSTDone() with status "' + data.status + '"');
if (data.status === 'NOK' && reportedError === false) {
reportedError = true;
// cancel checking again for job status:
clearTimeout(timeOutId);
// hide status boxes:
$('.statusbox').hide();
// show fatal error box:
$('.fatal_error').show();
console.error(data.message);
$('.fatal_error_txt').text('Job could not be started or crashed: ' + data.message);
}
}