mirror of
https://github.com/Neocky/pluGET.git
synced 2024-04-29 16:12:30 +00:00
Added egg cracking jar support
This commit is contained in:
parent
e17be2c500
commit
9b2ff6e208
@ -116,7 +116,7 @@ def ftp_list_all(ftp):
|
|||||||
rich_print_error("Error: [FTP]: No plugins were found.")
|
rich_print_error("Error: [FTP]: No plugins were found.")
|
||||||
|
|
||||||
|
|
||||||
def ftp_listFilesInServerRoot(ftp):
|
def ftp_list_files_in_server_root(ftp):
|
||||||
"""
|
"""
|
||||||
Returns a list with all files in the root folder of the ftp host
|
Returns a list with all files in the root folder of the ftp host
|
||||||
|
|
||||||
@ -136,7 +136,7 @@ def ftp_listFilesInServerRoot(ftp):
|
|||||||
rich_print_error("Error: [FTP]: No Serverjar was found.")
|
rich_print_error("Error: [FTP]: No Serverjar was found.")
|
||||||
|
|
||||||
|
|
||||||
def ftp_downloadFile(ftp, path_download, file) -> None:
|
def ftp_download_file(ftp, path_download, file) -> None:
|
||||||
"""
|
"""
|
||||||
Download a file of the ftp server
|
Download a file of the ftp server
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@ Handles the input through the pluGET command line
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
from src.utils.console_output import rich_print_error
|
from src.utils.console_output import rich_print_error
|
||||||
from src.plugin.plugin_downloader import get_specific_plugin, search_specific_plugin
|
from src.plugin.plugin_downloader import get_specific_plugin_spiget, search_specific_plugin_spiget
|
||||||
from src.plugin.plugin_updatechecker import check_installed_plugins, update_installed_plugins
|
from src.plugin.plugin_updatechecker import check_installed_plugins, update_installed_plugins
|
||||||
|
|
||||||
|
|
||||||
@ -41,9 +41,9 @@ def handle_input(
|
|||||||
case "get":
|
case "get":
|
||||||
match input_selected_object.isdigit():
|
match input_selected_object.isdigit():
|
||||||
case True:
|
case True:
|
||||||
get_specific_plugin(input_selected_object, input_parameter)
|
get_specific_plugin_spiget(input_selected_object, input_parameter)
|
||||||
case _:
|
case _:
|
||||||
search_specific_plugin(input_selected_object)
|
search_specific_plugin_spiget(input_selected_object)
|
||||||
|
|
||||||
case "update":
|
case "update":
|
||||||
match input_selected_object:
|
match input_selected_object:
|
||||||
@ -62,7 +62,7 @@ def handle_input(
|
|||||||
check_installed_plugins(input_selected_object, input_parameter)
|
check_installed_plugins(input_selected_object, input_parameter)
|
||||||
|
|
||||||
case "search":
|
case "search":
|
||||||
search_specific_plugin(input_selected_object)
|
search_specific_plugin_spiget(input_selected_object)
|
||||||
case "remove":
|
case "remove":
|
||||||
print("remove package")
|
print("remove package")
|
||||||
#removePlugin(inputSelectedObject)
|
#removePlugin(inputSelectedObject)
|
||||||
|
@ -38,7 +38,7 @@ def handle_regex_plugin_name(full_plugin_name) -> str:
|
|||||||
return found_plugin_name
|
return found_plugin_name
|
||||||
|
|
||||||
|
|
||||||
def get_version_id(plugin_id, plugin_version) -> str:
|
def get_version_id_spiget(plugin_id, plugin_version) -> str:
|
||||||
"""
|
"""
|
||||||
Returns the version id of the plugin
|
Returns the version id of the plugin
|
||||||
"""
|
"""
|
||||||
@ -62,7 +62,7 @@ def get_version_id(plugin_id, plugin_version) -> str:
|
|||||||
return version_list[0]["id"]
|
return version_list[0]["id"]
|
||||||
|
|
||||||
|
|
||||||
def get_version_name(plugin_id, plugin_version_id) -> str:
|
def get_version_name_spiget(plugin_id, plugin_version_id) -> str:
|
||||||
"""
|
"""
|
||||||
Returns the name of a specific version
|
Returns the name of a specific version
|
||||||
"""
|
"""
|
||||||
@ -153,7 +153,7 @@ def download_specific_plugin_version_spiget(plugin_id, download_path, version_id
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
def get_specific_plugin(plugin_id, plugin_version="latest") -> None:
|
def get_specific_plugin_spiget(plugin_id, plugin_version="latest") -> None:
|
||||||
"""
|
"""
|
||||||
Gets the specific plugin and calls the download function
|
Gets the specific plugin and calls the download function
|
||||||
"""
|
"""
|
||||||
@ -175,8 +175,8 @@ def get_specific_plugin(plugin_id, plugin_version="latest") -> None:
|
|||||||
rich_print_error("Error: Plugin ID couldn't be found")
|
rich_print_error("Error: Plugin ID couldn't be found")
|
||||||
return None
|
return None
|
||||||
plugin_name = handle_regex_plugin_name(plugin_name)
|
plugin_name = handle_regex_plugin_name(plugin_name)
|
||||||
plugin_version_id = get_version_id(plugin_id, plugin_version)
|
plugin_version_id = get_version_id_spiget(plugin_id, plugin_version)
|
||||||
plugin_version_name = get_version_name(plugin_id, plugin_version_id)
|
plugin_version_name = get_version_name_spiget(plugin_id, plugin_version_id)
|
||||||
plugin_download_name = f"{plugin_name}-{plugin_version_name}.jar"
|
plugin_download_name = f"{plugin_name}-{plugin_version_name}.jar"
|
||||||
download_plugin_path = Path(f"{download_path}/{plugin_download_name}")
|
download_plugin_path = Path(f"{download_path}/{plugin_download_name}")
|
||||||
# if api requests weren't successfull stop function
|
# if api requests weren't successfull stop function
|
||||||
@ -193,7 +193,7 @@ def get_specific_plugin(plugin_id, plugin_version="latest") -> None:
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
def search_specific_plugin(plugin_name) -> None:
|
def search_specific_plugin_spiget(plugin_name) -> None:
|
||||||
"""
|
"""
|
||||||
Search for a name and return the top 10 results sorted for their download count
|
Search for a name and return the top 10 results sorted for their download count
|
||||||
Then ask for input and download that plugin
|
Then ask for input and download that plugin
|
||||||
@ -242,4 +242,4 @@ def search_specific_plugin(plugin_name) -> None:
|
|||||||
return None
|
return None
|
||||||
selected_plugin_name = handle_regex_plugin_name(plugin_search_results[plugin_selected]["name"])
|
selected_plugin_name = handle_regex_plugin_name(plugin_search_results[plugin_selected]["name"])
|
||||||
rich_console.print(f"\n [not bold][bright_white]● [bright_magenta]{selected_plugin_name} [bright_green]latest")
|
rich_console.print(f"\n [not bold][bright_white]● [bright_magenta]{selected_plugin_name} [bright_green]latest")
|
||||||
get_specific_plugin(plugin_selected_id)
|
get_specific_plugin_spiget(plugin_selected_id)
|
||||||
|
@ -4,19 +4,21 @@ Handles the plugin checking and updating
|
|||||||
|
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
|
import io
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
import zipfile
|
||||||
from rich.progress import track
|
from rich.progress import track
|
||||||
from rich.table import Table
|
from rich.table import Table
|
||||||
from rich.console import Console
|
from rich.console import Console
|
||||||
from urllib.error import HTTPError
|
from urllib.error import HTTPError
|
||||||
|
from zipfile import ZipFile
|
||||||
|
|
||||||
from src.handlers.handle_config import config_value
|
from src.handlers.handle_config import config_value
|
||||||
from src.handlers.handle_sftp import sftp_create_connection, sftp_validate_file_attributes, sftp_list_all
|
from src.handlers.handle_sftp import sftp_create_connection, sftp_download_file, sftp_validate_file_attributes, sftp_list_all
|
||||||
from src.handlers.handle_ftp import ftp_create_connection, ftp_validate_file_attributes, ftp_list_all
|
from src.handlers.handle_ftp import ftp_create_connection, ftp_download_file, ftp_validate_file_attributes, ftp_list_all
|
||||||
from src.plugin.plugin_downloader import get_specific_plugin, get_download_path
|
from src.plugin.plugin_downloader import get_specific_plugin_spiget, get_download_path
|
||||||
from src.utils.console_output import rich_print_error
|
from src.utils.console_output import rich_print_error
|
||||||
from src.utils.utilities import api_do_request
|
from src.utils.utilities import api_do_request, create_temp_plugin_folder, remove_temp_plugin_folder
|
||||||
|
|
||||||
|
|
||||||
class Plugin():
|
class Plugin():
|
||||||
@ -116,11 +118,11 @@ def get_plugin_file_version(plugin_full_name : str) -> str:
|
|||||||
plugin_file_version = plugin_file_version.replace('.jar', '')
|
plugin_file_version = plugin_file_version.replace('.jar', '')
|
||||||
if plugin_file_version.endswith('.'):
|
if plugin_file_version.endswith('.'):
|
||||||
print("get_plugin_file_version endswith .")
|
print("get_plugin_file_version endswith .")
|
||||||
#plugin_file_version = eggCrackingJar(plugin_full_name, 'version')
|
plugin_file_name, plugin_file_version = egg_cracking_jar(plugin_full_name)
|
||||||
return plugin_file_version
|
return plugin_file_version
|
||||||
|
|
||||||
|
|
||||||
def get_latest_spigot_plugin_version(plugin_id : str) -> str:
|
def get_latest_plugin_version_spiget(plugin_id : str) -> str:
|
||||||
"""
|
"""
|
||||||
Gets the latest spigot plugin version
|
Gets the latest spigot plugin version
|
||||||
|
|
||||||
@ -204,6 +206,65 @@ def ask_update_confirmation(input_selected_object : str) -> bool:
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
def egg_cracking_jar(plugin_file_name: str) -> str:
|
||||||
|
"""
|
||||||
|
Opens the plugin file as an archive and searches the plugin.yml file for the name and version entry
|
||||||
|
|
||||||
|
:param plugin_file_name: Filename of the plugin which should be openend
|
||||||
|
|
||||||
|
:returns: Plugin name in plugin.yml file
|
||||||
|
:returns: Plugin version in plugin.yml file
|
||||||
|
"""
|
||||||
|
config_values = config_value()
|
||||||
|
match config_values.connection:
|
||||||
|
case "sftp":
|
||||||
|
path_temp_plugin_folder = create_temp_plugin_folder()
|
||||||
|
connection = sftp_create_connection()
|
||||||
|
sftp_download_file(connection, plugin_file_name)
|
||||||
|
path_plugin_jar = Path(f"{path_temp_plugin_folder}/{plugin_file_name}")
|
||||||
|
case "ftp":
|
||||||
|
path_temp_plugin_folder = create_temp_plugin_folder()
|
||||||
|
connection = ftp_create_connection()
|
||||||
|
ftp_download_file(connection, plugin_file_name)
|
||||||
|
path_plugin_jar = Path(f"{path_temp_plugin_folder}/{plugin_file_name}")
|
||||||
|
case _:
|
||||||
|
path_plugin_folder = config_values.path_to_plugin_folder
|
||||||
|
path_plugin_jar = Path(f"{path_plugin_folder}/{plugin_file_name}")
|
||||||
|
|
||||||
|
# later used to escape for-loop
|
||||||
|
plugin_name = plugin_version = ""
|
||||||
|
# open plugin if it is an archive and read plugin.yml line for line to find name & version
|
||||||
|
try:
|
||||||
|
with ZipFile(path_plugin_jar, "r") as plugin_jar:
|
||||||
|
with io.TextIOWrapper(plugin_jar.open("plugin.yml", "r"), encoding="utf-8") as plugin_yml:
|
||||||
|
for line in plugin_yml:
|
||||||
|
if plugin_name != "" and plugin_version != "":
|
||||||
|
break
|
||||||
|
if re.match(r"^\s*?name: ", line):
|
||||||
|
plugin_name = re.sub(r'^\s*?name: ', '', line)
|
||||||
|
plugin_name = plugin_name.replace("\n", "").replace("'", "").replace('"', "")
|
||||||
|
#plugin_name = plugin_name.replace("'", '')
|
||||||
|
#plugin_name = plugin_name.replace('"', '')
|
||||||
|
|
||||||
|
if re.match(r"^\s*?version: ", line):
|
||||||
|
plugin_verson = re.sub(r'^\s*?version: ', '', line)
|
||||||
|
plugin_verson = plugin_verson.replace('\n', '').replace("'", "").replace('"', "")
|
||||||
|
#pluginVersion = pluginVersion.replace("'", '')
|
||||||
|
#pluginVersion = pluginVersion.replace('"', '')
|
||||||
|
except FileNotFoundError:
|
||||||
|
plugin_name = plugin_version = ""
|
||||||
|
except KeyError:
|
||||||
|
plugin_name = plugin_version = ""
|
||||||
|
except zipfile.BadZipFile:
|
||||||
|
plugin_name = plugin_version = ""
|
||||||
|
|
||||||
|
# remove temp plugin folder if plugin was downloaded from sftp/ftp server
|
||||||
|
if config_values.connection != "local":
|
||||||
|
remove_temp_plugin_folder()
|
||||||
|
|
||||||
|
return plugin_name, plugin_version
|
||||||
|
|
||||||
|
|
||||||
def check_update_available_installed_plugins(input_selected_object: str, config_values: config_value) -> str:
|
def check_update_available_installed_plugins(input_selected_object: str, config_values: config_value) -> str:
|
||||||
"""
|
"""
|
||||||
Gets installed plugins and checks it against the apis if there are updates for the plugins available
|
Gets installed plugins and checks it against the apis if there are updates for the plugins available
|
||||||
@ -255,7 +316,7 @@ def check_update_available_installed_plugins(input_selected_object : str, config
|
|||||||
|
|
||||||
plugin_file_version = get_plugin_file_version(plugin_file)
|
plugin_file_version = get_plugin_file_version(plugin_file)
|
||||||
# check repository of plugin
|
# check repository of plugin
|
||||||
plugin_spigot_id = search_plugin_spigot(plugin_file, plugin_file_name, plugin_file_version) # plugin_spigot_id isn't needed
|
plugin_spigot_id = search_plugin_spiget(plugin_file, plugin_file_name, plugin_file_version) # plugin_spigot_id isn't needed
|
||||||
# TODO add more plugin repositories here
|
# TODO add more plugin repositories here
|
||||||
|
|
||||||
# plugin wasn't found and not added to global plugin list so add
|
# plugin wasn't found and not added to global plugin list so add
|
||||||
@ -376,7 +437,7 @@ def update_installed_plugins(input_selected_object : str="all", no_confirmation
|
|||||||
match (plugin.plugin_repository):
|
match (plugin.plugin_repository):
|
||||||
case "spigot":
|
case "spigot":
|
||||||
try:
|
try:
|
||||||
get_specific_plugin(plugin.plugin_repository_data[0])
|
get_specific_plugin_spiget(plugin.plugin_repository_data[0])
|
||||||
except HTTPError as err:
|
except HTTPError as err:
|
||||||
rich_print_error(f"HTTPError: {err.code} - {err.reason}")
|
rich_print_error(f"HTTPError: {err.code} - {err.reason}")
|
||||||
plugins_updated -= 1
|
plugins_updated -= 1
|
||||||
@ -408,7 +469,7 @@ def update_installed_plugins(input_selected_object : str="all", no_confirmation
|
|||||||
match (plugin.plugin_repository):
|
match (plugin.plugin_repository):
|
||||||
case "spigot":
|
case "spigot":
|
||||||
try:
|
try:
|
||||||
get_specific_plugin(plugin.plugin_repository_data[0])
|
get_specific_plugin_spiget(plugin.plugin_repository_data[0])
|
||||||
except HTTPError as err:
|
except HTTPError as err:
|
||||||
rich_print_error(f"HTTPError: {err.code} - {err.reason}")
|
rich_print_error(f"HTTPError: {err.code} - {err.reason}")
|
||||||
plugins_updated -= 1
|
plugins_updated -= 1
|
||||||
@ -449,9 +510,9 @@ def update_installed_plugins(input_selected_object : str="all", no_confirmation
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
def search_plugin_spigot(plugin_file : str, plugin_file_name : str, plugin_file_version : str) -> int:
|
def search_plugin_spiget(plugin_file: str, plugin_file_name: str, plugin_file_version: str) -> int:
|
||||||
"""
|
"""
|
||||||
Search the spigot api for the installed plugin and add it to the installed plugin list
|
Search the spiget api for the installed plugin and add it to the installed plugin list
|
||||||
|
|
||||||
:param plugin_file: Full file name of plugin
|
:param plugin_file: Full file name of plugin
|
||||||
:param plugin_file_name: Name of plugin file
|
:param plugin_file_name: Name of plugin file
|
||||||
@ -466,16 +527,15 @@ def search_plugin_spigot(plugin_file : str, plugin_file_name : str, plugin_file_
|
|||||||
if i == 1:
|
if i == 1:
|
||||||
plugin_file_version2 = re.sub(r'(\-\w*)', '', plugin_file_version)
|
plugin_file_version2 = re.sub(r'(\-\w*)', '', plugin_file_version)
|
||||||
if i == 2:
|
if i == 2:
|
||||||
"""
|
plugin_name_in_yml, plugin_version_in_yml = egg_cracking_jar(plugin_file)
|
||||||
plugin_name_in_yml = eggCrackingJar(plugin_file, 'name')
|
|
||||||
url = f"https://api.spiget.org/v2/search/resources/{plugin_name_in_yml}?field=name&sort=-downloads"
|
url = f"https://api.spiget.org/v2/search/resources/{plugin_name_in_yml}?field=name&sort=-downloads"
|
||||||
try:
|
try:
|
||||||
plugin_list = api_do_request(url)
|
plugin_list = api_do_request(url)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
continue
|
continue
|
||||||
"""
|
# if no plugin name was found with egg_cracking_jar() skip this round
|
||||||
|
if plugin_list is None:
|
||||||
#plugin_file_version = plugin_file_version2 # ?
|
continue
|
||||||
|
|
||||||
for plugin in plugin_list:
|
for plugin in plugin_list:
|
||||||
plugin_id = plugin["id"]
|
plugin_id = plugin["id"]
|
||||||
@ -488,7 +548,7 @@ def search_plugin_spigot(plugin_file : str, plugin_file_name : str, plugin_file_
|
|||||||
update_version_name = updates["name"]
|
update_version_name = updates["name"]
|
||||||
if plugin_file_version2 in update_version_name:
|
if plugin_file_version2 in update_version_name:
|
||||||
#spigot_update_id = updates["id"]
|
#spigot_update_id = updates["id"]
|
||||||
plugin_latest_version = get_latest_spigot_plugin_version(plugin_id)
|
plugin_latest_version = get_latest_plugin_version_spiget(plugin_id)
|
||||||
plugin_is_outdated = compare_plugin_version(plugin_latest_version, update_version_name)
|
plugin_is_outdated = compare_plugin_version(plugin_latest_version, update_version_name)
|
||||||
Plugin.add_to_plugin_list(
|
Plugin.add_to_plugin_list(
|
||||||
plugin_file,
|
plugin_file,
|
||||||
|
Loading…
Reference in New Issue
Block a user