This commit is contained in:
Rebecca Breu 2024-06-02 18:40:09 +02:00
parent d5cdf19b73
commit 5e6168efb9
4 changed files with 41 additions and 26 deletions

View file

@ -21,6 +21,9 @@ COPYRIGHT = 'Copyright © 2021-2024 Rebecca Breu'
CHANGED_SYMBOL = ''
# Backup filename for unsaved scenes:
BACKUP_FILENAME = 'BeeRef-d9257003-0191-4bc7-9c9c-3383eeddd739.bee~'
COLORS = {
# Qt:
'Active:Base': (60, 60, 60),

View file

@ -22,7 +22,12 @@ from PyQt6 import QtCore
from beeref import commands
from beeref.fileio.errors import BeeFileIOError
from beeref.fileio.image import load_image
from beeref.fileio.sql import SQLiteIO, is_bee_file, read_uppdate_from_file
from beeref.fileio.sql import (
SQLiteIO,
copy_bee_file,
is_bee_file,
read_uppdate_from_file,
)
from beeref.items import BeePixmapItem
@ -57,28 +62,32 @@ def save_bee(filename, scene, create_new=False, worker=None):
def save_backup(filename, backup_filename, scene, worker=None):
"""Save backup bee file."""
logger.info(f'Saving backup to file {filename}...')
logger.info(f'Saving backup to file {backup_filename}...')
copy_to_backup = False
past = datetime(2000, 1, 1, tzinfo=datetime.timezone.utc)
past = datetime.datetime(2000, 1, 1, tzinfo=datetime.timezone.utc)
if os.path.exists(filename):
if filename and os.path.exists(filename):
upddate_original = read_uppdate_from_file(filename) or past
if os.path.exists(backup_filename):
upddate_backup = read_uppdate_from_file(backup_filename) or past
if upddate_original > upddate_backup:
copy_to_backup = True
logger.debug('Original file newer than backup')
else:#tbd
else:
copy_to_backup = True
logger.debug('Backup file does\'t exist yet')
if copy_to_backup:
logger.debug('Copying original file to backup file...')
#tbd
copy_bee_file(filename, backup_filename)
#tbd backup
io = SQLiteIO(backup_filename,
scene,
create_new=not os.path.exists(backup_filename),
update_save_ids=False,
worker=worker)
io.write()
worker.finished.emit(filename, [])
def load_images(filenames, pos, scene, worker):
"""Add images to existing scene."""

View file

@ -49,6 +49,16 @@ def is_bee_file(path):
return os.path.splitext(path)[1] == '.bee'
def copy_bee_file(src_filename, dst_filename):
"""Copy a bee file to a new file."""
src = sqlite3.connect(src_filename)
dst = sqlite3.connect(dst_filename)
src.backup(dst)
src.close()
dst.close()
def read_uppdate_from_file(filename):
io = SQLiteIO(filename, None, create_new=False, readonly=True)
datestring = io.read_info_value('upddate')
@ -82,11 +92,12 @@ def handle_sqlite_errors(func):
class SQLiteIO:
def __init__(self, filename, scene, create_new=False, readonly=False,
worker=None):
update_save_ids=True, worker=None):
self.scene = scene
self.create_new = create_new
self.filename = filename
self.readonly = readonly
self.update_save_ids = update_save_ids
self.worker = worker
self.retry = False
@ -109,7 +120,7 @@ class SQLiteIO:
and os.path.exists(self.filename)):
os.remove(self.filename)
if self.create_new:
if self.create_new and self.update_save_ids:
self.scene.clear_save_ids()
uri = pathlib.Path(self.filename).resolve().as_uri()
@ -330,7 +341,9 @@ class SQLiteIO:
(item.TYPE, item.pos().x(), item.pos().y(), item.zValue(),
item.scale(), item.rotation(), item.flip(),
json.dumps(item.get_extra_save_data())))
item.save_id = self.cursor.lastrowid
if self.update_save_ids:
item.save_id = self.cursor.lastrowid
if hasattr(item, 'pixmap_to_bytes'):
pixmap, imgformat = item.pixmap_to_bytes()

View file

@ -68,7 +68,6 @@ class BeeGraphicsView(MainControlsMixin,
self.undo_stack.cleanChanged.connect(self.on_undo_clean_changed)
self.filename = None
self.backup_filename = None
self.previous_transform = None
self.active_mode = None
@ -115,19 +114,7 @@ class BeeGraphicsView(MainControlsMixin,
def backup_filename(self):
if self.filename:
return f'{self.filename}~'
if not self._backup_filename:
self._backup_filename = tempfile.NamedTemporaryFile(
prefix=constants.APPNAME,
suffix='.bee~',
delete=False,
delete_on_close=False
).name
return self._backup_filename
@backup_filename.setter
def backup_filename(self, value):
self._backup_filename = value
return os.path.join(tempfile.gettempdir(), constants.BACKUP_FILENAME)
def save_backup(self):
if self.undo_stack.isClean():
@ -217,7 +204,10 @@ class BeeGraphicsView(MainControlsMixin,
self.scene.clear()
self.undo_stack.clear()
self.filename = None
self.backup_filename = None
try:
os.remove(self.backup_filename)
except FileNotFoundError:
pass
self.setTransform(QtGui.QTransform())
def reset_previous_transform(self, toggle_item=None):