fix unzip for packages

This commit is contained in:
admin 2024-01-13 14:39:50 +01:00
parent 7322536cf7
commit ec63a1ecb9
8 changed files with 146 additions and 45 deletions

2
.gitignore vendored
View file

@ -15,3 +15,5 @@ my_app_gitlab/
data-backup/ data-backup/
.config.json .config.json
nuitka-crash-report.xml nuitka-crash-report.xml
combined_config.txt
firefox_config.txt

View file

@ -2,6 +2,7 @@ import os
import requests import requests
from tqdm import tqdm from tqdm import tqdm
# Not used
def fetch_release_version(url): def fetch_release_version(url):
try: try:
response = requests.get(url) response = requests.get(url)
@ -43,10 +44,10 @@ def download_from_github(url, destination, progress_bar, version):
total=total_size, total=total_size,
unit="B", unit="B",
unit_scale=True, unit_scale=True,
unit_divisor=1024, unit_divisor=8192,
disable=not progress_bar, disable=not progress_bar,
) as bar: ) as bar:
for data in response.iter_content(chunk_size=1024): for data in response.iter_content(chunk_size=8192):
bar.update(len(data)) bar.update(len(data))
file.write(data) file.write(data)
@ -56,19 +57,6 @@ def download_from_github(url, destination, progress_bar, version):
print("You already have the latest version.") print("You already have the latest version.")
return version return version
def download_from_url(url, destination, progress_bar, version):
if "github.com" in url:
return download_from_github(url, destination, progress_bar, version)
elif "sourceforge.net" in url:
return download_from_sourceforge(url, destination, progress_bar)
elif "gitlab.com" in url:
return download_from_gitlab(url, destination, progress_bar)
elif "gitea.com" in url:
return download_from_gitea(url, destination, progress_bar)
else:
print("Unsupported platform")
return None
####################### #######################
# # Example usage: # # Example usage:

View file

@ -106,7 +106,9 @@ def download_and_update(api_url, project_id, private_token, destination_folder,
source_code_folder = download_source_from_gitlab(api_url, project_id, private_token, destination_folder, progress_bar) source_code_folder = download_source_from_gitlab(api_url, project_id, private_token, destination_folder, progress_bar)
print(f"Source code downloaded to: {source_code_folder}") print(f"Source code downloaded to: {source_code_folder}")
else: else:
raise # Re-raise the exception if it's not a 404 error print(f"Error during download_and_update: {e}")
# Log the error, but continue with the remaining code
pass
# ####################################### # #######################################
# # Example usage: # # Example usage:

View file

@ -1,9 +1,10 @@
import os import os
from tqdm import tqdm # You might need to install this package using pip if not already installed from tqdm import tqdm # You might need to install this package using pip if not already installed
import zipfile
import json import json
import json_main import json_main
import download_gitlab from download_gitlab import download_and_update
import download_github import download_github
import install_main import install_main
@ -34,6 +35,11 @@ def download_from_gitea(api_url, project_id, token, destination, progress_bar, v
# Placeholder function for downloading from Gitea # Placeholder function for downloading from Gitea
print("Gita not supported, yet") print("Gita not supported, yet")
def unzip_file(zip_path, extract_path):
with zipfile.ZipFile(zip_path, 'r') as zip_ref:
zip_ref.extractall(extract_path)
os.remove(zip_path)
# Function to install all packages # Function to install all packages
def download_all_packages(progress_bar, progress_label, download_location, install_location): def download_all_packages(progress_bar, progress_label, download_location, install_location):
download_folder = download_location + "/" download_folder = download_location + "/"
@ -59,15 +65,40 @@ def download_all_packages(progress_bar, progress_label, download_location, insta
progress_bar.set_fraction(progress_value) progress_bar.set_fraction(progress_value)
if source_type == "github": if source_type == "github":
download_github.download_from_github(source_info["github_url"], os.path.join(download_folder,app_name), tqdm, version) #(api_url, project_id, token, destination, progress_bar) download_github.download_from_github(
source_info["github_url"],
os.path.join(download_folder,app_name),
tqdm,
version
)
#api_url, project_id, token, destination, progress_bar
elif source_type == "gitlab": elif source_type == "gitlab":
download_gitlab.download_and_update(source_info["gitlab_api_url"], source_info["project_id"], download_and_update(
source_info["private_token"], os.path.join(download_folder,app_name), tqdm, version) source_info["gitlab_api_url"],
source_info["project_id"],
source_info["private_token"],
os.path.join(download_folder,app_name),
tqdm,
version
)
#api_url, project_id, private_token, destination_folder, progress_bar, current_version
# Add other source types as needed # Add other source types as needed
else: else:
progress_label.set_text(f"Unsupported source type for {app_name}: {source_type}") progress_label.set_text(f"Unsupported source type for {app_name}: {source_type}")
print(f"Unsupported source type for {app_name}: {source_type}") print(f"Unsupported source type for {app_name}: {source_type}")
# Check if there are any zip files inside the package folder and unzip them
for root, dirs, files in os.walk(os.path.join(download_folder,app_name)):
for file in files:
if file.endswith(".zip"):
zip_path = os.path.join(root, file)
unzip_file(zip_path, root)
break
except Exception as e: except Exception as e:
import traceback
traceback.print_exc()
progress_label.set_text(f"Error processing {app_name}: {e}") progress_label.set_text(f"Error processing {app_name}: {e}")
print(f"Error processing {app_name}: {e}") print(f"Error processing {app_name}: {e}")
install_main.install_all_packages() install_main.install_all_packages()

59
src/install_conf.py Normal file
View file

@ -0,0 +1,59 @@
import os
def create_or_update_config(file_path, conf):
if not os.path.exists(file_path):
# Create an empty config file if it doesn't exist
with open(file_path, 'w') as file:
file.write('// Empty Firefox Config File\n')
with open(file_path, 'r') as file:
lines = file.readlines()
updated = False
for i, line in enumerate(lines):
if conf.split(' ')[0] in line:
# If setting already exists, update it and print a warning
lines[i] = f'// WARNING: Updated - {conf}\n'
updated = True
print(f"Warning: Duplicate setting found. Replaced {conf}")
if not updated:
# If setting doesn't exist, add it
lines.append(f'{conf}\n')
with open(file_path, 'w') as file:
file.writelines(lines)
def combine_config_files(file1_path, file2_path, output_file_path):
if not os.path.exists(file1_path):
if not os.path.exists(file2_path):
# If both files are missing, print an error and create an empty file
print("Error: Both config files are missing. Creating an empty one.")
with open(output_file_path, 'w') as output_file:
output_file.write('// Empty Firefox Config File\n')
return
else:
# If the first file is missing, use the second file
with open(file2_path, 'r') as file2:
lines = file2.readlines()
elif not os.path.exists(file2_path):
# If the second file is missing, use the first file
with open(file1_path, 'r') as file1:
lines = file1.readlines()
else:
# Combine the content of both files while avoiding duplicates
with open(file1_path, 'r') as file1, open(file2_path, 'r') as file2:
lines1 = file1.readlines()
lines2 = file2.readlines()
lines = list(set(lines1) | set(lines2))
with open(output_file_path, 'w') as output_file:
output_file.writelines(lines)
# Example usage:
config_file_path1 = 'firefox_config1.txt'
config_file_path2 = 'firefox_config2.txt'
combined_output_path = 'combined_config.txt'
combine_config_files(config_file_path1, config_file_path2, combined_output_path)

View file

@ -5,7 +5,9 @@ def check_aara_websites():
websites = [ websites = [
"https://search.spitfirebrowser.com/", "https://search.spitfirebrowser.com/",
"https://araa.extravi.dev/", "https://araa.extravi.dev/",
"https://tailsx.com/" "https://tailsx.com/",
"https://search.ttj.dev/",
"https://search.wpme.pl"
] ]
results = [] results = []
@ -16,12 +18,15 @@ def check_aara_websites():
response = requests.get(website, timeout=1) response = requests.get(website, timeout=1)
loading_time = response.elapsed.total_seconds() loading_time = response.elapsed.total_seconds()
# This is supid but I guess its needed
loading_time = response.elapsed.total_seconds()
# Measure ping # Measure ping
ping_result = ping(website.split("//")[1].split("/")[0], timeout=1) ping_result = ping(website.split("//")[1].split("/")[0], timeout=1)
if ping_result is None: if ping_result is None:
# Set ping to 120ms if the website loads but doesn't respond to ping # Set ping to 100ms if the website loads but doesn't respond to ping
ping_result = 0.12 ping_result = 0.1
results.append({ results.append({
'website': website, 'website': website,

View file

@ -10,7 +10,6 @@ def save_first_run(var):
with open(data_location, "w") as json_file: with open(data_location, "w") as json_file:
json.dump(data, json_file, indent=4) json.dump(data, json_file, indent=4)
def get_first_run(): def get_first_run():
with open(data_location, "r") as json_file: with open(data_location, "r") as json_file:
data = json.load(json_file) data = json.load(json_file)
@ -25,18 +24,36 @@ def save_package(version, app, source_type, source_info, package_type):
# If the file doesn't exist, create an empty dictionary # If the file doesn't exist, create an empty dictionary
data = {"packages": []} data = {"packages": []}
# Create or update the category for the given app # Check if the app already exists in the packages
app_data = { for package in data["packages"]:
"version": version, if app in package:
"source": { # Package with the same name already exists, print a warning
"source_type": source_type, print(f"Warning: Package '{app}' already exists. Overriding.")
**source_info
},
"state": "not installed",
"type": package_type
}
data["packages"].append({app: app_data}) # Override the existing package
package[app] = {
"version": version,
"source": {
"source_type": source_type,
**source_info
},
"state": "not installed",
"type": package_type
}
break
else:
# Create or update the category for the given app
app_data = {
"version": version,
"source": {
"source_type": source_type,
**source_info
},
"state": "not installed",
"type": package_type
}
data["packages"].append({app: app_data})
with open(data_location, 'w') as file: with open(data_location, 'w') as file:
json.dump(data, file, indent=2) json.dump(data, file, indent=2)
@ -54,7 +71,6 @@ def get_package(app):
return {} return {}
# ###################### # ######################
# # save package test # # save package test

View file

@ -4,7 +4,7 @@ if sys.platform == 'win32':
import os import os
import tkinter as tk import tkinter as tk
from tkinter import ttk from tkinter import ttk
from urllib.request import urlopen import requests
import zipfile import zipfile
import certifi import certifi
import ssl import ssl
@ -26,14 +26,12 @@ def get_temp_folder():
def download_file(url, destination, progress_callback=None, label_callback=None): def download_file(url, destination, progress_callback=None, label_callback=None):
context = ssl.create_default_context(cafile=certifi.where()) response = requests.get(url, stream=True)
total_size = int(response.headers.get('content-length', 0))
with urlopen(url, context=context) as response, open(destination, 'wb') as out_file: block_size = 8192
total_size = int(response.headers.get('content-length', 0)) current_size = 0
block_size = 1024 with open(destination, 'wb') as out_file:
current_size = 0 for buffer in response.iter_content(block_size):
while True:
buffer = response.read(block_size)
if not buffer: if not buffer:
break break
out_file.write(buffer) out_file.write(buffer)