diff --git a/steampozor/steampozor b/steampozor/steampozor new file mode 100755 index 0000000..ad1ab9e --- /dev/null +++ b/steampozor/steampozor @@ -0,0 +1,156 @@ +#!/usr/bin/python + +from stat import S_ISDIR +import paramiko +import os +from tqdm import tqdm + + +HOST = '192.168.89.4' +PORT = 22 + +VERSION = '0.1.0' +AUTHORS = 'SaddyDEAD' + +PATH_ON_SERVER='/games/SteamLibrary/steamapps/common' +PATH_ON_PC='/home/saddydead/.local/share/Steam/steamapps/common' +LIST_STEAM_FILES=[ + 'SteamLinuxRuntime', + 'SteamLinuxRuntime_soldier', + 'SteamLinuxRuntime_sniper', + 'Proton - Experimental', + 'Steam.dll' +] + +ART = ''' +███████╗████████╗███████╗ █████╗ ███╗ ███╗██████╗ ██████╗ ███████╗ ██████╗ ██████╗ +██╔════╝╚══██╔══╝██╔════╝██╔══██╗████╗ ████║██╔══██╗██╔═══██╗╚══███╔╝██╔═══██╗██╔══██╗ +███████╗ ██║ █████╗ ███████║██╔████╔██║██████╔╝██║ ██║ ███╔╝ ██║ ██║██████╔╝ +╚════██║ ██║ ██╔══╝ ██╔══██║██║╚██╔╝██║██╔═══╝ ██║ ██║ ███╔╝ ██║ ██║██╔══██╗ +███████║ ██║ ███████╗██║ ██║██║ ╚═╝ ██║██║ ╚██████╔╝███████╗╚██████╔╝██║ ██║ +╚══════╝ ╚═╝ ╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═════╝ ╚══════╝ ╚═════╝ ╚═╝ ╚═╝ +''' + +clear = lambda: os.system('clear') +ssh = paramiko.SSHClient() +ssh.load_system_host_keys() +ssh.connect(HOST) +client = ssh.open_sftp() + +def print_hat(): + clear() + print(ART) + print('______________________________________________________________________________________') + print(f''' + created by {AUTHORS} + version - {VERSION} + ''') + print('______________________________________________________________________________________') + +def print_action(): + print('Choose action:') + print(''' +1) Download game +2) Exit +''') + print('______________________________________________________________________________________') + +def list_games(): + return delete_not_games(client.listdir(path=PATH_ON_SERVER)) + +def delete_not_games(inplist: list): + result = inplist.copy() + for i in inplist: + for j in LIST_STEAM_FILES: + if i == j: + result.remove(i) + return list(result) + +def get_recursive(path, dest, pbar): + item_list = client.listdir_attr(path) + dest = str(dest) + if not os.path.isdir(dest): + os.makedirs(dest, exist_ok=True) + for item in item_list: + mode = item.st_mode + if S_ISDIR(mode): + get_recursive(path + "/" + item.filename, dest + "/" + item.filename, pbar) + else: + client.get(path + "/" + item.filename, dest + "/" + item.filename, callback=pbar) + +def choose_game(): + while True: + clear() + print_hat() + + print('Choose game:') + + index = 0 + games = list_games() + for j in games: + print(f'{index}) {j}') + index+=1 + + print('C to cancel') + + inp = input('-> ') + + if inp == 'c' or inp == 'C': + return + else: + try: + if int(inp) not in range(index): + continue + except: + continue + + if os.path.exists(f'{PATH_ON_PC}/{games[int(inp)]}'): + clear() + print_hat() + + print() + print('GAME ALREADY EXISTS') + print() + input('Press any key to exit') + return + + download_game(games[int(inp)]) + + return + +def download_game(game): + clear() + print_hat() + + print(f'Downloading {game}...') + + with tqdm(unit='iB', unit_scale=True, unit_divisor=1024) as pbar: + def progress(amt, tot): + pbar.total = tot + pbar.update(amt - pbar.n) + get_recursive(f'{PATH_ON_SERVER}/{game}', f'{PATH_ON_PC}/{game}', progress) + + print() + input('Press any key to exit') + +def main(): + print_hat() + + print_action() + + inp = input('-> ') + + if inp == '1': + choose_game() + elif inp == '2': + clear() + client.close() + exit() + else: + return + + + +if __name__ == '__main__': + while True: + main()