| |
|
| | import os |
| | import shutil |
| | import hashlib |
| | import time |
| |
|
| | LOGS_FOLDER = '/content/Applio-RVC-Fork/logs' |
| | WEIGHTS_FOLDER = '/content/Applio-RVC-Fork/weights' |
| | GOOGLE_DRIVE_PATH = '/content/drive/MyDrive/RVC_Backup' |
| |
|
| | def import_google_drive_backup(): |
| | print("Importing Google Drive backup...") |
| | GOOGLE_DRIVE_PATH = '/content/drive/MyDrive/RVC_Backup' |
| | LOGS_FOLDER = '/content/Applio-RVC-Fork/logs' |
| | WEIGHTS_FOLDER = '/content/Applio-RVC-Fork/weights' |
| | weights_exist = False |
| | files_to_copy = [] |
| | weights_to_copy = [] |
| | |
| | def handle_files(root, files, is_weight_files=False): |
| | for filename in files: |
| | filepath = os.path.join(root, filename) |
| | if filename.endswith('.pth') and is_weight_files: |
| | weights_exist = True |
| | backup_filepath = os.path.join(WEIGHTS_FOLDER, os.path.relpath(filepath, GOOGLE_DRIVE_PATH)) |
| | else: |
| | backup_filepath = os.path.join(LOGS_FOLDER, os.path.relpath(filepath, GOOGLE_DRIVE_PATH)) |
| | backup_folderpath = os.path.dirname(backup_filepath) |
| | if not os.path.exists(backup_folderpath): |
| | os.makedirs(backup_folderpath) |
| | print(f'Created folder: {backup_folderpath}', flush=True) |
| | if is_weight_files: |
| | weights_to_copy.append((filepath, backup_filepath)) |
| | else: |
| | files_to_copy.append((filepath, backup_filepath)) |
| |
|
| | for root, dirs, files in os.walk(os.path.join(GOOGLE_DRIVE_PATH, 'logs')): |
| | handle_files(root, files) |
| | |
| | for root, dirs, files in os.walk(os.path.join(GOOGLE_DRIVE_PATH, 'weights')): |
| | handle_files(root, files, True) |
| |
|
| | |
| | total_files = len(files_to_copy) |
| | start_time = time.time() |
| | for i, (source, dest) in enumerate(files_to_copy, start=1): |
| | with open(source, 'rb') as src, open(dest, 'wb') as dst: |
| | shutil.copyfileobj(src, dst, 1024*1024) |
| | |
| | if time.time() - start_time > 5 or i % 100 == 0: |
| | print(f'\rCopying file {i} of {total_files} ({i * 100 / total_files:.2f}%)', end="") |
| | start_time = time.time() |
| | print(f'\nImported {len(files_to_copy)} files from Google Drive backup') |
| |
|
| | |
| | total_weights = len(weights_to_copy) |
| | start_time = time.time() |
| | for i, (source, dest) in enumerate(weights_to_copy, start=1): |
| | with open(source, 'rb') as src, open(dest, 'wb') as dst: |
| | shutil.copyfileobj(src, dst, 1024*1024) |
| | |
| | if time.time() - start_time > 5 or i % 100 == 0: |
| | print(f'\rCopying weight file {i} of {total_weights} ({i * 100 / total_weights:.2f}%)', end="") |
| | start_time = time.time() |
| | if weights_exist: |
| | print(f'\nImported {len(weights_to_copy)} weight files') |
| | print("Copied weights from Google Drive backup to local weights folder.") |
| | else: |
| | print("\nNo weights found in Google Drive backup.") |
| | print("Google Drive backup import completed.") |
| |
|
| | def backup_files(): |
| | print("\n Starting backup loop...") |
| | last_backup_timestamps_path = os.path.join(LOGS_FOLDER, 'last_backup_timestamps.txt') |
| | fully_updated = False |
| | try: |
| | with open(last_backup_timestamps_path, 'r') as f: |
| | last_backup_timestamps = dict(line.strip().split(':') for line in f) |
| | except: |
| | last_backup_timestamps = {} |
| |
|
| | while True: |
| | updated = False |
| | files_to_copy = [] |
| | files_to_delete = [] |
| |
|
| | for root, dirs, files in os.walk(LOGS_FOLDER): |
| | for filename in files: |
| | if filename != 'last_backup_timestamps.txt': |
| | filepath = os.path.join(root, filename) |
| | if os.path.isfile(filepath): |
| | backup_filepath = os.path.join(GOOGLE_DRIVE_PATH, os.path.relpath(filepath, LOGS_FOLDER)) |
| | backup_folderpath = os.path.dirname(backup_filepath) |
| |
|
| | if not os.path.exists(backup_folderpath): |
| | os.makedirs(backup_folderpath) |
| | print(f'Created backup folder: {backup_folderpath}', flush=True) |
| |
|
| | |
| | last_backup_timestamp = last_backup_timestamps.get(filepath) |
| | current_timestamp = os.path.getmtime(filepath) |
| | if last_backup_timestamp is None or float(last_backup_timestamp) < current_timestamp: |
| | files_to_copy.append((filepath, backup_filepath)) |
| | last_backup_timestamps[filepath] = str(current_timestamp) |
| | updated = True |
| | fully_updated = False |
| |
|
| | |
| | for filepath in list(last_backup_timestamps.keys()): |
| | if not os.path.exists(filepath): |
| | backup_filepath = os.path.join(GOOGLE_DRIVE_PATH, os.path.relpath(filepath, LOGS_FOLDER)) |
| | if os.path.exists(backup_filepath): |
| | files_to_delete.append(backup_filepath) |
| | del last_backup_timestamps[filepath] |
| | updated = True |
| | fully_updated = False |
| |
|
| | |
| | if files_to_copy: |
| | for source, dest in files_to_copy: |
| | shutil.copy2(source, dest) |
| | print(f'Copied or updated {len(files_to_copy)} files') |
| |
|
| | |
| | if files_to_delete: |
| | for file in files_to_delete: |
| | os.remove(file) |
| | print(f'Deleted {len(files_to_delete)} files') |
| |
|
| | if not updated and not fully_updated: |
| | print("Files are up to date.") |
| | fully_updated = True |
| | copy_weights_folder_to_drive() |
| |
|
| | with open(last_backup_timestamps_path, 'w') as f: |
| | for filepath, timestamp in last_backup_timestamps.items(): |
| | f.write(f'{filepath}:{timestamp}\n') |
| | time.sleep(15) |
| |
|