diff --git a/stashr/api.py b/stashr/api.py index a07bd61..6ba69d6 100644 --- a/stashr/api.py +++ b/stashr/api.py @@ -2122,6 +2122,45 @@ def api_get_directories(): return create_json_return('200', results=data, total_results=total_results) +@api.route('/scrape/directories/candidates/', methods=['GET']) +def api_get_directories_candidates(scrape_id): + """To Update Later + This is using docstrings for specifications. + --- + tags: + - scrape + """ + + user = current_user + + if not user.is_authenticated: + api_key = request.args.get('api_key') + if api_key == "": + return jsonify(create_json_return('100')) + user = database.session \ + .query(database.Users) \ + .filter(database.Users.api_key == api_key) \ + .first() + + if user is None: + return jsonify(create_json_return('100')) + + if user.role != 'admin': + return jsonify(create_json_return('401')) + + scrape_item = database.session \ + .query(database.ScrapeItems) \ + .filter(database.ScrapeItems.scrape_id == scrape_id) \ + .first() + + if scrape_item is None: + return jsonify(create_json_return('404')) + + data = scrape_item.scrape_json + + return create_json_return('200', results=data) + + @api.route('/scrape/directories/scan', methods=['POST']) def api_post_directories_scan(): """To Update Later @@ -2238,7 +2277,8 @@ def api_put_directories_edit(scrape_id): allowed_keys = [ 'scrape_add', - 'scrape_candidate' + 'scrape_candidate', + 'scrape_ignore_directory' ] check_directory = database.session \ @@ -2250,14 +2290,18 @@ def api_put_directories_edit(scrape_id): return jsonify(create_json_return('404')) for key, value in request.json['data'].items(): + print(f'{key} - {value}') if key not in allowed_keys: - database.session.rollbak() + database.session.rollback() return jsonify(create_json_return('400')) setattr(check_directory, key, value) - - database.session.merge(check_directory) - database.session.commit() - # print(check_directory.scrape_id) + + try: + database.session.merge(check_directory) + database.session.commit() + except Exception as e: + print(e) + database.session.rollback() return jsonify(create_json_return('200')) @@ -2296,15 +2340,19 @@ def api_post_directories_extend(scrape_id): 'search_terms' ] - for key, value in request.json['data'].items(): - if key not in allowed_keys: - return jsonify(create_json_return('400')) + print(f'JSON: {request.data}') + if not request.json: + return jsonify(create_json_return('400')) if "data" not in request.json: return jsonify(create_json_return('400')) if "search_terms" not in request.json['data']: return jsonify(create_json_return('400')) + for key, value in request.json['data'].items(): + if key not in allowed_keys: + return jsonify(create_json_return('400')) + search_terms = request.json['data']['search_terms'] # DO THINGS HERE diff --git a/stashr/database.py b/stashr/database.py index 42e9972..ee95e4d 100644 --- a/stashr/database.py +++ b/stashr/database.py @@ -49,6 +49,7 @@ from flask_bcrypt import generate_password_hash """ --- SQLALCHEMY IMPORTS --- """ from sqlalchemy import * +from sqlalchemy import exc from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import * @@ -441,6 +442,8 @@ class ScrapeItems(Base): scrape_candidate = Column(Integer) scrape_json = Column(String) + scrape_ignore_directory = Column(Boolean, server_default='0') + directory = relationship('Directories', primaryjoin='ScrapeItems.scrape_directory_id == Directories.directory_id', backref='scrape_items', @@ -653,8 +656,13 @@ def migrate_database(): # CHECK FOR NEW DATABASE TABLES if not engine.dialect.has_table(engine.connect(), "directory_link"): Directories.__table__.create(bind=engine) - # CHECK FOR NEW TABLE COLUMNS + # CHECK FOR NEW TABLE COLUMNS + try: + session.query(exists().where(ScrapeItems.scrape_ignore_directory)).scalar() + except exc.OperationalError: + with engine.connect() as conn: + conn.execute("ALTER TABLE scrape_items ADD column 'scrape_ignore_directory' BOOLEAN DEFAULT 0") # Create Database if not os.path.exists(folders.StashrPaths().db_path()): diff --git a/stashr/templates/base.html b/stashr/templates/base.html index ebd206c..2aa0c26 100644 --- a/stashr/templates/base.html +++ b/stashr/templates/base.html @@ -7,7 +7,7 @@ Stashr - {{ title }} - + @@ -158,11 +158,13 @@ Vue.use(VueToast); {% endif %} {% endwith %} +/* window.addEventListener("load", () => { if ("serviceWorker" in navigator) { navigator.serviceWorker.register("service-worker.js"); } }); +*/ {% block script %}{% endblock %} diff --git a/stashr/templates/scrape_page.html b/stashr/templates/scrape_page.html index 4e35eb7..41c5179 100644 --- a/stashr/templates/scrape_page.html +++ b/stashr/templates/scrape_page.html @@ -11,7 +11,7 @@ {% block content %}
- +
@@ -67,7 +67,14 @@ Vue.component('modal', {
- +
+ +
+ +
+
+ +
`, - data() { return { search: '', } }, + data() { return { search: '', ignore: 'false', checked: false} }, computed: { filteredList() { - return this.directories.filter(directory => { - return directory.scrape_directory.toLowerCase().includes(this.search.toLowerCase()) - }) + if (!this.checked) { + return this.directories + .filter(directory => { return directory.scrape_directory.toLowerCase().includes(this.search.toLowerCase()) }) + .filter(directory => { return directory.scrape_ignore_directory.toString().includes(this.checked) }) + } else { + return this.directories + .filter(directory => { return directory.scrape_directory.toLowerCase().includes(this.search.toLowerCase()) }) + } }, }, methods: {}, @@ -288,6 +315,44 @@ var app = new Vue({ } }) }, + toggleDirectoryIgnore() { + console.log('toggle') + axios.put('{{ url_for('api.api_put_directories_edit', scrape_id='SCRAPEID') }}'.replace('SCRAPEID', this.individual.scrape_id), { + data: { + scrape_ignore_directory: !this.individual.scrape_ignore_directory + } + }) + .then(res=> { + console.log(res) + if(res.data.status_code == 200) { + this.individual.scrape_ignore_directory = !this.individual.scrape_ignore_directory + if(this.individual.scrape_ignore_directory) { + stashrToast('Directory Hidden', 'success') + } else { + stashrToast('Directory Unhidden', 'success') + } + } + }) + .catch(err => console.log(err)) + }, + searchNewResults(search) { + axios.post('{{ url_for('api.api_post_directories_extend', scrape_id='SCRAPEID') }}'.replace('SCRAPEID', this.individual.scrape_id), { + data: { + search_terms: search + } + }) + .then(res => { + if(res.data.status_code == 200) { + axios.get('{{ url_for('api.api_get_directories_candidates', scrape_id='SCRAPEID') }}'.replace('SCRAPEID', this.individual.scrape_id)) + .then(res => { + if (res.data.status_code == 200) { + this.directories = []; + this.getDirectories(); + } + }) + } + }) + } }, delimiters: ["[","]]"] }) diff --git a/stashr/templates/settings_page.html b/stashr/templates/settings_page.html index 5f26272..4d794e3 100644 --- a/stashr/templates/settings_page.html +++ b/stashr/templates/settings_page.html @@ -8,7 +8,7 @@ - + diff --git a/stashr/utils.py b/stashr/utils.py index fe2a09e..35d4aec 100644 --- a/stashr/utils.py +++ b/stashr/utils.py @@ -1094,7 +1094,9 @@ def new_scrape_extend_matches(scrape_id, search_terms=None): print(len(candidates.results)) - scrape_item.scrape_json = json.dumps(candidates.results) + if len(candidates.results) > 0: + scrape_item.scrape_json = json.dumps(candidates.results) + scrape_item.scrape_candidate = candidates.results[0]['id'] database.session.merge(scrape_item) database.session.commit()