Skip to content

Commit 96ebddc

Browse files
committed
Move Files Along with Save Dir Change
1 parent 7c37ed3 commit 96ebddc

File tree

2 files changed

+51
-2
lines changed

2 files changed

+51
-2
lines changed

steamCloudSaveDownloaderGUI/dialogs.py

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,13 @@ def login(self) -> bool:
117117
return False
118118
return True
119119

120+
class move_files_messagebox(QW.QMessageBox):
121+
def __init__(self):
122+
super().__init__(
123+
QW.QMessageBox.Icon.NoIcon,
124+
"Save directory change in progress",
125+
"Please wait for the program to move the save directory.")
126+
120127
class options_dialog(QW.QDialog):
121128
config_reloaded_signal = QtCore.Signal()
122129
def __init__(self):
@@ -130,6 +137,7 @@ def __init__(self):
130137

131138
def load_from_config_file(self):
132139
self.config = data_provider.get_config_copy()
140+
self.previous_save_directory = self.config['General']['save_dir']
133141

134142
def create_widgets(self):
135143
self.save_directory_label = QW.QLabel("Save directory:")
@@ -231,11 +239,39 @@ def layout_widgets(self):
231239

232240
@QtCore.Slot()
233241
def save(self):
234-
data_provider.commit(self.config)
242+
if not self.check_input_validity():
243+
return
244+
self.move_files(self.previous_save_directory, self.config['General']['save_dir'])
235245
core.set_start_on_startup(self.config['GUI']['auto_start'])
246+
data_provider.commit(self.config)
236247
self.accept()
237248
self.config_reloaded_signal.emit()
238249

250+
def move_files(self, p_previous, p_new):
251+
if p_previous == p_new:
252+
return
253+
254+
logger.debug("Save directory changed. Moving files.")
255+
self.message_box = move_files_messagebox()
256+
self.message_box.show()
257+
258+
data = data_provider.load_existing_from_db()
259+
260+
for game in data:
261+
app_id = game['app_id']
262+
263+
# Do not use data_provider.get_save_dir here
264+
265+
old_path = os.path.join(p_previous, str(app_id))
266+
new_path = os.path.join(p_new, str(app_id))
267+
268+
pathlib.Path(old_path).rename(new_path)
269+
270+
self.message_box.close()
271+
272+
def check_input_validity(self) -> bool:
273+
return self.is_save_dir_valid(self.save_directory_input.text())
274+
239275
@QtCore.Slot()
240276
def browse(self):
241277
self.file_dialog = QW.QFileDialog()
@@ -277,6 +313,18 @@ def on_minimize_to_tray_change(self, p_value: bool):
277313
def on_download_interval_change(self, p_value: int):
278314
self.config['GUI']['download_interval'] = p_value
279315

316+
@QtCore.Slot(int)
317+
def on_save_directory_input_change(self, p_value: str):
318+
self.config['General']['save_dir'] = p_value
319+
320+
if (self.is_save_dir_valid(p_value)):
321+
self.save_directory_input.setStyleSheet("")
322+
else:
323+
self.save_directory_input.setStyleSheet("border: 1px solid red")
324+
325+
def is_save_dir_valid(self, p_value: str) -> bool:
326+
return os.path.isdir(p_value)
327+
280328
def connect_signals(self):
281329
self.button_box.save_button.clicked.connect(self.save)
282330
self.button_box.cancel_button.clicked.connect(self.reject)
@@ -286,6 +334,7 @@ def connect_signals(self):
286334
self.auto_start.toggled.connect(self.on_auto_start_change)
287335
self.minimize_to_tray.toggled.connect(self.on_minimize_to_tray_change)
288336
self.download_interval_spinbox.valueChanged.connect(self.on_download_interval_change)
337+
self.save_directory_input.textChanged.connect(self.on_save_directory_input_change)
289338

290339
class about_dialog(QW.QDialog):
291340
def __init__(self):

0 commit comments

Comments
 (0)