mirror of
https://github.com/c9moser/sgbackup.git
synced 2026-01-19 11:30:13 +00:00
2025.04.17 01:55:37 (desktop)
This commit is contained in:
parent
b0fe0909ef
commit
eb198d7ce7
@ -32,6 +32,7 @@ import time
|
||||
from ..game import Game,SavegameType,VALID_SAVEGAME_TYPES,SAVEGAME_TYPE_ICONS
|
||||
from ..settings import settings
|
||||
from ..utility import sanitize_path,sanitize_windows_path
|
||||
from ..error import NotAnArchiveError
|
||||
|
||||
import logging
|
||||
logger = logging.getLogger(__name__)
|
||||
@ -85,6 +86,9 @@ class Archiver(GObject):
|
||||
game=game.key,filename=filename))
|
||||
return self.emit('backup',game,filename)
|
||||
|
||||
def restore(self,filename:str):
|
||||
self.emit('restore',filename)
|
||||
|
||||
def generate_new_backup_filename(self,game:Game)->str:
|
||||
dt = datetime.datetime.now()
|
||||
|
||||
@ -138,7 +142,7 @@ class ArchiverManager(GObject):
|
||||
|
||||
|
||||
@staticmethod
|
||||
def get_global():
|
||||
def get_global()->"ArchiverManager":
|
||||
if ArchiverManager.__global_archiver_manager is None:
|
||||
ArchiverManager.__global_archiver_manager = ArchiverManager()
|
||||
|
||||
@ -307,14 +311,35 @@ class ArchiverManager(GObject):
|
||||
flags=SignalFlags.RUN_FIRST)
|
||||
def do_backup(self,archiver,game,filename):
|
||||
return True
|
||||
|
||||
def restore(self,filename:str):
|
||||
archiver = self.get_archiver_for_file(filename)
|
||||
return self.emit('restore',archiver,filename)
|
||||
|
||||
@Signal(name="restore",return_type=bool,arg_types=(Archiver,str),
|
||||
flags=SignalFlags.RUN_LAST)
|
||||
def do_restore(self,archiver:Archiver,filename:str):
|
||||
archiver.restore(filename)
|
||||
return True
|
||||
|
||||
def is_archive(self,filename)->bool:
|
||||
def is_archive(self,filename:str)->bool:
|
||||
if self.standard_archiver.is_archive(filename):
|
||||
return True
|
||||
for i in self.archivers.values():
|
||||
if i.is_archive(filename):
|
||||
return True
|
||||
return False
|
||||
|
||||
def get_archiver_for_file(self,filename:str)->Archiver:
|
||||
if self.standard_archiver.is_archive(filename):
|
||||
return self.standard_archiver
|
||||
|
||||
for archiver in self.archivers.values():
|
||||
if archiver.is_archive(filename):
|
||||
return archiver
|
||||
|
||||
raise NotAnArchiveError(f"\"{filename}\" seems not to be a valid archive!")
|
||||
|
||||
|
||||
def get_live_backups(self,game:Game):
|
||||
ret = []
|
||||
|
||||
@ -63,7 +63,7 @@ class ZipfileArchiver(Archiver):
|
||||
raise RuntimeError("\"{filename}\" is not a valid sgbackup zipfile archive!")
|
||||
|
||||
with zipfile.ZipFile(filename,"r") as zf:
|
||||
zip_game = Game.new_from_dict(json.loads(zf.read('game.conf').decode("utf-8")))
|
||||
zip_game = Game.new_from_dict(json.loads(zf.read('gameconf.json').decode("utf-8")))
|
||||
try:
|
||||
game = GameManager.get_global().games[zip_game.key]
|
||||
except:
|
||||
@ -71,8 +71,9 @@ class ZipfileArchiver(Archiver):
|
||||
|
||||
if not os.path.isdir(game.savegame_root):
|
||||
os.makedirs(game.savegame_root)
|
||||
|
||||
extract_files = [i for i in zf.filelist if i.startswith(zip_game.savegame_dir + "/")]
|
||||
|
||||
print("\n".join([i.filename for i in zf.filelist]))
|
||||
extract_files = [i for i in zf.filelist if i.filename.startswith(zip_game.savegame_dir + "/")]
|
||||
for file in extract_files:
|
||||
zf.extract(file,game.savegame_root)
|
||||
|
||||
|
||||
3
sgbackup/error.py
Normal file
3
sgbackup/error.py
Normal file
@ -0,0 +1,3 @@
|
||||
|
||||
class NotAnArchiveError(LookupError):
|
||||
pass
|
||||
@ -1196,7 +1196,8 @@ class BackupView(Gtk.Box):
|
||||
|
||||
|
||||
def _on_restore_button_clicked(self,button,data:BackupViewData):
|
||||
pass
|
||||
am = ArchiverManager.get_global()
|
||||
am.restore(data.filename)
|
||||
|
||||
def _on_delete_button_clicked(self,button,data:BackupViewData):
|
||||
am = ArchiverManager.get_global()
|
||||
|
||||
Loading…
Reference in New Issue
Block a user