@@ -117,6 +117,13 @@ def login(self) -> bool:
117
117
return False
118
118
return True
119
119
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
+
120
127
class options_dialog (QW .QDialog ):
121
128
config_reloaded_signal = QtCore .Signal ()
122
129
def __init__ (self ):
@@ -130,6 +137,7 @@ def __init__(self):
130
137
131
138
def load_from_config_file (self ):
132
139
self .config = data_provider .get_config_copy ()
140
+ self .previous_save_directory = self .config ['General' ]['save_dir' ]
133
141
134
142
def create_widgets (self ):
135
143
self .save_directory_label = QW .QLabel ("Save directory:" )
@@ -231,11 +239,39 @@ def layout_widgets(self):
231
239
232
240
@QtCore .Slot ()
233
241
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' ])
235
245
core .set_start_on_startup (self .config ['GUI' ]['auto_start' ])
246
+ data_provider .commit (self .config )
236
247
self .accept ()
237
248
self .config_reloaded_signal .emit ()
238
249
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
+
239
275
@QtCore .Slot ()
240
276
def browse (self ):
241
277
self .file_dialog = QW .QFileDialog ()
@@ -277,6 +313,18 @@ def on_minimize_to_tray_change(self, p_value: bool):
277
313
def on_download_interval_change (self , p_value : int ):
278
314
self .config ['GUI' ]['download_interval' ] = p_value
279
315
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
+
280
328
def connect_signals (self ):
281
329
self .button_box .save_button .clicked .connect (self .save )
282
330
self .button_box .cancel_button .clicked .connect (self .reject )
@@ -286,6 +334,7 @@ def connect_signals(self):
286
334
self .auto_start .toggled .connect (self .on_auto_start_change )
287
335
self .minimize_to_tray .toggled .connect (self .on_minimize_to_tray_change )
288
336
self .download_interval_spinbox .valueChanged .connect (self .on_download_interval_change )
337
+ self .save_directory_input .textChanged .connect (self .on_save_directory_input_change )
289
338
290
339
class about_dialog (QW .QDialog ):
291
340
def __init__ (self ):
0 commit comments