From 3be47d6e57d6e50c89c9c58cf2f54b8c228ade45 Mon Sep 17 00:00:00 2001
From: Ozzie Isaacs <ozzie.fernandez.isaacs@googlemail.com>
Date: Sat, 9 Oct 2021 14:57:23 +0200
Subject: [PATCH] edit_books prepared for kobo sync

---
 cps/editbooks.py        |  6 +++---
 cps/kobo.py             | 15 ++-------------
 cps/kobo_sync_status.py | 34 ++++++++++++++++++++++++++++++++++
 cps/ub.py               |  1 -
 4 files changed, 39 insertions(+), 17 deletions(-)
 create mode 100644 cps/kobo_sync_status.py

diff --git a/cps/editbooks.py b/cps/editbooks.py
index 063eba2a..d3e1f01e 100644
--- a/cps/editbooks.py
+++ b/cps/editbooks.py
@@ -39,14 +39,12 @@ try:
 except ImportError:
     have_scholar = False
 
-from babel import Locale as LC
-from babel.core import UnknownLocaleError
 from flask import Blueprint, request, flash, redirect, url_for, abort, Markup, Response
 from flask_babel import gettext as _
 from flask_login import current_user, login_required
 from sqlalchemy.exc import OperationalError, IntegrityError
 from sqlite3 import OperationalError as sqliteOperationalError
-from . import constants, logger, isoLanguages, gdriveutils, uploader, helper
+from . import constants, logger, isoLanguages, gdriveutils, uploader, helper, kobo_sync_status
 from . import config, get_locale, ub, db
 from . import calibre_db
 from .services.worker import WorkerThread
@@ -825,6 +823,8 @@ def edit_book(book_id):
 
             if modif_date:
                 book.last_modified = datetime.utcnow()
+                kobo_sync_status.remove_synced_book(edited_books_id)
+
             calibre_db.session.merge(book)
             calibre_db.session.commit()
             if config.config_use_google_drive:
diff --git a/cps/kobo.py b/cps/kobo.py
index ad0771a4..284a53bb 100644
--- a/cps/kobo.py
+++ b/cps/kobo.py
@@ -19,7 +19,6 @@
 
 import base64
 import datetime
-import sys
 import os
 import uuid
 from time import gmtime, strftime
@@ -48,7 +47,7 @@ from sqlalchemy.sql import select
 import requests
 
 
-from . import config, logger, kobo_auth, db, calibre_db, helper, shelf as shelf_lib, ub, csrf
+from . import config, logger, kobo_auth, db, calibre_db, helper, shelf as shelf_lib, ub, csrf, kobo_sync_status
 from .constants import sqlalchemy_version2
 from .helper import get_download_link
 from .services import SyncToken as SyncToken
@@ -214,7 +213,7 @@ def HandleSyncRequest():
     else:
         books = changed_entries.limit(SYNC_ITEM_LIMIT)
     for book in books:
-        add_synced_books(book.Books.id)
+        kobo_sync_status.add_synced_books(book.Books.id)
         formats = [data.format for data in book.Books.data]
         if not 'KEPUB' in formats and config.config_kepubifypath and 'EPUB' in formats:
             helper.convert_book_format(book.Books.id, config.config_calibre_dir, 'EPUB', 'KEPUB', current_user.name)
@@ -847,16 +846,6 @@ def get_ub_read_status(kobo_read_status):
     }
     return string_to_enum_map[kobo_read_status]
 
-def add_synced_books(book_id):
-    synced_book = ub.KoboSyncedBooks()
-    synced_book.user_id = current_user.id
-    synced_book.book_id = book_id
-    ub.session.add(synced_book)
-    try:
-        ub.session.commit()
-    except Exception:
-        ub.session.rollback()
-
 
 def get_or_create_reading_state(book_id):
     book_read = ub.session.query(ub.ReadBook).filter(ub.ReadBook.book_id == book_id,
diff --git a/cps/kobo_sync_status.py b/cps/kobo_sync_status.py
new file mode 100644
index 00000000..2198bc99
--- /dev/null
+++ b/cps/kobo_sync_status.py
@@ -0,0 +1,34 @@
+# -*- coding: utf-8 -*-
+
+#  This file is part of the Calibre-Web (https://github.com/janeczku/calibre-web)
+#    Copyright (C) 2021 OzzieIsaacs
+#
+#  This program is free software: you can redistribute it and/or modify
+#  it under the terms of the GNU 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 General Public License for more details.
+#
+#  You should have received a copy of the GNU General Public License
+#  along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+from flask_login import current_user
+from . import ub
+
+
+def add_synced_books(book_id):
+    synced_book = ub.KoboSyncedBooks()
+    synced_book.user_id = current_user.id
+    synced_book.book_id = book_id
+    ub.session.add(synced_book)
+    ub.session_commit()
+
+
+def remove_synced_book(book_id):
+    ub.session.query(ub.KoboSyncedBooks).filter(ub.KoboSyncedBooks.book_id == book_id).delete()
+    ub.session_commit()
diff --git a/cps/ub.py b/cps/ub.py
index fe9d476a..69ea55f6 100644
--- a/cps/ub.py
+++ b/cps/ub.py
@@ -27,7 +27,6 @@ from binascii import hexlify
 
 from flask_login import AnonymousUserMixin, current_user
 from flask_login import user_logged_in
-from contextlib import contextmanager
 
 try:
     from flask_dance.consumer.backend.sqla import OAuthConsumerMixin
-- 
2.18.1