diff --git a/web/app/corpora/events.py b/web/app/corpora/events.py index 616354a921d91c4c784736f06508a78eae77365c..7e0858141dceee13672dfbe3c46393b8b70fdb12 100644 --- a/web/app/corpora/events.py +++ b/web/app/corpora/events.py @@ -28,7 +28,15 @@ corpus_analysis_clients = {} @socketio_login_required def export_corpus(corpus_id): # TODO: This should not be get_or_404 here - Socket.IO != HTTP request - corpus = Corpus.query.get_or_404(corpus_id) + corpus = Corpus.query.get(corpus_id) + if corpus is None: + response = {'code': 404, 'msg': 'Not found'} + socketio.emit('export_corpus', response, room=request.sid) + return + if corpus.status not in ['prepared', 'start analysis', 'stop analysis']: + response = {'code': 412, 'msg': 'Precondition Failed'} + socketio.emit('export_corpus', response, room=request.sid) + return # delete old corpus archive if it exists/has been build before if corpus.archive_file is not None and os.path.isfile(corpus.archive_file): os.remove(corpus.archive_file) diff --git a/web/app/static/js/nopaque/displays/CorpusDisplay.js b/web/app/static/js/nopaque/displays/CorpusDisplay.js index 68a2a11f9ff65ba11de19367a34ceea760a7525e..110646234fde6e53455881a753e41c4e5d5337aa 100644 --- a/web/app/static/js/nopaque/displays/CorpusDisplay.js +++ b/web/app/static/js/nopaque/displays/CorpusDisplay.js @@ -79,6 +79,9 @@ class CorpusDisplay extends RessourceDisplay { } } for (let element of this.displayElement.querySelectorAll('.corpus-status')) {this.setElement(element, status);} + for (let exportCorpusTriggerElement of this.displayElement.querySelectorAll('.export-corpus-trigger')) { + exportCorpusTriggerElement.classList.toggle('disabled', !['prepared', 'start analysis', 'stop analysis'].includes(status)); + } for (let element of this.displayElement.querySelectorAll('.status')) {element.dataset.status = status;} for (let element of this.displayElement.querySelectorAll('.status-spinner')) { if (['submitted', 'queued', 'running', 'canceling', 'start analysis', 'stop analysis'].includes(status)) { diff --git a/web/app/templates/corpora/corpus.html.j2 b/web/app/templates/corpora/corpus.html.j2 index cba422086b5dd631dcdcae24a81937da7844d3c8..eabed2c16c9629ff2c7a07b4c11a8413f03d8688 100644 --- a/web/app/templates/corpora/corpus.html.j2 +++ b/web/app/templates/corpora/corpus.html.j2 @@ -72,7 +72,7 @@ <div class="card-action right-align"> <a class="analyse-corpus-trigger btn disabled waves-effect waves-light" href="{{ url_for('corpora.analyse_corpus', corpus_id=corpus.id) }}"><i class="material-icons left">search</i>Analyze</a> <a class="btn build-corpus-trigger disabled waves-effect waves-light" href="{{ url_for('corpora.prepare_corpus', corpus_id=corpus.id) }}"><i class="material-icons left">build</i>Build</a> - <a class="btn export-corpus-trigger waves-effect waves-light"><i class="material-icons left">import_export</i>Export</a> + <a class="btn disabled export-corpus-trigger waves-effect waves-light"><i class="material-icons left">import_export</i>Export</a> <a class="btn modal-trigger red waves-effect waves-light" data-target="delete-corpus-modal"><i class="material-icons left">delete</i>Delete</a> </div> </div>