Skip to content

Commit b6082f2

Browse files
Merge pull request #34 from bozzelliandrea/installer
[Installer]
2 parents f4cef70 + f4da921 commit b6082f2

File tree

1 file changed

+67
-35
lines changed

1 file changed

+67
-35
lines changed

.installer/main.py

Lines changed: 67 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,57 +1,89 @@
11
import PySimpleGUI as sg
22
import requests
3+
import tarfile
34

45
sg.theme("Reddit")
56
layout = [
67
[sg.Text("Seleziona la versione da installare", justification='center')],
78
[[sg.Radio('Windows', "VERSION", default=True)],
89
[sg.Radio('Linux', "VERSION", default=False)]],
910
[sg.Text("Seleziona la cartella di installazione: ")],
10-
[sg.In(size=(25, 1), enable_events=True, key='FOLDER'), sg.FolderBrowse()],
11+
[sg.In(size=(70, 1), enable_events=True, key='FOLDER'), sg.FolderBrowse()],
1112
[sg.Button("Installa", key="OK", size=100, disabled=True)],
12-
[sg.Multiline(size=(100, 10), key='OUT_LOG')]
13+
[sg.ProgressBar(max_value=10, orientation='h', size=(100, 20), key='PROGRESS')],
14+
[sg.Multiline(size=(100, 30), key='OUT_LOG', disabled=True, autoscroll=True)]
1315
]
14-
window = sg.Window('Gestione Piastre Installer', layout, size=(300, 300))
16+
window = sg.Window('Gestione Piastre Installer', layout, size=(600, 600))
1517
folder = ""
1618
log = ""
17-
release = "https://github.com/bozzelliandrea/kitchen-management/releases/download/v0.0.1-RC1/release.tgz"
19+
release_detail = "https://api.github.com/repos/bozzelliandrea/kitchen-management/releases/tags/v0.0.1-RC1"
20+
current_size = 0
21+
file_total_size = 0
22+
file_chunk_size = 500000
1823

1924

20-
def download_file(url, fil_path):
21-
local_filename = fil_path + '/' + url.split('/')[-1]
25+
def logger(message):
26+
global log
27+
if log == "":
28+
log = message
29+
else:
30+
log = log + '\n' + message
31+
window['OUT_LOG'].update(value=log)
32+
33+
34+
def download_file(url, file_path):
35+
logger('Starting download file....')
36+
local_filename = file_path + '/' + url.split('/')[-1]
2237
with requests.get(url, stream=True) as r:
2338
r.raise_for_status()
2439
with open(local_filename, 'wb') as f:
25-
for chunk in r.iter_content(chunk_size=8192):
40+
for chunk in r.iter_content(chunk_size=file_chunk_size):
41+
update_progress_bar(file_chunk_size)
2642
f.write(chunk)
43+
logger('Download Complete')
2744
return local_filename
2845

2946

30-
def get_remote_size(url):
31-
response = requests.head(url)
32-
print('\r\n'.join('{}: {}'.format(k, v) for k, v in response.headers.items()))
33-
return response.headers['content-length']
34-
35-
36-
while True:
37-
event, values = window.read()
38-
if event == sg.WIN_CLOSED:
39-
break
40-
elif event == "FOLDER":
41-
folder = values['FOLDER']
42-
if folder is not None:
43-
window['OK'].update(disabled=False)
44-
elif event == "OK":
45-
log = folder
46-
window['OUT_LOG'].update(value=log)
47-
size = get_remote_size(release)
48-
log = log + '\n' + 'File Size: ' + size
49-
window['OUT_LOG'].update(value=log)
50-
log = log + '\n' + 'Starting download file....'
51-
window['OUT_LOG'].update(value=log)
52-
local_file = download_file(release)
53-
local_file = "bla bla"
54-
log = log + '\n' + 'Download Complete' + '\n' + local_file
55-
window['OUT_LOG'].update(value=log)
56-
57-
window.close()
47+
def get_remote_size_and_url(url):
48+
response = requests.get(url)
49+
json_object = response.json()
50+
return [json_object['assets'][0]['size'], json_object['assets'][0]['browser_download_url']]
51+
52+
53+
def update_progress_bar(chunk):
54+
global current_size
55+
current_size += chunk
56+
logger(f'current: {current_size}, total: {file_total_size}')
57+
window['PROGRESS'].UpdateBar(current_size, file_total_size)
58+
59+
60+
def extract_tar(file_path):
61+
logger('Starting file installation')
62+
release_tar = tarfile.open(file_path)
63+
release_tar.extractall('./gestione_piastre')
64+
release_tar.close()
65+
logger('Installation Completed!')
66+
67+
68+
if __name__ == "__main__":
69+
while True:
70+
event, values = window.read()
71+
if event == sg.WIN_CLOSED:
72+
break
73+
elif event == 'FOLDER':
74+
folder = values['FOLDER']
75+
if folder is not None:
76+
window['OK'].update(disabled=False)
77+
elif event.startswith('UPDATE_'):
78+
logger(f'event: {event}, value: {values[event]}')
79+
key_to_update = event[len('UPDATE_'):]
80+
window[key_to_update].update(values[event])
81+
window.refresh()
82+
continue
83+
elif event == 'OK':
84+
logger(f'Selected folder: {folder}')
85+
download_info = get_remote_size_and_url(release_detail)
86+
file_total_size = download_info[0]
87+
logger(f'File Size: {download_info[0]}' + '\n' + f'Download remote from: {download_info[1]}')
88+
local_file = download_file(download_info[1], folder)
89+
extract_tar(local_file)

0 commit comments

Comments
 (0)