add basic support for leveldb

This commit is contained in:
2021-09-06 08:16:20 +08:00
parent 4ff3f7e1a3
commit 3c6dbfdd9d
7 changed files with 112 additions and 25 deletions

View File

@@ -1,10 +1,18 @@
from game_backuper.db import Db
from game_backuper.config import Config, Program
from game_backuper.config import (
Config,
Program,
ConfigNormalFile,
ConfigLeveldb,
)
from game_backuper.cml import Opts
from threading import Thread
from os.path import exists, join
from os import mkdir
from game_backuper.file import new_file, copy_file
from game_backuper.leveldb import have_leveldb
if have_leveldb:
from game_backuper.leveldb import list_leveldb_entries
class BackupTask(Thread):
@@ -21,21 +29,26 @@ class BackupTask(Thread):
if not exists(bp):
mkdir(bp)
for f in self.prog.files:
if exists(f[1]):
ori = self.db.get_file(prog, f[0])
nf = new_file(f[1], f[0], prog)
if nf is None:
continue
de = join(bp, f[0])
if ori is not None:
if ori.size == nf.size and ori.hash == nf.hash:
print(f'{prog}: Skip {f[0]}({f[1]}).')
if isinstance(f, ConfigNormalFile):
if exists(f[1]):
ori = self.db.get_file(prog, f[0])
nf = new_file(f[1], f[0], prog)
if nf is None:
continue
copy_file(f[1], de, f[0], prog)
self.db.set_file(ori.id, nf.size, nf.hash)
else:
copy_file(f[1], de, f[0], prog)
self.db.add_file(nf)
de = join(bp, f[0])
if ori is not None:
if ori.size == nf.size and ori.hash == nf.hash:
print(f'{prog}: Skip {f[0]}({f[1]}).')
continue
copy_file(f[1], de, f[0], prog)
self.db.set_file(ori.id, nf.size, nf.hash)
else:
copy_file(f[1], de, f[0], prog)
self.db.add_file(nf)
elif isinstance(f, ConfigLeveldb):
if not have_leveldb:
raise ValueError('Leveldb is not supported.')
print(list_leveldb_entries(f.full_path, f.domains))
class Backuper: