mirror of
https://github.com/Neocky/pluGET.git
synced 2024-04-29 16:12:30 +00:00
Renamed main file and removed old src
This commit is contained in:
parent
2ba9e6ddb7
commit
0bac45d478
@ -1,16 +0,0 @@
|
|||||||
from utils.consoleoutput import consoleTitle, clearConsole, printMainMenu
|
|
||||||
from utils.utilities import check_requirements
|
|
||||||
from handlers.handle_input import createInputLists, getInput
|
|
||||||
from handlers.handle_config import checkConfig
|
|
||||||
|
|
||||||
|
|
||||||
def mainFunction():
|
|
||||||
consoleTitle()
|
|
||||||
clearConsole()
|
|
||||||
checkConfig()
|
|
||||||
check_requirements()
|
|
||||||
createInputLists()
|
|
||||||
printMainMenu()
|
|
||||||
getInput()
|
|
||||||
|
|
||||||
mainFunction()
|
|
@ -1,26 +0,0 @@
|
|||||||
[General]
|
|
||||||
; = If a local plugin folder exists (True/False) (If False SFTP/FTP will be used):
|
|
||||||
uselocalpluginfolder = True
|
|
||||||
|
|
||||||
[Local - This Machine]
|
|
||||||
pathtopluginfolder = C:/Users/USER/Desktop/plugins
|
|
||||||
; = For a different folder to store the updated plugins change to (True/False) and the path below
|
|
||||||
seperatedownloadpath = False
|
|
||||||
pathtoseperatedownloadpath = C:/Users/USER/Desktop/plugins
|
|
||||||
|
|
||||||
[SFTP - Remote Server]
|
|
||||||
server = 0.0.0.0
|
|
||||||
username = user
|
|
||||||
password = password
|
|
||||||
; = If a different Port for SFTP needs to be used (Default: 22)
|
|
||||||
sftpport = 22
|
|
||||||
;_ = If a different Port for FTP needs to be used (Default: 21)
|
|
||||||
ftpport = 21
|
|
||||||
;__ = Change the path below if the plugin folder path is different on the SFTP/FTP server (Change only if you know what you are doing)
|
|
||||||
pluginfolderonserver = /plugins
|
|
||||||
;___ = If you want to use FTP instead of SFTP change to (False) else use (True)
|
|
||||||
use_sftp = True
|
|
||||||
;____ = For a different folder to store the updated plugins (Only with the update command!) change to (True/False) and the path below
|
|
||||||
seperatedownloadpath = False
|
|
||||||
pathtoseperatedownloadpath = /plugins
|
|
||||||
|
|
@ -1,91 +0,0 @@
|
|||||||
import os
|
|
||||||
import sys
|
|
||||||
import configparser
|
|
||||||
from pathlib import Path
|
|
||||||
|
|
||||||
from utils.consoleoutput import oColors
|
|
||||||
|
|
||||||
|
|
||||||
class configurationValues:
|
|
||||||
def __init__(self):
|
|
||||||
config = configparser.ConfigParser()
|
|
||||||
config.sections()
|
|
||||||
config.read("config.ini")
|
|
||||||
localPluginFolder = config['General']['UseLocalPluginFolder']
|
|
||||||
self.pathToPluginFolder = Path(config['Local - This Machine']['PathToPluginFolder'])
|
|
||||||
seperateDownloadPath = config['Local - This Machine']['SeperateDownloadPath']
|
|
||||||
self.pathToSeperateDownloadPath = Path(config['Local - This Machine']['PathToSeperateDownloadPath'])
|
|
||||||
|
|
||||||
self.sftp_server = config['SFTP - Remote Server']['Server']
|
|
||||||
self.sftp_user = config['SFTP - Remote Server']['Username']
|
|
||||||
self.sftp_password = config['SFTP - Remote Server']['Password']
|
|
||||||
sftp_port = config['SFTP - Remote Server']['SFTPPort']
|
|
||||||
ftp_port = config['SFTP - Remote Server']['FTPPort']
|
|
||||||
self.sftp_folderPath = config['SFTP - Remote Server']['PluginFolderOnServer']
|
|
||||||
sftp_useSftp = config['SFTP - Remote Server']['USE_SFTP']
|
|
||||||
sftp_seperateDownloadPath = config['SFTP - Remote Server']['SeperateDownloadPath']
|
|
||||||
self.sftp_pathToSeperateDownloadPath = config['SFTP - Remote Server']['PathToSeperateDownloadPath']
|
|
||||||
|
|
||||||
self.sftp_port = int(sftp_port)
|
|
||||||
self.ftp_port = int(ftp_port)
|
|
||||||
if localPluginFolder == 'True':
|
|
||||||
self.localPluginFolder = True
|
|
||||||
else:
|
|
||||||
self.localPluginFolder = False
|
|
||||||
|
|
||||||
if seperateDownloadPath == 'True':
|
|
||||||
self.seperateDownloadPath = True
|
|
||||||
else:
|
|
||||||
self.seperateDownloadPath = False
|
|
||||||
|
|
||||||
if sftp_seperateDownloadPath == 'True':
|
|
||||||
self.sftp_seperateDownloadPath = True
|
|
||||||
else:
|
|
||||||
self.sftp_seperateDownloadPath = False
|
|
||||||
|
|
||||||
if sftp_useSftp == 'True':
|
|
||||||
self.sftp_useSftp = True
|
|
||||||
else:
|
|
||||||
self.sftp_useSftp = False
|
|
||||||
|
|
||||||
|
|
||||||
def checkConfig():
|
|
||||||
configAvailable = os.path.isfile("config.ini")
|
|
||||||
if not configAvailable:
|
|
||||||
createConfig()
|
|
||||||
print(oColors.brightRed + "Config created. Edit config before executing again!" + oColors.standardWhite)
|
|
||||||
input("Press any key + enter to exit...")
|
|
||||||
sys.exit()
|
|
||||||
|
|
||||||
|
|
||||||
def createConfig():
|
|
||||||
config = configparser.ConfigParser(allow_no_value=True)
|
|
||||||
config['General'] = {}
|
|
||||||
config['General'][';'] = 'If a local plugin folder exists (True/False) (If False SFTP/FTP will be used):'
|
|
||||||
config['General']['UseLocalPluginFolder'] = 'True'
|
|
||||||
|
|
||||||
config['Local - This Machine'] = {}
|
|
||||||
config['Local - This Machine']['PathToPluginFolder'] = 'C:/Users/USER/Desktop/plugins'
|
|
||||||
config['Local - This Machine'][';'] = 'For a different folder to store the updated plugins change to (True/False) and the path below'
|
|
||||||
config['Local - This Machine']['SeperateDownloadPath'] = 'False'
|
|
||||||
config['Local - This Machine']['PathToSeperateDownloadPath'] = 'C:/Users/USER/Desktop/plugins'
|
|
||||||
|
|
||||||
config['SFTP - Remote Server'] = {}
|
|
||||||
config['SFTP - Remote Server']['Server'] = '0.0.0.0'
|
|
||||||
config['SFTP - Remote Server']['Username'] = 'user'
|
|
||||||
config['SFTP - Remote Server']['Password'] = 'password'
|
|
||||||
config['SFTP - Remote Server'][';'] = 'If a different Port for SFTP needs to be used (Default: 22)'
|
|
||||||
config['SFTP - Remote Server']['SFTPPort'] = '22'
|
|
||||||
config['SFTP - Remote Server'][';_'] = 'If a different Port for FTP needs to be used (Default: 21)'
|
|
||||||
config['SFTP - Remote Server']['FTPPort'] = '21'
|
|
||||||
config['SFTP - Remote Server'][';__'] = 'Change the path below if the plugin folder path is different on the SFTP/FTP server (Change only if you know what you are doing)'
|
|
||||||
config['SFTP - Remote Server']['PluginFolderOnServer'] = '/plugins'
|
|
||||||
config['SFTP - Remote Server'][';___'] = 'If you want to use FTP instead of SFTP change to (False) else use (True)'
|
|
||||||
config['SFTP - Remote Server']['USE_SFTP'] = 'True'
|
|
||||||
config['SFTP - Remote Server'][';____'] = 'For a different folder to store the updated plugins (Only with the update command!) change to (True/False) and the path below'
|
|
||||||
config['SFTP - Remote Server']['SeperateDownloadPath'] = 'False'
|
|
||||||
config['SFTP - Remote Server']['PathToSeperateDownloadPath'] = '/plugins'
|
|
||||||
|
|
||||||
|
|
||||||
with open('config.ini', 'w') as configfile:
|
|
||||||
config.write(configfile)
|
|
@ -1,117 +0,0 @@
|
|||||||
import os
|
|
||||||
import sys
|
|
||||||
import ftplib
|
|
||||||
import stat
|
|
||||||
import re
|
|
||||||
|
|
||||||
from utils.consoleoutput import oColors
|
|
||||||
from handlers.handle_config import configurationValues
|
|
||||||
|
|
||||||
|
|
||||||
def createFTPConnection():
|
|
||||||
configValues = configurationValues()
|
|
||||||
try:
|
|
||||||
ftp = ftplib.FTP()
|
|
||||||
ftp.connect(configValues.sftp_server, configValues.ftp_port)
|
|
||||||
ftp.login(configValues.sftp_user, configValues.sftp_password)
|
|
||||||
return ftp
|
|
||||||
except UnboundLocalError:
|
|
||||||
print(oColors.brightRed + "[FTP]: Check your config.ini!" + oColors.standardWhite)
|
|
||||||
print(oColors.brightRed + "Exiting program..." + oColors.standardWhite)
|
|
||||||
sys.exit()
|
|
||||||
|
|
||||||
|
|
||||||
def ftp_showPlugins(ftp):
|
|
||||||
configValues = configurationValues()
|
|
||||||
ftp.cwd(configValues.sftp_folderPath)
|
|
||||||
for attr in ftp.dir():
|
|
||||||
print(attr.filename, attr)
|
|
||||||
|
|
||||||
|
|
||||||
def ftp_upload_file(ftp, itemPath):
|
|
||||||
configValues = configurationValues()
|
|
||||||
if configValues.sftp_seperateDownloadPath is True:
|
|
||||||
uploadFolderPath = configValues.sftp_pathToSeperateDownloadPath
|
|
||||||
else:
|
|
||||||
uploadFolderPath = configValues.sftp_folderPath
|
|
||||||
try:
|
|
||||||
ftp.cwd(uploadFolderPath)
|
|
||||||
itemPath = os.path.relpath(itemPath, 'TempSFTPFolder/')
|
|
||||||
itemPath = str(itemPath)
|
|
||||||
currentDirectory = os.getcwd()
|
|
||||||
os.chdir('TempSFTPFolder')
|
|
||||||
with open (itemPath, 'rb') as plugin_file:
|
|
||||||
ftp.storbinary('STOR '+ str(itemPath), plugin_file)
|
|
||||||
except FileNotFoundError:
|
|
||||||
print(oColors.brightRed + "[FTP]: The 'plugins' folder couldn*t be found on the remote host!" + oColors.standardWhite)
|
|
||||||
print(oColors.brightRed + "[FTP]: Aborting uploading." + oColors.standardWhite)
|
|
||||||
os.chdir(currentDirectory)
|
|
||||||
ftp.close()
|
|
||||||
|
|
||||||
|
|
||||||
def ftp_upload_server_jar(ftp, itemPath):
|
|
||||||
try:
|
|
||||||
ftp.cwd('.')
|
|
||||||
itemPath = os.path.relpath(itemPath, 'TempSFTPFolder/')
|
|
||||||
itemPath = str(itemPath)
|
|
||||||
currentDirectory = os.getcwd()
|
|
||||||
os.chdir('TempSFTPFolder')
|
|
||||||
with open (itemPath, 'rb') as server_jar:
|
|
||||||
ftp.storbinary('STOR '+ str(itemPath), server_jar)
|
|
||||||
except FileNotFoundError:
|
|
||||||
print(oColors.brightRed + "[FTP]: The 'root' folder couldn*t be found on the remote host!" + oColors.standardWhite)
|
|
||||||
print(oColors.brightRed + "[FTP]: Aborting uploading." + oColors.standardWhite)
|
|
||||||
os.chdir(currentDirectory)
|
|
||||||
ftp.close()
|
|
||||||
|
|
||||||
|
|
||||||
def ftp_listAll(ftp):
|
|
||||||
configValues = configurationValues()
|
|
||||||
try:
|
|
||||||
ftp.cwd(configValues.sftp_folderPath)
|
|
||||||
installedPlugins = ftp.nlst()
|
|
||||||
except FileNotFoundError:
|
|
||||||
print(oColors.brightRed + "[FTP]: The 'plugins' folder couldn*t be found on the remote host!" + oColors.standardWhite)
|
|
||||||
|
|
||||||
try:
|
|
||||||
return installedPlugins
|
|
||||||
except UnboundLocalError:
|
|
||||||
print(oColors.brightRed + "[FTP]: No plugins were found." + oColors.standardWhite)
|
|
||||||
|
|
||||||
|
|
||||||
def ftp_listFilesInServerRoot(ftp):
|
|
||||||
try:
|
|
||||||
ftp.cwd('.')
|
|
||||||
filesInServerRoot = ftp.nlst()
|
|
||||||
except FileNotFoundError:
|
|
||||||
print(oColors.brightRed + "[FTP]: The 'root' folder couldn*t be found on the remote host!" + oColors.standardWhite)
|
|
||||||
|
|
||||||
try:
|
|
||||||
return filesInServerRoot
|
|
||||||
except UnboundLocalError:
|
|
||||||
print(oColors.brightRed + "[FTP]: No Serverjar was found." + oColors.standardWhite)
|
|
||||||
|
|
||||||
|
|
||||||
def ftp_downloadFile(ftp, downloadPath, fileToDownload):
|
|
||||||
configValues = configurationValues()
|
|
||||||
ftp.cwd(configValues.sftp_folderPath)
|
|
||||||
filedata = open(downloadPath,'wb')
|
|
||||||
ftp.retrbinary('RETR '+fileToDownload, filedata.write)
|
|
||||||
filedata.close()
|
|
||||||
ftp.quit()
|
|
||||||
|
|
||||||
|
|
||||||
def ftp_is_file(ftp, pluginPath):
|
|
||||||
if ftp.nlst(pluginPath) == [pluginPath]:
|
|
||||||
return True
|
|
||||||
else:
|
|
||||||
return False
|
|
||||||
|
|
||||||
|
|
||||||
def ftp_validateFileAttributes(ftp, pluginPath):
|
|
||||||
if ftp_is_file(ftp, pluginPath) is False:
|
|
||||||
return False
|
|
||||||
if re.search(r'.jar$', pluginPath):
|
|
||||||
return True
|
|
||||||
else:
|
|
||||||
return False
|
|
@ -1,105 +0,0 @@
|
|||||||
import sys
|
|
||||||
|
|
||||||
from utils.consoleoutput import oColors
|
|
||||||
from utils.utilities import getHelp, getCommandHelp
|
|
||||||
from handlers.handle_config import configurationValues
|
|
||||||
from plugin.plugin_downloader import searchPackage, getSpecificPackage
|
|
||||||
from plugin.plugin_updatechecker import updateInstalledPackage, checkInstalledPackage
|
|
||||||
from plugin.plugin_remover import removePlugin
|
|
||||||
from serverjar.serverjar_checker import checkInstalledServerjar, updateServerjar
|
|
||||||
from serverjar.serverjar_paper import papermc_downloader
|
|
||||||
|
|
||||||
|
|
||||||
def createInputLists():
|
|
||||||
global COMMANDLIST
|
|
||||||
COMMANDLIST = [
|
|
||||||
'get',
|
|
||||||
'update',
|
|
||||||
'check',
|
|
||||||
'search',
|
|
||||||
'exit',
|
|
||||||
'help',
|
|
||||||
'remove',
|
|
||||||
'get-paper'
|
|
||||||
]
|
|
||||||
global INPUTSELECTEDOBJECT
|
|
||||||
INPUTSELECTEDOBJECT = [
|
|
||||||
'all',
|
|
||||||
'*'
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
def handleInput(inputCommand, inputSelectedObject, inputParams):
|
|
||||||
configValues = configurationValues()
|
|
||||||
while True:
|
|
||||||
if inputCommand == 'get':
|
|
||||||
if inputSelectedObject.isdigit():
|
|
||||||
if not configValues.localPluginFolder:
|
|
||||||
if configValues.sftp_seperateDownloadPath is True:
|
|
||||||
pluginPath = configValues.sftp_pathToSeperateDownloadPath
|
|
||||||
else:
|
|
||||||
pluginPath = configValues.sftp_folderPath
|
|
||||||
getSpecificPackage(inputSelectedObject, pluginPath, inputParams)
|
|
||||||
break
|
|
||||||
else:
|
|
||||||
if configValues.seperateDownloadPath is True:
|
|
||||||
pluginPath = configValues.pathToSeperateDownloadPath
|
|
||||||
else:
|
|
||||||
pluginPath = configValues.pathToPluginFolder
|
|
||||||
getSpecificPackage(inputSelectedObject, pluginPath, inputParams)
|
|
||||||
break
|
|
||||||
else:
|
|
||||||
searchPackage(inputSelectedObject)
|
|
||||||
break
|
|
||||||
if inputCommand == 'update':
|
|
||||||
if inputSelectedObject == 'serverjar':
|
|
||||||
updateServerjar(inputParams)
|
|
||||||
else:
|
|
||||||
updateInstalledPackage(inputSelectedObject)
|
|
||||||
break
|
|
||||||
if inputCommand == 'check':
|
|
||||||
if inputSelectedObject == 'serverjar':
|
|
||||||
checkInstalledServerjar()
|
|
||||||
else:
|
|
||||||
checkInstalledPackage(inputSelectedObject, inputParams)
|
|
||||||
break
|
|
||||||
if inputCommand == 'search':
|
|
||||||
searchPackage(inputSelectedObject)
|
|
||||||
break
|
|
||||||
if inputCommand == 'exit':
|
|
||||||
sys.exit()
|
|
||||||
if inputCommand == 'help':
|
|
||||||
if inputSelectedObject == 'command' or inputSelectedObject == 'commands':
|
|
||||||
getCommandHelp(inputParams)
|
|
||||||
else:
|
|
||||||
getHelp()
|
|
||||||
break
|
|
||||||
if inputCommand == 'remove':
|
|
||||||
removePlugin(inputSelectedObject)
|
|
||||||
break
|
|
||||||
if inputCommand == 'get-paper':
|
|
||||||
papermc_downloader(inputSelectedObject, inputParams)
|
|
||||||
break
|
|
||||||
else:
|
|
||||||
print(oColors.brightRed + "Error: Command not found. Please try again. :(" + oColors.standardWhite)
|
|
||||||
print(oColors.brightRed + "Use: '" + oColors.standardWhite +"help command" + oColors.brightRed +"' to get all available commands" + oColors.standardWhite)
|
|
||||||
getInput()
|
|
||||||
getInput()
|
|
||||||
|
|
||||||
|
|
||||||
def getInput():
|
|
||||||
inputCommand = None
|
|
||||||
while True:
|
|
||||||
try:
|
|
||||||
inputCommand, inputSelectedObject, *inputParams = input("pluGET >> ").split()
|
|
||||||
break
|
|
||||||
except ValueError:
|
|
||||||
if inputCommand == None:
|
|
||||||
continue
|
|
||||||
else:
|
|
||||||
print(oColors.brightRed + "Wrong input! Use: > 'command' 'selectedObject' [optionalParams]" + oColors.standardWhite)
|
|
||||||
print(oColors.brightRed + "Use: '" + oColors.standardWhite +"help command" + oColors.brightRed +"' to get all available commands" + oColors.standardWhite)
|
|
||||||
except KeyboardInterrupt:
|
|
||||||
sys.exit()
|
|
||||||
inputParams = inputParams[0] if inputParams else None
|
|
||||||
handleInput(inputCommand, inputSelectedObject, inputParams)
|
|
@ -1,107 +0,0 @@
|
|||||||
import sys
|
|
||||||
import os
|
|
||||||
import pysftp
|
|
||||||
import paramiko
|
|
||||||
import stat
|
|
||||||
import re
|
|
||||||
|
|
||||||
from utils.consoleoutput import oColors
|
|
||||||
from handlers.handle_config import configurationValues
|
|
||||||
|
|
||||||
|
|
||||||
def createSFTPConnection():
|
|
||||||
configValues = configurationValues()
|
|
||||||
cnopts = pysftp.CnOpts()
|
|
||||||
cnopts.hostkeys = None # TODO fix this
|
|
||||||
try:
|
|
||||||
sftp = pysftp.Connection(configValues.sftp_server, username=configValues.sftp_user, \
|
|
||||||
password=configValues.sftp_password, port=configValues.sftp_port, cnopts=cnopts)
|
|
||||||
except paramiko.ssh_exception.AuthenticationException:
|
|
||||||
print(oColors.brightRed + "[SFTP]: Wrong Username/Password" + oColors.standardWhite)
|
|
||||||
except paramiko.ssh_exception.SSHException:
|
|
||||||
print(oColors.brightRed + "[SFTP]: The SFTP server isn't available." + oColors.standardWhite)
|
|
||||||
try:
|
|
||||||
return sftp
|
|
||||||
except UnboundLocalError:
|
|
||||||
print(oColors.brightRed + "[SFTP]: Check your config.ini!" + oColors.standardWhite)
|
|
||||||
print(oColors.brightRed + "Exiting program..." + oColors.standardWhite)
|
|
||||||
sys.exit()
|
|
||||||
|
|
||||||
|
|
||||||
def sftp_showPlugins(sftp):
|
|
||||||
configValues = configurationValues()
|
|
||||||
sftp.cd(configValues.sftp_folderPath)
|
|
||||||
for attr in sftp.listdir_attr():
|
|
||||||
print(attr.filename, attr)
|
|
||||||
|
|
||||||
|
|
||||||
def sftp_upload_file(sftp, itemPath):
|
|
||||||
configValues = configurationValues()
|
|
||||||
if configValues.sftp_seperateDownloadPath is True:
|
|
||||||
uploadFolderPath = configValues.sftp_pathToSeperateDownloadPath
|
|
||||||
else:
|
|
||||||
uploadFolderPath = configValues.sftp_folderPath
|
|
||||||
try:
|
|
||||||
sftp.chdir(uploadFolderPath)
|
|
||||||
sftp.put(itemPath)
|
|
||||||
|
|
||||||
except FileNotFoundError:
|
|
||||||
print(oColors.brightRed + "[SFTP]: The 'plugins' folder couldn*t be found on the remote host!" + oColors.standardWhite)
|
|
||||||
print(oColors.brightRed + "[SFTP]: Aborting uploading." + oColors.standardWhite)
|
|
||||||
sftp.close()
|
|
||||||
|
|
||||||
|
|
||||||
def sftp_upload_server_jar(sftp, itemPath):
|
|
||||||
try:
|
|
||||||
sftp.chdir('.')
|
|
||||||
sftp.put(itemPath)
|
|
||||||
except FileNotFoundError:
|
|
||||||
print(oColors.brightRed + "[SFTP]: The 'root' folder couldn*t be found on the remote host!" + oColors.standardWhite)
|
|
||||||
print(oColors.brightRed + "[SFTP]: Aborting uploading." + oColors.standardWhite)
|
|
||||||
sftp.close()
|
|
||||||
|
|
||||||
|
|
||||||
def sftp_listAll(sftp):
|
|
||||||
configValues = configurationValues()
|
|
||||||
try:
|
|
||||||
sftp.chdir(configValues.sftp_folderPath)
|
|
||||||
installedPlugins = sftp.listdir()
|
|
||||||
except FileNotFoundError:
|
|
||||||
print(oColors.brightRed + "[SFTP]: The 'plugins' folder couldn*t be found on the remote host!" + oColors.standardWhite)
|
|
||||||
|
|
||||||
try:
|
|
||||||
return installedPlugins
|
|
||||||
except UnboundLocalError:
|
|
||||||
print(oColors.brightRed + "[SFTP]: No plugins were found." + oColors.standardWhite)
|
|
||||||
|
|
||||||
|
|
||||||
def sftp_listFilesInServerRoot(sftp):
|
|
||||||
try:
|
|
||||||
filesInServerRoot = sftp.listdir()
|
|
||||||
except FileNotFoundError:
|
|
||||||
print(oColors.brightRed + "[SFTP]: The 'root' folder couldn*t be found on the remote host!" + oColors.standardWhite)
|
|
||||||
|
|
||||||
try:
|
|
||||||
return filesInServerRoot
|
|
||||||
except UnboundLocalError:
|
|
||||||
print(oColors.brightRed + "[SFTP]: No Serverjar was found." + oColors.standardWhite)
|
|
||||||
|
|
||||||
|
|
||||||
def sftp_downloadFile(sftp, downloadPath, fileToDownload):
|
|
||||||
configValues = configurationValues()
|
|
||||||
sftp.cwd(configValues.sftp_folderPath)
|
|
||||||
currentDirectory = os.getcwd()
|
|
||||||
os.chdir('TempSFTPFolder')
|
|
||||||
sftp.get(fileToDownload)
|
|
||||||
sftp.close()
|
|
||||||
os.chdir(currentDirectory)
|
|
||||||
|
|
||||||
|
|
||||||
def sftp_validateFileAttributes(sftp, pluginPath):
|
|
||||||
pluginSFTPAttribute = sftp.lstat(pluginPath)
|
|
||||||
if stat.S_ISDIR(pluginSFTPAttribute.st_mode):
|
|
||||||
return False
|
|
||||||
elif re.search(r'.jar$', pluginPath):
|
|
||||||
return True
|
|
||||||
else:
|
|
||||||
return False
|
|
@ -1,155 +0,0 @@
|
|||||||
import re
|
|
||||||
import urllib.request
|
|
||||||
from urllib.error import HTTPError
|
|
||||||
from pathlib import Path
|
|
||||||
|
|
||||||
from utils.consoleoutput import oColors
|
|
||||||
from utils.web_request import doAPIRequest
|
|
||||||
from utils.utilities import createTempPluginFolder, deleteTempPluginFolder, calculateFileSizeKb, calculateFileSizeMb
|
|
||||||
from handlers.handle_config import configurationValues
|
|
||||||
from handlers.handle_sftp import sftp_upload_file, createSFTPConnection
|
|
||||||
from handlers.handle_ftp import ftp_upload_file, createFTPConnection
|
|
||||||
|
|
||||||
|
|
||||||
def handleRegexPackageName(packageNameFull):
|
|
||||||
packageNameFull2 = packageNameFull
|
|
||||||
# trims the part of the package that has for example "[1.1 Off]" in it
|
|
||||||
unwantedpackageName = re.search(r'(^\[+[a-zA-Z0-9\s\W*\.*\-*\+*\%*\,]*\]+)', packageNameFull)
|
|
||||||
unwantedpackageNamematch = bool(unwantedpackageName)
|
|
||||||
if unwantedpackageNamematch:
|
|
||||||
unwantedpackageNameString = unwantedpackageName.group()
|
|
||||||
packageNameFull2 = packageNameFull.replace(unwantedpackageNameString, '')
|
|
||||||
# gets the real packagename "word1 & word2" is not supported only gets word 1
|
|
||||||
packageName = re.search(r'([a-zA-Z]\d*)+(\s?\-*\_*[a-zA-Z]\d*\+*\-*\'*)+', packageNameFull2)
|
|
||||||
try:
|
|
||||||
packageNameFullString = packageName.group()
|
|
||||||
packageNameOnly = packageNameFullString.replace(' ', '')
|
|
||||||
except AttributeError:
|
|
||||||
packageNameOnly = unwantedpackageNameString
|
|
||||||
return packageNameOnly
|
|
||||||
|
|
||||||
|
|
||||||
def getVersionID(packageId, packageVersion):
|
|
||||||
if packageVersion == None or packageVersion == 'latest':
|
|
||||||
url = f"https://api.spiget.org/v2/resources/{packageId}/versions/latest"
|
|
||||||
response = doAPIRequest(url)
|
|
||||||
versionId = response["id"]
|
|
||||||
return versionId
|
|
||||||
|
|
||||||
url = f"https://api.spiget.org/v2/resources/{packageId}/versions?size=100&sort=-name"
|
|
||||||
versionList = doAPIRequest(url)
|
|
||||||
|
|
||||||
for packages in versionList:
|
|
||||||
packageUpdate = packages["name"]
|
|
||||||
versionId = packages["id"]
|
|
||||||
if packageUpdate == packageVersion:
|
|
||||||
return versionId
|
|
||||||
return versionList[0]["id"]
|
|
||||||
|
|
||||||
|
|
||||||
def getVersionName(packageId, versionId):
|
|
||||||
url = f"https://api.spiget.org/v2/resources/{packageId}/versions/{versionId}"
|
|
||||||
response = doAPIRequest(url)
|
|
||||||
versionName = response["name"]
|
|
||||||
return versionName
|
|
||||||
|
|
||||||
|
|
||||||
def searchPackage(resourceName):
|
|
||||||
configValues = configurationValues()
|
|
||||||
url = f"https://api.spiget.org/v2/search/resources/{resourceName}?field=name&sort=-downloads"
|
|
||||||
packageName = doAPIRequest(url)
|
|
||||||
i = 1
|
|
||||||
print(oColors.brightBlack + f"Searching: {resourceName}" + oColors.standardWhite)
|
|
||||||
print("┌─────┬─────────────────────────────┬───────────┬──────────────────────────────────────────────────────────────────────┐")
|
|
||||||
print("│ No. │ Name │ Downloads │ Description │")
|
|
||||||
print("└─────┴─────────────────────────────┴───────────┴──────────────────────────────────────────────────────────────────────┘")
|
|
||||||
for resource in packageName:
|
|
||||||
pName = resource["name"]
|
|
||||||
newName = handleRegexPackageName(pName)
|
|
||||||
pTag = resource["tag"]
|
|
||||||
pDownloads = resource["downloads"]
|
|
||||||
print(f" [{i}]".rjust(6), end='')
|
|
||||||
print(" ", end='')
|
|
||||||
print(f"{newName}".ljust(30), end='')
|
|
||||||
print(f"{pDownloads}".rjust(9), end='')
|
|
||||||
print(" ", end='')
|
|
||||||
print(f"{pTag}".ljust(120))
|
|
||||||
i = i + 1
|
|
||||||
|
|
||||||
resourceSelected = int(input("Select your wanted resource (No.)(0 to exit): "))
|
|
||||||
if resourceSelected != 0:
|
|
||||||
resourceSelected = resourceSelected - 1
|
|
||||||
resourceId = packageName[resourceSelected]["id"]
|
|
||||||
if not configValues.localPluginFolder:
|
|
||||||
if configValues.sftp_seperateDownloadPath is True:
|
|
||||||
pluginDownloadPath = configValues.sftp_pathToSeperateDownloadPath
|
|
||||||
else:
|
|
||||||
pluginDownloadPath = configValues.sftp_folderPath
|
|
||||||
else:
|
|
||||||
if configValues.seperateDownloadPath is True:
|
|
||||||
pluginDownloadPath = configValues.pathToSeperateDownloadPath
|
|
||||||
else:
|
|
||||||
pluginDownloadPath = configValues.pathToPluginFolder
|
|
||||||
try:
|
|
||||||
getSpecificPackage(resourceId, pluginDownloadPath)
|
|
||||||
except HTTPError as err:
|
|
||||||
print(oColors.brightRed + f"Error: {err.code} - {err.reason}" + oColors.standardWhite)
|
|
||||||
|
|
||||||
|
|
||||||
def downloadSpecificVersion(resourceId, downloadPath, versionID='latest'):
|
|
||||||
configValues = configurationValues()
|
|
||||||
if versionID != 'latest':
|
|
||||||
#url = f"https://spigotmc.org/resources/{resourceId}/download?version={versionID}"
|
|
||||||
print(oColors.brightRed + "Sorry but specific version downloads aren't supported because of cloudflare protection. :(" + oColors.standardWhite)
|
|
||||||
print(oColors.brightRed + "Reverting to latest version." + oColors.standardWhite)
|
|
||||||
|
|
||||||
url = f"https://api.spiget.org/v2/resources/{resourceId}/download"
|
|
||||||
#url = f"https://api.spiget.org/v2/resources/{resourceId}/versions/latest/download" #throws 403 forbidden error...cloudflare :(
|
|
||||||
|
|
||||||
urrlib_opener = urllib.request.build_opener()
|
|
||||||
urrlib_opener.addheaders = [('User-agent', 'pluGET/1.0')]
|
|
||||||
urllib.request.install_opener(urrlib_opener)
|
|
||||||
|
|
||||||
remotefile = urllib.request.urlopen(url)
|
|
||||||
filesize = remotefile.info()['Content-Length']
|
|
||||||
urllib.request.urlretrieve(url, downloadPath)
|
|
||||||
filesize = int(filesize)
|
|
||||||
print(" ", end='')
|
|
||||||
if filesize >= 1000000:
|
|
||||||
filesizeData = calculateFileSizeMb(filesize)
|
|
||||||
print("Downloaded " + (str(filesizeData)).rjust(9) + f" MB here {downloadPath}")
|
|
||||||
else:
|
|
||||||
filesizeData = calculateFileSizeKb(filesize)
|
|
||||||
print("Downloaded " + (str(filesizeData)).rjust(9) + f" KB here {downloadPath}")
|
|
||||||
if not configValues.localPluginFolder:
|
|
||||||
if configValues.sftp_useSftp:
|
|
||||||
sftpSession = createSFTPConnection()
|
|
||||||
sftp_upload_file(sftpSession, downloadPath)
|
|
||||||
else:
|
|
||||||
ftpSession = createFTPConnection()
|
|
||||||
ftp_upload_file(ftpSession, downloadPath)
|
|
||||||
|
|
||||||
|
|
||||||
def getSpecificPackage(resourceId, downloadPath, inputPackageVersion='latest'):
|
|
||||||
configValues = configurationValues()
|
|
||||||
if configValues.localPluginFolder == False:
|
|
||||||
downloadPath = createTempPluginFolder()
|
|
||||||
url = f"https://api.spiget.org/v2/resources/{resourceId}"
|
|
||||||
packageDetails = doAPIRequest(url)
|
|
||||||
try:
|
|
||||||
packageName = packageDetails["name"]
|
|
||||||
except KeyError:
|
|
||||||
print(oColors.brightRed + "Error: Plugin ID couldn't be found" + oColors.standardWhite)
|
|
||||||
return None
|
|
||||||
packageNameNew = handleRegexPackageName(packageName)
|
|
||||||
versionId = getVersionID(resourceId, inputPackageVersion)
|
|
||||||
packageVersion = getVersionName(resourceId, versionId)
|
|
||||||
packageDownloadName = f"{packageNameNew}-{packageVersion}.jar"
|
|
||||||
downloadPackagePath = Path(f"{downloadPath}/{packageDownloadName}")
|
|
||||||
if inputPackageVersion is None or inputPackageVersion == 'latest':
|
|
||||||
downloadSpecificVersion(resourceId=resourceId, downloadPath=downloadPackagePath)
|
|
||||||
else:
|
|
||||||
downloadSpecificVersion(resourceId, downloadPackagePath, versionId)
|
|
||||||
|
|
||||||
if not configValues.localPluginFolder:
|
|
||||||
deleteTempPluginFolder(downloadPath)
|
|
@ -1,59 +0,0 @@
|
|||||||
import os
|
|
||||||
import re
|
|
||||||
from pathlib import Path
|
|
||||||
|
|
||||||
from utils.consoleoutput import oColors
|
|
||||||
from handlers.handle_config import configurationValues
|
|
||||||
from handlers.handle_sftp import createSFTPConnection, sftp_listAll
|
|
||||||
from handlers.handle_ftp import createFTPConnection, ftp_listAll
|
|
||||||
from plugin.plugin_updatechecker import getFileName, getFileVersion, getInstalledPlugin, createPluginList
|
|
||||||
|
|
||||||
|
|
||||||
def removePlugin(pluginToRemove):
|
|
||||||
configValues = configurationValues()
|
|
||||||
createPluginList()
|
|
||||||
if not configValues.localPluginFolder:
|
|
||||||
if not configValues.sftp_useSftp:
|
|
||||||
ftp = createFTPConnection()
|
|
||||||
pluginList = ftp_listAll(ftp)
|
|
||||||
else:
|
|
||||||
sftp = createSFTPConnection()
|
|
||||||
pluginList = sftp_listAll(sftp)
|
|
||||||
else:
|
|
||||||
pluginList = os.listdir(configValues.pathToPluginFolder)
|
|
||||||
i = 0
|
|
||||||
try:
|
|
||||||
for plugin in pluginList:
|
|
||||||
try:
|
|
||||||
fileName = getFileName(plugin)
|
|
||||||
fileVersion = getFileVersion(plugin)
|
|
||||||
pluginId = getInstalledPlugin(fileName, fileVersion)
|
|
||||||
except TypeError:
|
|
||||||
continue
|
|
||||||
pluginIdStr = str(pluginId)
|
|
||||||
|
|
||||||
if pluginToRemove == pluginIdStr or re.search(pluginToRemove, fileName, re.IGNORECASE):
|
|
||||||
print(f"Removing: {fileName}")
|
|
||||||
if not configValues.localPluginFolder:
|
|
||||||
pluginPath = configValues.sftp_folderPath
|
|
||||||
pluginPath = f"{pluginPath}/{plugin}"
|
|
||||||
if not configValues.sftp_useSftp:
|
|
||||||
ftp = createFTPConnection()
|
|
||||||
ftp.delete(pluginPath)
|
|
||||||
else:
|
|
||||||
sftp = createSFTPConnection()
|
|
||||||
sftp.remove(pluginPath)
|
|
||||||
print(f"Removed: {fileName}")
|
|
||||||
i += 1
|
|
||||||
break
|
|
||||||
else:
|
|
||||||
pluginPath = configValues.pathToPluginFolder
|
|
||||||
pluginPath = Path(f"{pluginPath}/{plugin}")
|
|
||||||
os.remove(pluginPath)
|
|
||||||
print(f"Removed: {fileName}")
|
|
||||||
i += 1
|
|
||||||
break
|
|
||||||
except TypeError:
|
|
||||||
print(oColors.brightRed + f"Aborted removing of: {pluginToRemove}." + oColors.standardWhite)
|
|
||||||
if i == 0:
|
|
||||||
print(oColors.brightRed + f"Couldn't remove plugin: {pluginToRemove}" + oColors.standardWhite)
|
|
@ -1,482 +0,0 @@
|
|||||||
import os
|
|
||||||
import re
|
|
||||||
import io
|
|
||||||
import base64
|
|
||||||
from zipfile import ZipFile
|
|
||||||
from urllib.error import HTTPError
|
|
||||||
from pathlib import Path
|
|
||||||
from rich.progress import track
|
|
||||||
|
|
||||||
from utils.consoleoutput import oColors
|
|
||||||
from utils.web_request import doAPIRequest
|
|
||||||
from handlers.handle_config import configurationValues
|
|
||||||
from handlers.handle_sftp import createSFTPConnection, sftp_listAll, sftp_downloadFile, sftp_validateFileAttributes
|
|
||||||
from handlers.handle_ftp import createFTPConnection, ftp_listAll, ftp_downloadFile, ftp_validateFileAttributes
|
|
||||||
from plugin.plugin_downloader import getSpecificPackage
|
|
||||||
from utils.utilities import createTempPluginFolder, deleteTempPluginFolder
|
|
||||||
|
|
||||||
|
|
||||||
def createPluginList():
|
|
||||||
global INSTALLEDPLUGINLIST
|
|
||||||
INSTALLEDPLUGINLIST = []
|
|
||||||
return INSTALLEDPLUGINLIST
|
|
||||||
|
|
||||||
|
|
||||||
def addToPluginList(localFileName, pluginId, versionId, plugin_latest_version, plugin_is_outdated):
|
|
||||||
INSTALLEDPLUGINLIST.append([localFileName, pluginId, versionId, plugin_latest_version, plugin_is_outdated])
|
|
||||||
|
|
||||||
|
|
||||||
def getFileName(pluginName):
|
|
||||||
pluginNameFull = pluginName
|
|
||||||
pluginVersion = re.search(r'([\d.]+[.jar]+)', pluginNameFull)
|
|
||||||
try:
|
|
||||||
pluginVersionFull = pluginVersion.group()
|
|
||||||
except AttributeError:
|
|
||||||
pluginVersionFull = pluginVersion
|
|
||||||
pluginNameOnlyy = pluginNameFull.replace(pluginVersionFull, '')
|
|
||||||
pluginNameOnly = re.sub(r'(\-$)', '', pluginNameOnlyy)
|
|
||||||
pluginNameOnlyy = re.sub(r'(\-v$)', '', pluginNameOnly)
|
|
||||||
return pluginNameOnlyy
|
|
||||||
|
|
||||||
|
|
||||||
def getFileVersion(pluginName):
|
|
||||||
pluginNameFull = pluginName
|
|
||||||
pluginVersion = re.search(r'([\d.]+[.jar]+)', pluginNameFull)
|
|
||||||
pluginVersionFull = pluginVersion.group()
|
|
||||||
pluginVersionString = pluginVersionFull.replace('.jar', '')
|
|
||||||
if pluginVersionString.endswith('.'):
|
|
||||||
pluginVersionString = ''
|
|
||||||
if pluginVersionString == '':
|
|
||||||
pluginVersionString = eggCrackingJar(pluginNameFull, 'version')
|
|
||||||
return pluginVersionString
|
|
||||||
|
|
||||||
|
|
||||||
def getLatestPluginVersion(pluginId):
|
|
||||||
url = f"https://api.spiget.org/v2/resources/{pluginId}/versions/latest"
|
|
||||||
latestUpdateSearch = doAPIRequest(url)
|
|
||||||
versionLatestUpdate = latestUpdateSearch["name"]
|
|
||||||
return versionLatestUpdate
|
|
||||||
|
|
||||||
|
|
||||||
def getUpdateDescription(pluginId):
|
|
||||||
url = f"https://api.spiget.org/v2/resources/{pluginId}/updates?size=1&sort=-date"
|
|
||||||
latestDescriptionSearch = doAPIRequest(url)
|
|
||||||
versionLatestDescription = latestDescriptionSearch[0]["description"]
|
|
||||||
versionLatestDescription = base64.b64decode(versionLatestDescription)
|
|
||||||
versionLatestDescriptionText =versionLatestDescription.decode('utf-8')
|
|
||||||
htmlRegex = re.compile('<.*?>')
|
|
||||||
versionLatestDescriptionText = re.sub(htmlRegex, '', versionLatestDescriptionText)
|
|
||||||
linesChangelogDescription = versionLatestDescriptionText.split("\n")
|
|
||||||
nonEmptyLines = [line for line in linesChangelogDescription if line.strip() != ""]
|
|
||||||
stringnonEmptyLines = ""
|
|
||||||
for line in nonEmptyLines:
|
|
||||||
stringnonEmptyLines += line + "\n"
|
|
||||||
stringnonEmptyLines = stringnonEmptyLines[:-1]
|
|
||||||
return stringnonEmptyLines
|
|
||||||
|
|
||||||
|
|
||||||
def versionTuple(versionString):
|
|
||||||
return tuple(map(int, (versionString.split("."))))
|
|
||||||
|
|
||||||
|
|
||||||
def getVersionWithoutLetters(versionString):
|
|
||||||
return re.sub(r'([A-Za-z]*)', '', versionString)
|
|
||||||
|
|
||||||
|
|
||||||
def compareVersions(plugin_latest_version, pluginVersion):
|
|
||||||
try:
|
|
||||||
pluginVersionTuple = versionTuple(getVersionWithoutLetters(pluginVersion))
|
|
||||||
plugin_latest_versionTuple = versionTuple(getVersionWithoutLetters(plugin_latest_version))
|
|
||||||
except ValueError:
|
|
||||||
return False
|
|
||||||
if pluginVersionTuple < plugin_latest_versionTuple:
|
|
||||||
return True
|
|
||||||
else:
|
|
||||||
return False
|
|
||||||
|
|
||||||
|
|
||||||
def eggCrackingJar(localJarFileName, searchMode):
|
|
||||||
configValues = configurationValues()
|
|
||||||
if not configValues.localPluginFolder:
|
|
||||||
tempPluginFolderPath = createTempPluginFolder()
|
|
||||||
if configValues.sftp_useSftp:
|
|
||||||
sftp = createSFTPConnection()
|
|
||||||
pathToPluginJar = Path(f"{tempPluginFolderPath}/{localJarFileName}")
|
|
||||||
sftp_downloadFile(sftp, pathToPluginJar, localJarFileName)
|
|
||||||
else:
|
|
||||||
ftp = createFTPConnection()
|
|
||||||
pathToPluginJar = Path(f"{tempPluginFolderPath}/{localJarFileName}")
|
|
||||||
ftp_downloadFile(ftp, pathToPluginJar, localJarFileName)
|
|
||||||
else:
|
|
||||||
pluginPath = configValues.pathToPluginFolder
|
|
||||||
pathToPluginJar = Path(f"{pluginPath}/{localJarFileName}")
|
|
||||||
pluginVersion = ''
|
|
||||||
pluginName = ''
|
|
||||||
with ZipFile(pathToPluginJar, 'r') as pluginJar:
|
|
||||||
try:
|
|
||||||
with io.TextIOWrapper(pluginJar.open('plugin.yml', 'r'), encoding="utf-8") as pluginYml:
|
|
||||||
pluginYmlContentLine = pluginYml.readlines()
|
|
||||||
for line in pluginYmlContentLine:
|
|
||||||
if searchMode == 'version':
|
|
||||||
if re.match(r'^\s*?version: ', line):
|
|
||||||
pluginVersion = re.sub(r'^\s*?version: ', '', line)
|
|
||||||
pluginVersion = pluginVersion.replace('\n', '')
|
|
||||||
pluginVersion = pluginVersion.replace("'", '')
|
|
||||||
pluginVersion = pluginVersion.replace('"', '')
|
|
||||||
elif searchMode == 'name':
|
|
||||||
if re.match(r'^\s*?name: ', line):
|
|
||||||
pluginName = re.sub(r'^\s*?name: ', '', line)
|
|
||||||
pluginName = pluginName.replace('\n', '')
|
|
||||||
pluginName = pluginName.replace("'", '')
|
|
||||||
pluginName = pluginName.replace('"', '')
|
|
||||||
|
|
||||||
except FileNotFoundError:
|
|
||||||
pluginVersion = ''
|
|
||||||
pluginName = ''
|
|
||||||
except KeyError:
|
|
||||||
pluginVersion = ''
|
|
||||||
pluginName = ''
|
|
||||||
if not configValues.localPluginFolder:
|
|
||||||
deleteTempPluginFolder(tempPluginFolderPath)
|
|
||||||
if searchMode == 'version':
|
|
||||||
return pluginVersion
|
|
||||||
if searchMode == 'name':
|
|
||||||
return pluginName
|
|
||||||
|
|
||||||
|
|
||||||
def checkInstalledPackage(inputSelectedObject="all", inputOptionalParam=None):
|
|
||||||
configValues = configurationValues()
|
|
||||||
createPluginList()
|
|
||||||
pluginFolderPath = configValues.pathToPluginFolder
|
|
||||||
if not configValues.localPluginFolder:
|
|
||||||
if configValues.sftp_useSftp:
|
|
||||||
connection = createSFTPConnection()
|
|
||||||
pluginList = sftp_listAll(connection)
|
|
||||||
else:
|
|
||||||
connection = createFTPConnection()
|
|
||||||
pluginList = ftp_listAll(connection)
|
|
||||||
else:
|
|
||||||
pluginList = os.listdir(pluginFolderPath)
|
|
||||||
|
|
||||||
i = 0
|
|
||||||
oldPlugins = 0
|
|
||||||
print(oColors.brightBlack + f"Checking: {inputSelectedObject}" + oColors.standardWhite)
|
|
||||||
if inputOptionalParam != "changelog":
|
|
||||||
print(oColors.brightBlack + f"Use 'check {inputSelectedObject} changelog' to get the latest changelog from plugins" + oColors.standardWhite)
|
|
||||||
print("┌─────┬────────────────────────────────┬──────────────┬──────────────┐")
|
|
||||||
print("│ No. │ Name │ Installed V. │ Latest V. │")
|
|
||||||
print("└─────┴────────────────────────────────┴──────────────┴──────────────┘")
|
|
||||||
try:
|
|
||||||
for plugin in track(pluginList, description="Checking for updates" ,transient=True, complete_style="bright_yellow"):
|
|
||||||
if not configValues.localPluginFolder:
|
|
||||||
pluginFile = f"{configValues.sftp_folderPath}/{plugin}"
|
|
||||||
if configValues.sftp_useSftp:
|
|
||||||
pluginAttributes = sftp_validateFileAttributes(connection, pluginFile)
|
|
||||||
if pluginAttributes == False:
|
|
||||||
continue
|
|
||||||
else:
|
|
||||||
pluginAttributes = ftp_validateFileAttributes(connection, pluginFile)
|
|
||||||
if pluginAttributes == False:
|
|
||||||
continue
|
|
||||||
else:
|
|
||||||
if not os.path.isfile(Path(f"{pluginFolderPath}/{plugin}")):
|
|
||||||
continue
|
|
||||||
if not re.search(r'.jar$', plugin):
|
|
||||||
continue
|
|
||||||
try:
|
|
||||||
fileName = getFileName(plugin)
|
|
||||||
fileVersion = getFileVersion(plugin)
|
|
||||||
pluginId = getInstalledPlugin(fileName, fileVersion, plugin)
|
|
||||||
except TypeError:
|
|
||||||
continue
|
|
||||||
|
|
||||||
pluginIdStr = str(pluginId)
|
|
||||||
if fileVersion == '':
|
|
||||||
fileVersion = 'N/A'
|
|
||||||
try:
|
|
||||||
pluginLatestVersion = INSTALLEDPLUGINLIST[i][3]
|
|
||||||
except IndexError:
|
|
||||||
pluginLatestVersion = 'N/A'
|
|
||||||
|
|
||||||
if pluginLatestVersion == None:
|
|
||||||
pluginLatestVersion = 'N/A'
|
|
||||||
|
|
||||||
try:
|
|
||||||
pluginIsOutdated = INSTALLEDPLUGINLIST[i][4]
|
|
||||||
except IndexError:
|
|
||||||
pluginIsOutdated = 'N/A'
|
|
||||||
|
|
||||||
if pluginIsOutdated == None:
|
|
||||||
pluginIsOutdated = 'N/A'
|
|
||||||
|
|
||||||
if pluginIsOutdated == True:
|
|
||||||
oldPlugins = oldPlugins + 1
|
|
||||||
|
|
||||||
if re.search(r'.jar$', fileName):
|
|
||||||
fileName = eggCrackingJar(plugin, "name")
|
|
||||||
|
|
||||||
if inputSelectedObject != "all" and inputSelectedObject != "*":
|
|
||||||
if inputSelectedObject != pluginIdStr or not re.search(inputSelectedObject, fileName, re.IGNORECASE):
|
|
||||||
i += 1
|
|
||||||
continue
|
|
||||||
|
|
||||||
if inputSelectedObject == "all" or inputSelectedObject != "*" or inputSelectedObject != "all":
|
|
||||||
if inputSelectedObject == pluginIdStr or re.search(inputSelectedObject, fileName, re.IGNORECASE):
|
|
||||||
if pluginLatestVersion == 'N/A':
|
|
||||||
print(oColors.brightBlack + f" [{1}]".rjust(6), end='')
|
|
||||||
else:
|
|
||||||
print(f" [{1}]".rjust(6), end='')
|
|
||||||
else:
|
|
||||||
if pluginLatestVersion == 'N/A':
|
|
||||||
print(oColors.brightBlack + f" [{i+1}]".rjust(6), end='')
|
|
||||||
else:
|
|
||||||
print(f" [{i+1}]".rjust(6), end='')
|
|
||||||
print(" ", end='')
|
|
||||||
if pluginIsOutdated == True:
|
|
||||||
print(oColors.brightRed + f"{fileName}".ljust(33) + oColors.standardWhite, end='')
|
|
||||||
elif pluginIsOutdated == False:
|
|
||||||
print(oColors.brightGreen + f"{fileName}".ljust(33) + oColors.standardWhite, end='')
|
|
||||||
else:
|
|
||||||
print(f"{fileName}".ljust(33), end='')
|
|
||||||
|
|
||||||
print(f"{fileVersion}".ljust(15), end='')
|
|
||||||
print(f"{pluginLatestVersion}".ljust(15))
|
|
||||||
if (inputOptionalParam == "changelog" and pluginLatestVersion != 'N/A'):
|
|
||||||
print(oColors.brightYellow + f"CHANGELOG {fileName}:" + oColors.standardWhite)
|
|
||||||
description = getUpdateDescription(pluginId)
|
|
||||||
print(description)
|
|
||||||
print()
|
|
||||||
if inputSelectedObject == pluginIdStr or re.search(inputSelectedObject, fileName, re.IGNORECASE):
|
|
||||||
break
|
|
||||||
else:
|
|
||||||
print(oColors.brightRed + "Wrong input! Use 'check all' to check every plugin for updates!" + oColors.standardWhite)
|
|
||||||
break
|
|
||||||
|
|
||||||
i += 1
|
|
||||||
except TypeError:
|
|
||||||
print(oColors.brightRed + "Error occured: Aborted checking for updates." + oColors.standardWhite)
|
|
||||||
print(oColors.brightYellow + f"Outdated plugins: [{oldPlugins}/{i}]" + oColors.standardWhite)
|
|
||||||
|
|
||||||
|
|
||||||
def updateInstalledPackage(inputSelectedObject='all'):
|
|
||||||
configValues = configurationValues()
|
|
||||||
if not configValues.localPluginFolder:
|
|
||||||
if configValues.sftp_useSftp:
|
|
||||||
connection = createSFTPConnection()
|
|
||||||
else:
|
|
||||||
connection = createFTPConnection()
|
|
||||||
|
|
||||||
try:
|
|
||||||
print(oColors.brightBlack + "Selected plugins with available Updates:" + oColors.standardWhite)
|
|
||||||
if inputSelectedObject == "all" or inputSelectedObject == "*":
|
|
||||||
for pluginIndex in range(len(INSTALLEDPLUGINLIST)):
|
|
||||||
if INSTALLEDPLUGINLIST[pluginIndex][4] == True:
|
|
||||||
fileName = getFileName(INSTALLEDPLUGINLIST[pluginIndex][0])
|
|
||||||
print(fileName, end=' ')
|
|
||||||
else:
|
|
||||||
print(inputSelectedObject, end=' ')
|
|
||||||
|
|
||||||
print()
|
|
||||||
updateConfirmation = input("Update these plugins [y/n] ? ")
|
|
||||||
if str.lower(updateConfirmation) != "y":
|
|
||||||
print(oColors.brightRed + "Aborting the update process."+ oColors.standardWhite)
|
|
||||||
return False
|
|
||||||
|
|
||||||
except NameError:
|
|
||||||
print(oColors.brightRed + "Check for updates before updating plugins with: 'check all'" + oColors.standardWhite)
|
|
||||||
print(oColors.brightRed + "Started checking for updates..." + oColors.standardWhite)
|
|
||||||
checkInstalledPackage()
|
|
||||||
print(oColors.brightRed + f"Please input 'update {inputSelectedObject}' again!" + oColors.standardWhite)
|
|
||||||
return False
|
|
||||||
|
|
||||||
i = 0
|
|
||||||
pluginsUpdated = 0
|
|
||||||
indexNumberUpdated = 0
|
|
||||||
print(oColors.brightBlack + f"Updating: {inputSelectedObject}" + oColors.standardWhite)
|
|
||||||
print("┌─────┬────────────────────────────────┬────────────┬──────────┐")
|
|
||||||
print("│ No. │ Name │ Old V. │ New V. │")
|
|
||||||
print("└─────┴────────────────────────────────┴────────────┴──────────┘")
|
|
||||||
try:
|
|
||||||
for pluginArray in track(INSTALLEDPLUGINLIST, description="Updating" ,transient=True, complete_style="bright_magenta", ):
|
|
||||||
plugin = INSTALLEDPLUGINLIST[i][0]
|
|
||||||
if not configValues.localPluginFolder:
|
|
||||||
pluginFile = f"{configValues.sftp_folderPath}/{plugin}"
|
|
||||||
if configValues.sftp_useSftp:
|
|
||||||
pluginAttributes = sftp_validateFileAttributes(connection, pluginFile)
|
|
||||||
if pluginAttributes == False:
|
|
||||||
i += 1
|
|
||||||
continue
|
|
||||||
else:
|
|
||||||
pluginAttributes = ftp_validateFileAttributes(connection, pluginFile)
|
|
||||||
if pluginAttributes == False:
|
|
||||||
i += 1
|
|
||||||
continue
|
|
||||||
else:
|
|
||||||
pluginFolderPath = configValues.pathToPluginFolder
|
|
||||||
if not os.path.isfile(Path(f"{pluginFolderPath}/{plugin}")):
|
|
||||||
i += 1
|
|
||||||
continue
|
|
||||||
if not re.search(r'.jar$', plugin):
|
|
||||||
i += 1
|
|
||||||
continue
|
|
||||||
|
|
||||||
try:
|
|
||||||
fileName = getFileName(plugin)
|
|
||||||
fileVersion = getFileVersion(plugin)
|
|
||||||
pluginId = INSTALLEDPLUGINLIST[i][1]
|
|
||||||
latestVersion = INSTALLEDPLUGINLIST[i][3]
|
|
||||||
except (TypeError, ValueError):
|
|
||||||
i += 1
|
|
||||||
continue
|
|
||||||
|
|
||||||
if re.search(r'.jar$', fileName):
|
|
||||||
fileName = eggCrackingJar(plugin, "name")
|
|
||||||
|
|
||||||
pluginIdStr = str(pluginId)
|
|
||||||
if pluginId == None or pluginId == '':
|
|
||||||
i += 1
|
|
||||||
continue
|
|
||||||
|
|
||||||
if inputSelectedObject != 'all' and inputSelectedObject != pluginIdStr and not re.search(inputSelectedObject, fileName, re.IGNORECASE):
|
|
||||||
i += 1
|
|
||||||
continue
|
|
||||||
if INSTALLEDPLUGINLIST[i][4] != True:
|
|
||||||
i += 1
|
|
||||||
continue
|
|
||||||
if INSTALLEDPLUGINLIST[i][4] == False and inputSelectedObject != 'all':
|
|
||||||
print(oColors.brightGreen + f"{fileName} is already on {latestVersion}" + oColors.standardWhite)
|
|
||||||
print(oColors.brightRed + "Aborting the update process."+ oColors.standardWhite)
|
|
||||||
break
|
|
||||||
|
|
||||||
print(f" [{indexNumberUpdated+1}]".rjust(6), end='')
|
|
||||||
print(" ", end='')
|
|
||||||
print(f"{fileName}".ljust(33), end='')
|
|
||||||
print(f"{fileVersion}".ljust(13), end='')
|
|
||||||
print(f"{latestVersion}".ljust(13))
|
|
||||||
if not configValues.localPluginFolder:
|
|
||||||
if configValues.sftp_seperateDownloadPath is True:
|
|
||||||
pluginPath = configValues.sftp_pathToSeperateDownloadPath
|
|
||||||
else:
|
|
||||||
pluginPath = configValues.sftp_folderPath
|
|
||||||
pluginPath = f"{pluginPath}/{plugin}"
|
|
||||||
indexNumberUpdated += 1
|
|
||||||
pluginsUpdated += 1
|
|
||||||
if configValues.sftp_useSftp:
|
|
||||||
sftp = createSFTPConnection()
|
|
||||||
try:
|
|
||||||
getSpecificPackage(pluginId, pluginPath)
|
|
||||||
if configValues.sftp_seperateDownloadPath is False:
|
|
||||||
sftp.remove(pluginPath)
|
|
||||||
except HTTPError as err:
|
|
||||||
print(oColors.brightRed + f"HTTPError: {err.code} - {err.reason}" + oColors.standardWhite)
|
|
||||||
pluginsUpdated -= 1
|
|
||||||
except TypeError:
|
|
||||||
print(oColors.brightRed + f"TypeError: Couldn't download new version. Is the file available on spigotmc?" + oColors.standardWhite)
|
|
||||||
pluginsUpdated -= 1
|
|
||||||
except FileNotFoundError:
|
|
||||||
print(oColors.brightRed + f"FileNotFoundError: Old plugin file coulnd't be deleted" + oColors.standardWhite)
|
|
||||||
|
|
||||||
else:
|
|
||||||
ftp = createFTPConnection()
|
|
||||||
try:
|
|
||||||
getSpecificPackage(pluginId, pluginPath)
|
|
||||||
if configValues.sftp_seperateDownloadPath is False:
|
|
||||||
ftp.delete(pluginPath)
|
|
||||||
except HTTPError as err:
|
|
||||||
print(oColors.brightRed + f"HTTPError: {err.code} - {err.reason}" + oColors.standardWhite)
|
|
||||||
pluginsUpdated -= 1
|
|
||||||
except TypeError:
|
|
||||||
print(oColors.brightRed + f"TypeError: Couldn't download new version. Is the file available on spigotmc?" + oColors.standardWhite)
|
|
||||||
pluginsUpdated -= 1
|
|
||||||
except FileNotFoundError:
|
|
||||||
print(oColors.brightRed + f"FileNotFoundError: Old plugin file coulnd't be deleted" + oColors.standardWhite)
|
|
||||||
|
|
||||||
else:
|
|
||||||
if configValues.seperateDownloadPath is True:
|
|
||||||
pluginPath = configValues.pathToSeperateDownloadPath
|
|
||||||
else:
|
|
||||||
pluginPath = configValues.pathToPluginFolder
|
|
||||||
indexNumberUpdated += 1
|
|
||||||
pluginsUpdated += 1
|
|
||||||
try:
|
|
||||||
getSpecificPackage(pluginId, pluginPath)
|
|
||||||
if configValues.seperateDownloadPath is False:
|
|
||||||
pluginPath = f"{pluginPath}/{plugin}"
|
|
||||||
os.remove(pluginPath)
|
|
||||||
except HTTPError as err:
|
|
||||||
print(oColors.brightRed + f"HTTPError: {err.code} - {err.reason}" + oColors.standardWhite)
|
|
||||||
pluginsUpdated -= 1
|
|
||||||
except TypeError:
|
|
||||||
print(oColors.brightRed + f"TypeError: Couldn't download new version. Is the file available on spigotmc?" + oColors.standardWhite)
|
|
||||||
pluginsUpdated -= 1
|
|
||||||
except FileNotFoundError:
|
|
||||||
print(oColors.brightRed + f"FileNotFoundError: Old plugin file coulnd't be deleted" + oColors.standardWhite)
|
|
||||||
if inputSelectedObject != 'all':
|
|
||||||
break
|
|
||||||
elif inputSelectedObject != 'all':
|
|
||||||
print(oColors.brightGreen + f"{fileName} is already on {latestVersion}" + oColors.standardWhite)
|
|
||||||
print(oColors.brightRed + "Aborting the update process."+ oColors.standardWhite)
|
|
||||||
break
|
|
||||||
|
|
||||||
i += 1
|
|
||||||
except TypeError:
|
|
||||||
print(oColors.brightRed + "Error occured: Aborted updating plugins." + oColors.standardWhite)
|
|
||||||
except NameError:
|
|
||||||
print(oColors.brightRed + "Check for updates before updating plugins with: 'check all'" + oColors.standardWhite)
|
|
||||||
print(oColors.brightRed + "Started checking for updates..." + oColors.standardWhite)
|
|
||||||
checkInstalledPackage()
|
|
||||||
print(oColors.brightRed + f"Please input 'update {inputSelectedObject}' again!" + oColors.standardWhite)
|
|
||||||
if i != 0:
|
|
||||||
print(oColors.brightYellow + f"Plugins updated: [{pluginsUpdated}/{i}]" + oColors.standardWhite)
|
|
||||||
if inputSelectedObject =='all' and pluginsUpdated == 0 and i != 0:
|
|
||||||
print(oColors.brightGreen + "All found plugins are on the latest version!" + oColors.standardWhite)
|
|
||||||
|
|
||||||
|
|
||||||
def getInstalledPlugin(localFileName, localFileVersion, localPluginFullName):
|
|
||||||
url = "https://api.spiget.org/v2/search/resources/" + localFileName + "?field=name&sort=-downloads"
|
|
||||||
packageName = doAPIRequest(url)
|
|
||||||
plugin_match_found = False
|
|
||||||
pluginID = None
|
|
||||||
localFileVersionNew = localFileVersion
|
|
||||||
i = 0
|
|
||||||
for i in range(0, 3):
|
|
||||||
if plugin_match_found == True:
|
|
||||||
break
|
|
||||||
if i == 1:
|
|
||||||
localFileVersionNew = re.sub(r'(\-\w*)', '', localFileVersion)
|
|
||||||
if i == 2:
|
|
||||||
pluginNameinYML = eggCrackingJar(localPluginFullName, 'name')
|
|
||||||
url = "https://api.spiget.org/v2/search/resources/" + pluginNameinYML + "?field=name&sort=-downloads"
|
|
||||||
try:
|
|
||||||
packageName = doAPIRequest(url)
|
|
||||||
except ValueError:
|
|
||||||
continue
|
|
||||||
|
|
||||||
localFileVersion = localFileVersionNew
|
|
||||||
|
|
||||||
for resource in packageName:
|
|
||||||
if plugin_match_found == True:
|
|
||||||
continue
|
|
||||||
pID = resource["id"]
|
|
||||||
url2 = f"https://api.spiget.org/v2/resources/{pID}/versions?size=100&sort=-name"
|
|
||||||
try:
|
|
||||||
packageVersions = doAPIRequest(url2)
|
|
||||||
except ValueError:
|
|
||||||
continue
|
|
||||||
for updates in packageVersions:
|
|
||||||
updateVersion = updates["name"]
|
|
||||||
if localFileVersionNew in updateVersion:
|
|
||||||
plugin_match_found = True
|
|
||||||
pluginID = pID
|
|
||||||
updateId = updates["id"]
|
|
||||||
plugin_latest_version = getLatestPluginVersion(pID)
|
|
||||||
plugin_is_outdated = compareVersions(plugin_latest_version, updateVersion)
|
|
||||||
addToPluginList(localPluginFullName, pID, updateId, plugin_latest_version , plugin_is_outdated)
|
|
||||||
return pluginID
|
|
||||||
|
|
||||||
else:
|
|
||||||
if plugin_match_found != True:
|
|
||||||
pID = updateId = plugin_latest_version = plugin_is_outdated = None
|
|
||||||
addToPluginList(localPluginFullName, pID, updateId, plugin_latest_version , plugin_is_outdated)
|
|
||||||
|
|
||||||
return pluginID
|
|
@ -1,114 +0,0 @@
|
|||||||
import os
|
|
||||||
import sys
|
|
||||||
from urllib.error import HTTPError
|
|
||||||
from pathlib import Path
|
|
||||||
|
|
||||||
from handlers.handle_sftp import createSFTPConnection, sftp_listFilesInServerRoot
|
|
||||||
from handlers.handle_ftp import createFTPConnection, ftp_listFilesInServerRoot
|
|
||||||
from handlers.handle_config import configurationValues
|
|
||||||
from utils.consoleoutput import oColors
|
|
||||||
from serverjar.serverjar_paper import paperCheckForUpdate, papermc_downloader
|
|
||||||
|
|
||||||
|
|
||||||
def checkInstalledServerjar():
|
|
||||||
configValues = configurationValues()
|
|
||||||
if not configValues.localPluginFolder:
|
|
||||||
if not configValues.sftp_useSftp:
|
|
||||||
ftp = createFTPConnection()
|
|
||||||
serverRootList = ftp_listFilesInServerRoot(ftp)
|
|
||||||
else:
|
|
||||||
sftp = createSFTPConnection()
|
|
||||||
serverRootList = sftp_listFilesInServerRoot(sftp)
|
|
||||||
else:
|
|
||||||
serverRootList = os.path.dirname(configValues.pathToPluginFolder)
|
|
||||||
serverRootList = os.listdir(serverRootList)
|
|
||||||
installedServerjarFullName = None
|
|
||||||
try:
|
|
||||||
for files in serverRootList:
|
|
||||||
try:
|
|
||||||
if '.jar' in files:
|
|
||||||
installedServerjarFullName = files
|
|
||||||
break
|
|
||||||
except TypeError:
|
|
||||||
continue
|
|
||||||
except TypeError:
|
|
||||||
print(oColors.brightRed + "Serverjar couldn't be found." + oColors.standardWhite)
|
|
||||||
print(oColors.brightRed + "Aborting the process." + oColors.standardWhite)
|
|
||||||
|
|
||||||
if installedServerjarFullName == None:
|
|
||||||
print(oColors.brightRed + "Serverjar couldn't be found." + oColors.standardWhite)
|
|
||||||
print(oColors.brightRed + "Aborting the process." + oColors.standardWhite)
|
|
||||||
input("Press any key + enter to exit...")
|
|
||||||
sys.exit()
|
|
||||||
print(oColors.brightBlack + f"Checking: {installedServerjarFullName}" + oColors.standardWhite)
|
|
||||||
if 'paper' in installedServerjarFullName:
|
|
||||||
paperCheckForUpdate(installedServerjarFullName)
|
|
||||||
|
|
||||||
else:
|
|
||||||
print(oColors.brightRed + f"{installedServerjarFullName} isn't supported.")
|
|
||||||
print(oColors.brightRed + "Aborting the process." + oColors.standardWhite)
|
|
||||||
|
|
||||||
|
|
||||||
def updateServerjar(serverJarBuild='latest'):
|
|
||||||
configValues = configurationValues()
|
|
||||||
try:
|
|
||||||
if serverJarBuild == None:
|
|
||||||
serverJarBuild = 'latest'
|
|
||||||
if not configValues.localPluginFolder:
|
|
||||||
sftp = createSFTPConnection()
|
|
||||||
serverRootPath = configValues.sftp_folderPath
|
|
||||||
serverRootPath = Path(str(serverRootPath).replace(r'/plugins', ''))
|
|
||||||
serverRootList = sftp_listFilesInServerRoot(sftp)
|
|
||||||
|
|
||||||
else:
|
|
||||||
serverRoot = os.path.dirname(configValues.pathToPluginFolder)
|
|
||||||
serverRootList = os.listdir(serverRoot)
|
|
||||||
serverRootPath = configValues.pathToPluginFolder
|
|
||||||
helpPath = Path('/plugins')
|
|
||||||
helpPathstr = str(helpPath)
|
|
||||||
serverRootPath = Path(str(serverRootPath).replace(helpPathstr, ''))
|
|
||||||
installedServerjarFullName = None
|
|
||||||
|
|
||||||
except FileNotFoundError:
|
|
||||||
print(oColors.brightRed + "Path couldn't be found!" + oColors.standardWhite)
|
|
||||||
print(oColors.brightRed + "Check your config!" + oColors.standardWhite)
|
|
||||||
print(oColors.brightRed + "Aborting the process." + oColors.standardWhite)
|
|
||||||
input("Press any key + enter to exit...")
|
|
||||||
sys.exit()
|
|
||||||
|
|
||||||
try:
|
|
||||||
for files in serverRootList:
|
|
||||||
try:
|
|
||||||
if '.jar' in files:
|
|
||||||
installedServerjarFullName = files
|
|
||||||
break
|
|
||||||
except TypeError:
|
|
||||||
continue
|
|
||||||
except TypeError:
|
|
||||||
print(oColors.brightRed + "Serverjar couldn't be found." + oColors.standardWhite)
|
|
||||||
print(oColors.brightRed + "Aborting the process." + oColors.standardWhite)
|
|
||||||
|
|
||||||
if installedServerjarFullName == None:
|
|
||||||
print(oColors.brightRed + "Serverjar couldn't be found." + oColors.standardWhite)
|
|
||||||
print(oColors.brightRed + "Aborting the process." + oColors.standardWhite)
|
|
||||||
input("Press any key + enter to exit...")
|
|
||||||
sys.exit()
|
|
||||||
|
|
||||||
serverJarPath = Path(f"{serverRootPath}/{installedServerjarFullName}")
|
|
||||||
|
|
||||||
if 'paper' in installedServerjarFullName:
|
|
||||||
print(oColors.brightBlack + f"Updating Paper to build: {serverJarBuild}" + oColors.standardWhite)
|
|
||||||
try:
|
|
||||||
papermc_downloader(serverJarBuild, None, installedServerjarFullName)
|
|
||||||
if not configValues.localPluginFolder:
|
|
||||||
sftp.remove(serverJarPath)
|
|
||||||
else:
|
|
||||||
os.remove(serverJarPath)
|
|
||||||
except HTTPError as err:
|
|
||||||
print(oColors.brightRed + f"Error: {err.code} - {err.reason}" + oColors.standardWhite)
|
|
||||||
except FileNotFoundError:
|
|
||||||
print(oColors.brightRed + "Error: Old serverjar file coulnd't be deleted" + oColors.standardWhite)
|
|
||||||
else:
|
|
||||||
print(oColors.brightRed + f"{installedServerjarFullName} isn't supported.")
|
|
||||||
print(oColors.brightRed + "Aborting the process." + oColors.standardWhite)
|
|
||||||
|
|
@ -1,218 +0,0 @@
|
|||||||
import re
|
|
||||||
import urllib.request
|
|
||||||
from pathlib import Path
|
|
||||||
from rich.console import Console
|
|
||||||
|
|
||||||
from utils.consoleoutput import oColors
|
|
||||||
from utils.web_request import doAPIRequest
|
|
||||||
from handlers.handle_sftp import createSFTPConnection, sftp_upload_server_jar
|
|
||||||
from handlers.handle_ftp import createFTPConnection, ftp_upload_server_jar
|
|
||||||
from handlers.handle_config import configurationValues
|
|
||||||
from utils.utilities import createTempPluginFolder, deleteTempPluginFolder, calculateFileSizeMb
|
|
||||||
|
|
||||||
|
|
||||||
def getInstalledPaperMinecraftVersion(localPaperName):
|
|
||||||
if localPaperName is None:
|
|
||||||
return False
|
|
||||||
mcVersionFull = re.search(r'(\d*\.*\d)+', localPaperName)
|
|
||||||
try:
|
|
||||||
mcVersion = mcVersionFull.group()
|
|
||||||
except AttributeError:
|
|
||||||
mcVersion = mcVersionFull
|
|
||||||
return mcVersion
|
|
||||||
|
|
||||||
|
|
||||||
def getInstalledPaperVersion(localPaperName):
|
|
||||||
if localPaperName is None:
|
|
||||||
return False
|
|
||||||
paperBuildFull = re.search(r'([\d]*.jar)', localPaperName)
|
|
||||||
try:
|
|
||||||
paperBuild = paperBuildFull.group()
|
|
||||||
except AttributeError:
|
|
||||||
paperBuild = paperBuildFull
|
|
||||||
paperBuild = paperBuild.replace('.jar', '')
|
|
||||||
return paperBuild
|
|
||||||
|
|
||||||
|
|
||||||
def findVersionGroup(mcVersion):
|
|
||||||
versionGroups = ['1.17', '1.16', '1.15']
|
|
||||||
if mcVersion is None:
|
|
||||||
return False
|
|
||||||
for versionGroup in versionGroups:
|
|
||||||
url = f"https://papermc.io/api/v2/projects/paper/version_group/{versionGroup}/builds"
|
|
||||||
papermcdetails = doAPIRequest(url)
|
|
||||||
papermcVersionForMc = papermcdetails["versions"]
|
|
||||||
for versions in papermcVersionForMc:
|
|
||||||
if versions == mcVersion:
|
|
||||||
paperVersionGroup = versionGroup
|
|
||||||
return paperVersionGroup
|
|
||||||
if versionGroup == mcVersion:
|
|
||||||
paperVersionGroup = versionGroup
|
|
||||||
return paperVersionGroup
|
|
||||||
return False # Not found
|
|
||||||
|
|
||||||
|
|
||||||
def findBuildVersion(wantedPaperBuild):
|
|
||||||
versionGroups = ['1.17', '1.16', '1.15']
|
|
||||||
if wantedPaperBuild is None:
|
|
||||||
return False
|
|
||||||
for versionGroup in versionGroups:
|
|
||||||
url = f"https://papermc.io/api/v2/projects/paper/version_group/{versionGroup}/builds"
|
|
||||||
papermcdetails = doAPIRequest(url)
|
|
||||||
paperMcBuilds = papermcdetails["builds"]
|
|
||||||
for build in paperMcBuilds:
|
|
||||||
paperBuild = str(build["build"])
|
|
||||||
if paperBuild == wantedPaperBuild:
|
|
||||||
paperVersionGroup = build["version"]
|
|
||||||
return paperVersionGroup
|
|
||||||
return False # Not found
|
|
||||||
|
|
||||||
|
|
||||||
def findLatestBuild(paperVersionGroup):
|
|
||||||
if paperVersionGroup is None:
|
|
||||||
return False
|
|
||||||
url = f"https://papermc.io/api/v2/projects/paper/version_group/{paperVersionGroup}/builds"
|
|
||||||
papermcbuilds = doAPIRequest(url)
|
|
||||||
if "status" in papermcbuilds: # Checks if the API returns a status. This means that there was an error.
|
|
||||||
return False
|
|
||||||
latestPaperBuild = papermcbuilds["builds"][-1]["build"]
|
|
||||||
return latestPaperBuild
|
|
||||||
|
|
||||||
|
|
||||||
def findLatestBuildForVersion(mcVersion):
|
|
||||||
if mcVersion is None:
|
|
||||||
return False
|
|
||||||
url = f"https://papermc.io/api/v2/projects/paper/versions/{mcVersion}"
|
|
||||||
papermcbuilds = doAPIRequest(url)
|
|
||||||
latestPaperBuild = papermcbuilds["builds"][-1]
|
|
||||||
return latestPaperBuild
|
|
||||||
|
|
||||||
|
|
||||||
def versionBehind(installedPaperBuild, latestPaperBuild):
|
|
||||||
if installedPaperBuild is None or latestPaperBuild is None:
|
|
||||||
return False
|
|
||||||
installedPaperBuildint = int(installedPaperBuild)
|
|
||||||
latestPaperBuildint = int(latestPaperBuild)
|
|
||||||
versionsBehind = latestPaperBuildint - installedPaperBuildint
|
|
||||||
return versionsBehind
|
|
||||||
|
|
||||||
|
|
||||||
def getDownloadFileName(paperMcVersion, paperBuild):
|
|
||||||
if paperMcVersion is None or paperBuild is None:
|
|
||||||
return False
|
|
||||||
url = f"https://papermc.io/api/v2/projects/paper/versions/{paperMcVersion}/builds/{paperBuild}"
|
|
||||||
buildDetails = doAPIRequest(url)
|
|
||||||
downloadName = buildDetails["downloads"]["application"]["name"]
|
|
||||||
return downloadName
|
|
||||||
|
|
||||||
|
|
||||||
def paperCheckForUpdate(installedServerjarFullName):
|
|
||||||
mcVersion = getInstalledPaperMinecraftVersion(installedServerjarFullName)
|
|
||||||
|
|
||||||
# Report an error if getInstalledPaperMinecraftVersion encountered an issue.
|
|
||||||
if not mcVersion:
|
|
||||||
print(oColors.brightRed + "ERR: An error was encountered while detecting the server's Minecraft version." +
|
|
||||||
oColors.standardWhite)
|
|
||||||
return False
|
|
||||||
|
|
||||||
paperInstalledBuild = getInstalledPaperVersion(installedServerjarFullName)
|
|
||||||
# Report an error if getInstalledPaperVersion encountered an issue.
|
|
||||||
if not paperInstalledBuild:
|
|
||||||
print(oColors.brightRed + "ERR: An error was encountered while detecting the server's Paper version." +
|
|
||||||
oColors.standardWhite)
|
|
||||||
return False
|
|
||||||
|
|
||||||
versionGroup = findVersionGroup(mcVersion)
|
|
||||||
# Report an error if findVersionGroup encountered an issue.
|
|
||||||
if not versionGroup:
|
|
||||||
print(oColors.brightRed + "ERR: An error was encountered while fetching the server's version group." +
|
|
||||||
oColors.standardWhite)
|
|
||||||
return False
|
|
||||||
|
|
||||||
paperLatestBuild = findLatestBuild(versionGroup)
|
|
||||||
# Report an error if findLatestBuild encountered an issue.
|
|
||||||
if not paperLatestBuild:
|
|
||||||
print(oColors.brightRed + "ERR: An error was encountered while fetching the latest version of PaperMC." +
|
|
||||||
oColors.standardWhite)
|
|
||||||
return False # Not currently handled, but can be at a later date. Currently just stops the following from
|
|
||||||
# being printed.
|
|
||||||
|
|
||||||
paperVersionBehind = versionBehind(paperInstalledBuild, paperLatestBuild)
|
|
||||||
# Report an error if getInstalledPaperVersion encountered an issue.
|
|
||||||
if not paperVersionBehind:
|
|
||||||
print(oColors.brightRed + "ERR: An error was encountered while detecting how many versions behind you are. "
|
|
||||||
f"Will display as 'N/A'." + oColors.standardWhite)
|
|
||||||
paperVersionBehind = "N/A" # Sets paperVersionBehind to N/A while still letting the versionBehind check return
|
|
||||||
# False for error-handing reasons.
|
|
||||||
|
|
||||||
# Does not return false as versions behind doesn't break things. It is just helpful information.
|
|
||||||
# paperVersionBehind will just display as "N/A"
|
|
||||||
print("┌─────┬────────────────────────────────┬──────────────┬──────────────┐")
|
|
||||||
print("│ No. │ Name │ Installed V. │ Latest V. │")
|
|
||||||
print("└─────┴────────────────────────────────┴──────────────┴──────────────┘")
|
|
||||||
print(" [1]".rjust(6), end='')
|
|
||||||
print(" ", end='')
|
|
||||||
if paperVersionBehind != 0:
|
|
||||||
print(oColors.brightRed + "paper".ljust(33) + oColors.standardWhite, end='')
|
|
||||||
else:
|
|
||||||
print(oColors.brightGreen + "paper".ljust(33) + oColors.standardWhite, end='')
|
|
||||||
print(f"{paperInstalledBuild}".ljust(15), end='')
|
|
||||||
print(f"{paperLatestBuild}".ljust(15))
|
|
||||||
print(oColors.brightYellow + f"Versions behind: [{paperVersionBehind}]" + oColors.standardWhite)
|
|
||||||
|
|
||||||
|
|
||||||
# https://papermc.io/api/docs/swagger-ui/index.html?configUrl=/api/openapi/swagger-config#/
|
|
||||||
def papermc_downloader(paperBuild='latest', mcVersion=None, installedServerjarName=None):
|
|
||||||
configValues = configurationValues()
|
|
||||||
if configValues.localPluginFolder == False:
|
|
||||||
downloadPath = createTempPluginFolder()
|
|
||||||
else:
|
|
||||||
downloadPath = configValues.pathToPluginFolder
|
|
||||||
helpPath = Path('/plugins')
|
|
||||||
helpPathstr = str(helpPath)
|
|
||||||
downloadPath = Path(str(downloadPath).replace(helpPathstr, ''))
|
|
||||||
|
|
||||||
if mcVersion == None:
|
|
||||||
if paperBuild == 'latest':
|
|
||||||
mcVersion = '1.17.1'
|
|
||||||
else:
|
|
||||||
mcVersion = findBuildVersion(paperBuild)
|
|
||||||
|
|
||||||
if installedServerjarName != None:
|
|
||||||
mcVersion = getInstalledPaperMinecraftVersion(installedServerjarName)
|
|
||||||
|
|
||||||
if paperBuild == 'latest':
|
|
||||||
paperBuild = findLatestBuildForVersion(mcVersion)
|
|
||||||
try:
|
|
||||||
downloadFileName = getDownloadFileName(mcVersion, paperBuild)
|
|
||||||
except KeyError:
|
|
||||||
print(oColors.brightRed + f"This version wasn't found for {mcVersion}" + oColors.standardWhite)
|
|
||||||
print(oColors.brightRed + f"Reverting to latest version for {mcVersion}" + oColors.standardWhite)
|
|
||||||
paperBuild = findLatestBuildForVersion(mcVersion)
|
|
||||||
downloadFileName = getDownloadFileName(mcVersion, paperBuild)
|
|
||||||
|
|
||||||
downloadPackagePath = Path(f"{downloadPath}/{downloadFileName}")
|
|
||||||
if configValues.localPluginFolder == False:
|
|
||||||
downloadPath = createTempPluginFolder()
|
|
||||||
|
|
||||||
url = f"https://papermc.io/api/v2/projects/paper/versions/{mcVersion}/builds/{paperBuild}/downloads/{downloadFileName}"
|
|
||||||
remotefile = urllib.request.urlopen(url)
|
|
||||||
filesize = remotefile.info()['Content-Length']
|
|
||||||
print(f"Getting Paper {paperBuild} for {mcVersion}")
|
|
||||||
console = Console()
|
|
||||||
with console.status("Downloading...", spinner='line', spinner_style='bright_magenta') as status:
|
|
||||||
urllib.request.urlretrieve(url, downloadPackagePath)
|
|
||||||
filesizeData = calculateFileSizeMb(filesize)
|
|
||||||
print("Downloaded " + (str(filesizeData)).rjust(9) + f" MB here {downloadPackagePath}")
|
|
||||||
if not configValues.localPluginFolder:
|
|
||||||
if not configValues.sftp_useSftp:
|
|
||||||
ftpSession = createFTPConnection()
|
|
||||||
ftp_upload_server_jar(ftpSession, downloadPackagePath)
|
|
||||||
else:
|
|
||||||
sftpSession = createSFTPConnection()
|
|
||||||
sftp_upload_server_jar(sftpSession, downloadPackagePath)
|
|
||||||
|
|
||||||
deleteTempPluginFolder(downloadPath)
|
|
||||||
|
|
||||||
print(oColors.brightGreen + "Downloaded successfully " + oColors.standardWhite + f"Paper {paperBuild}" + \
|
|
||||||
oColors.brightGreen + " for " + oColors.standardWhite + f"{mcVersion}" + oColors.standardWhite)
|
|
@ -1,89 +0,0 @@
|
|||||||
from os import system
|
|
||||||
from os import name
|
|
||||||
|
|
||||||
|
|
||||||
def consoleTitle():
|
|
||||||
system("title " + "pluGET │ By Neocky")
|
|
||||||
|
|
||||||
|
|
||||||
def clearConsole():
|
|
||||||
system('cls' if name=='nt' else 'clear')
|
|
||||||
|
|
||||||
|
|
||||||
# https://docs.microsoft.com/en-us/windows/console/console-virtual-terminal-sequences
|
|
||||||
class oColors:
|
|
||||||
standardWhite = "\033[0m"
|
|
||||||
brightBlack = "\033[90m"
|
|
||||||
brightRed = "\033[91m"
|
|
||||||
brightGreen = "\033[92m"
|
|
||||||
brightYellow = "\033[93m"
|
|
||||||
brightMagenta = "\033[95m"
|
|
||||||
|
|
||||||
|
|
||||||
def printLogo():
|
|
||||||
print()
|
|
||||||
print(oColors.brightYellow + r" ___ ___ ___ ___ ___ ___ ")
|
|
||||||
print(oColors.brightMagenta + r" /\ " + oColors.brightYellow + r"\ " + oColors.brightMagenta + r"/"'\\' +
|
|
||||||
oColors.brightYellow + r"__\ " + oColors.brightMagenta + r"/"'\\' + oColors.brightYellow + r"__\ " +
|
|
||||||
oColors.brightMagenta + r"/\ "+ oColors.brightYellow + r"\ " + oColors.brightMagenta + r"/\ "+
|
|
||||||
oColors.brightYellow + r"\ " + oColors.brightMagenta + r"/\ "+ oColors.brightYellow + r""'\\ ')
|
|
||||||
print(oColors.brightMagenta + r" /::\ "+ oColors.brightYellow + r"\ " + oColors.brightMagenta + r"/:/ " +
|
|
||||||
oColors.brightYellow + r"/ " + oColors.brightMagenta + r"/:/ "+ oColors.brightYellow + r"/ " +
|
|
||||||
oColors.brightMagenta + r"/::\ "+ oColors.brightYellow + r"\ " + oColors.brightMagenta + r"/::\ "+
|
|
||||||
oColors.brightYellow + r"\ " + oColors.brightMagenta + r"\:\ "+ oColors.brightYellow + r""'\\ ')
|
|
||||||
print(oColors.brightMagenta + r" /:/\:\ "+ oColors.brightYellow + r"\ " + oColors.brightMagenta + r"/:/ "+
|
|
||||||
oColors.brightYellow + r"/ " + oColors.brightMagenta + r"/:/ "+ oColors.brightYellow + r"/ " +
|
|
||||||
oColors.brightMagenta + r"/:/\:\ "+ oColors.brightYellow + r"\ " + oColors.brightMagenta + r"/:/\:\ "+
|
|
||||||
oColors.brightYellow + r"\ " + oColors.brightMagenta + r"\:\ "+ oColors.brightYellow + r""'\\ ')
|
|
||||||
print(oColors.brightMagenta + r" /::"'\\' + oColors.brightYellow + r"~" + oColors.brightMagenta + r"\:\ "+
|
|
||||||
oColors.brightYellow + r"\ " + oColors.brightMagenta + r"/:/ "+ oColors.brightYellow + r"/ " +
|
|
||||||
oColors.brightMagenta + r"/:/ "+ oColors.brightYellow + r"/ ___ " + oColors.brightMagenta + r"/:/ \:\ "+
|
|
||||||
oColors.brightYellow + r"\ " + oColors.brightMagenta + r"/::"'\\'+ oColors.brightYellow + r"~" +
|
|
||||||
oColors.brightMagenta + r"\:\ "+ oColors.brightYellow + r"\ " + oColors.brightMagenta + r"/::\ "+
|
|
||||||
oColors.brightYellow + r""'\\')
|
|
||||||
print(oColors.brightMagenta + r" /:/\:\ \:"'\\'+ oColors.brightYellow + r"__\ " + oColors.brightMagenta + r"/:/"+
|
|
||||||
oColors.brightYellow + r"__/ " + oColors.brightMagenta + r"/:/"+ oColors.brightYellow + r"__/ " +
|
|
||||||
oColors.brightMagenta + r"/"'\\'+ oColors.brightYellow + r"__\ " + oColors.brightMagenta + r"/:/"+
|
|
||||||
oColors.brightYellow + r"__/_" + oColors.brightMagenta + r"\:"'\\'+ oColors.brightYellow + r"__\ " +
|
|
||||||
oColors.brightMagenta + r"/:/\:\ \:"'\\' + oColors.brightYellow + r"__\ " +
|
|
||||||
oColors.brightMagenta + r"/:/\:"'\\'+ oColors.brightYellow + r"__\ ")
|
|
||||||
print(oColors.brightMagenta + r" " + oColors.brightMagenta + r"\/"+ oColors.brightYellow + r"__" +
|
|
||||||
oColors.brightMagenta + r"\:\/:/"+ oColors.brightYellow + r" / " + oColors.brightMagenta + r"\:"'\\'+
|
|
||||||
oColors.brightYellow + r" \ " + oColors.brightMagenta + r"\:"'\\' + oColors.brightYellow + r" \ " +
|
|
||||||
oColors.brightMagenta + r"/:/ "+ oColors.brightYellow + r"/ " + oColors.brightMagenta + r"\:\ /\ \/" +
|
|
||||||
oColors.brightYellow + r"__/ " + oColors.brightMagenta + r"\:"'\\' + oColors.brightYellow + r"~" +
|
|
||||||
oColors.brightMagenta + r"\:\ \/" + oColors.brightYellow + r"__/ " + oColors.brightMagenta + r"/:/ \/"+
|
|
||||||
oColors.brightYellow + r"__/")
|
|
||||||
print(oColors.brightMagenta + r" \::/ "+ oColors.brightYellow + r"/ " + oColors.brightMagenta + r"\:\ "+
|
|
||||||
oColors.brightYellow + r"\ " + oColors.brightMagenta + r"\:\ /:/ "+ oColors.brightYellow + r"/ " +
|
|
||||||
oColors.brightMagenta + r"\:\ \:"'\\'+ oColors.brightYellow + r"__\ " + oColors.brightMagenta + r"\:\ \:"'\\'+
|
|
||||||
oColors.brightYellow + r"__\ " + oColors.brightMagenta + r"/:/ "+ oColors.brightYellow + r"/ ")
|
|
||||||
print(oColors.brightMagenta + r" \/"+ oColors.brightYellow + r"__/ " +
|
|
||||||
oColors.brightMagenta + r"\:\ " + oColors.brightYellow + r"\ " + oColors.brightMagenta + r"\:\/:/ "+
|
|
||||||
oColors.brightYellow + r"/ " + oColors.brightMagenta + r"\:\/:/ "+ oColors.brightYellow + r"/ " +
|
|
||||||
oColors.brightMagenta + r"\:\ \/"+ oColors.brightYellow + r"__/ " + oColors.brightMagenta + r"\/"+
|
|
||||||
oColors.brightYellow + r"__/ ")
|
|
||||||
print(oColors.brightMagenta + r" \:"'\\' + oColors.brightYellow + r"__\ " +
|
|
||||||
oColors.brightMagenta + r"\::/ " + oColors.brightYellow + r"/ " + oColors.brightMagenta + r"\::/ " +
|
|
||||||
oColors.brightYellow + r"/ " + oColors.brightMagenta + r"\:"'\\' + oColors.brightYellow + r"__\ ")
|
|
||||||
print(oColors.brightMagenta + r" \/" + oColors.brightYellow + r"__/ " +
|
|
||||||
oColors.brightMagenta + r"\/" + oColors.brightYellow + r"__/ " + oColors.brightMagenta + r"\/" +
|
|
||||||
oColors.brightYellow + r"__/ " + oColors.brightMagenta + r"\/" + oColors.brightYellow + r"__/ " +
|
|
||||||
oColors.standardWhite)
|
|
||||||
print()
|
|
||||||
print()
|
|
||||||
print(oColors.brightBlack + " ┌────────────────────────────────────┐" + oColors.standardWhite)
|
|
||||||
print(oColors.brightBlack + " │ [" + oColors.brightMagenta + "By Neocky" +oColors.brightBlack +
|
|
||||||
"] │ " + oColors.standardWhite)
|
|
||||||
print(oColors.brightBlack + " │ " + oColors.brightMagenta + "https://github.com/Neocky/pluGET" + oColors.brightBlack +
|
|
||||||
" │ " + oColors.standardWhite)
|
|
||||||
print(oColors.brightBlack + " └────────────────────────────────────┘" + oColors.standardWhite)
|
|
||||||
|
|
||||||
|
|
||||||
def printHorizontalLine():
|
|
||||||
print(" ─────────────────────────────────────────────────────────────────────────────────")
|
|
||||||
|
|
||||||
|
|
||||||
def printMainMenu():
|
|
||||||
printLogo()
|
|
||||||
printHorizontalLine()
|
|
@ -1,175 +0,0 @@
|
|||||||
# misc functions
|
|
||||||
import os
|
|
||||||
import sys
|
|
||||||
import shutil
|
|
||||||
import requests
|
|
||||||
from pathlib import Path
|
|
||||||
|
|
||||||
from utils.consoleoutput import oColors
|
|
||||||
from handlers.handle_config import configurationValues
|
|
||||||
from handlers.handle_sftp import createSFTPConnection
|
|
||||||
from handlers.handle_ftp import createFTPConnection
|
|
||||||
|
|
||||||
|
|
||||||
def getHelp():
|
|
||||||
print(oColors.brightYellow+ "Need help?" + oColors.standardWhite)
|
|
||||||
print("For a list of all commands: 'help command'")
|
|
||||||
print("Or check the docs here:")
|
|
||||||
print("https://github.com/Neocky/pluGET")
|
|
||||||
print("Or go to the official discord.")
|
|
||||||
print("The link for discord can also be found on Github!")
|
|
||||||
|
|
||||||
|
|
||||||
def getCommandHelp(optionalParams):
|
|
||||||
if optionalParams == None:
|
|
||||||
optionalParams = 'all'
|
|
||||||
print(oColors.brightBlack + f"Help for command: {optionalParams}" +oColors.standardWhite)
|
|
||||||
print("┌────────────────┬─────────────────┬─────────────────┬────────────────────────────────────────────────────────┐")
|
|
||||||
print("│ Command │ Selected Object │ Optional Params │ Function │")
|
|
||||||
print("└────────────────┴─────────────────┴─────────────────┴────────────────────────────────────────────────────────┘")
|
|
||||||
while True:
|
|
||||||
if optionalParams == 'all':
|
|
||||||
print(oColors.brightBlack + " GENERAL:" + oColors.standardWhite)
|
|
||||||
print(" exit ./anything Exit pluGET")
|
|
||||||
print(" help ./anything Get general help")
|
|
||||||
print(" help command all/command Get specific help to the commands of pluGET")
|
|
||||||
print(oColors.brightBlack + " PLUGIN MANAGEMENT:" + oColors.standardWhite)
|
|
||||||
print(" get Name/ID Version Downloads the latest version of a plugin")
|
|
||||||
print(" check Name/ID/all changelog Check for an update of an installed plugin")
|
|
||||||
print(" update Name/ID/all Update installed plugins to the latest version")
|
|
||||||
print(" search Name Search for a plugin and download the latest version")
|
|
||||||
print(" remove Name/ID Delete an installed plugin")
|
|
||||||
print(oColors.brightBlack + " SERVER SOFTWARE MANAGEMENT:" + oColors.standardWhite)
|
|
||||||
print(" check serverjar Check installed server software for an update")
|
|
||||||
print(" update serverjar Version/Latest Update installed server software to a specific version")
|
|
||||||
print(" get-paper PaperVersion McVersion Downloads a specific PaperMc version")
|
|
||||||
break
|
|
||||||
|
|
||||||
if optionalParams == 'exit':
|
|
||||||
print(oColors.brightBlack + " GENERAL:" + oColors.standardWhite)
|
|
||||||
print(" exit ./anything Exit pluGET")
|
|
||||||
break
|
|
||||||
|
|
||||||
if optionalParams == 'help':
|
|
||||||
print(oColors.brightBlack + " GENERAL:" + oColors.standardWhite)
|
|
||||||
print(" help ./anything Get general help")
|
|
||||||
print(" help command all/command Get specific help to the commands of pluGET")
|
|
||||||
break
|
|
||||||
|
|
||||||
if optionalParams == 'get':
|
|
||||||
print(oColors.brightBlack + " PLUGIN MANAGEMENT:" + oColors.standardWhite)
|
|
||||||
print(print(" get Name/ID Version Downloads the latest version of a plugin"))
|
|
||||||
break
|
|
||||||
|
|
||||||
if optionalParams == 'check':
|
|
||||||
print(oColors.brightBlack + " PLUGIN MANAGEMENT:" + oColors.standardWhite)
|
|
||||||
print(" check Name/ID/all Check for an update of an installed plugin")
|
|
||||||
print(oColors.brightBlack + " SERVER SOFTWARE MANAGEMENT:" + oColors.standardWhite)
|
|
||||||
print(" check serverjar Check installed server software for an update")
|
|
||||||
break
|
|
||||||
|
|
||||||
if optionalParams == 'update':
|
|
||||||
print(oColors.brightBlack + " PLUGIN MANAGEMENT:" + oColors.standardWhite)
|
|
||||||
print(" update Name/ID/all Update installed plugins to the latest version")
|
|
||||||
print(oColors.brightBlack + " SERVER SOFTWARE MANAGEMENT:" + oColors.standardWhite)
|
|
||||||
print(" update serverjar Version/Latest Update installed server software to a specific version")
|
|
||||||
break
|
|
||||||
|
|
||||||
if optionalParams == 'search':
|
|
||||||
print(oColors.brightBlack + " PLUGIN MANAGEMENT:" + oColors.standardWhite)
|
|
||||||
print(" search Name Search for a plugin and download the latest version")
|
|
||||||
break
|
|
||||||
|
|
||||||
if optionalParams == 'remove':
|
|
||||||
print(oColors.brightBlack + " PLUGIN MANAGEMENT:" + oColors.standardWhite)
|
|
||||||
print(" remove Name/ID Delete an installed plugin")
|
|
||||||
break
|
|
||||||
|
|
||||||
if optionalParams == 'get-paper':
|
|
||||||
print(oColors.brightBlack + " SERVER SOFTWARE MANAGEMENT:" + oColors.standardWhite)
|
|
||||||
print(" get-paper PaperVersion McVersion Downloads a specific PaperMc version")
|
|
||||||
break
|
|
||||||
|
|
||||||
else:
|
|
||||||
print(oColors.brightRed + "Error: Help for Command not found. Please try again. :(" + oColors.standardWhite)
|
|
||||||
break
|
|
||||||
|
|
||||||
|
|
||||||
def check_local_plugin_folder():
|
|
||||||
configValues = configurationValues()
|
|
||||||
if configValues.localPluginFolder:
|
|
||||||
if configValues.seperateDownloadPath:
|
|
||||||
pluginFolderPath = configValues.pathToSeperateDownloadPath
|
|
||||||
else:
|
|
||||||
pluginFolderPath = configValues.pathToPluginFolder
|
|
||||||
|
|
||||||
if not os.path.isdir(pluginFolderPath):
|
|
||||||
print(oColors.brightRed + "Plugin folder coulnd*t be found. Creating one..." + oColors.standardWhite)
|
|
||||||
try:
|
|
||||||
os.mkdir(pluginFolderPath)
|
|
||||||
except OSError:
|
|
||||||
print(oColors.brightRed + "Creation of directory %s failed" % pluginFolderPath)
|
|
||||||
print(oColors.brightRed + "Please check the config file!" + oColors.standardWhite)
|
|
||||||
input("Press any key + enter to exit...")
|
|
||||||
sys.exit()
|
|
||||||
else:
|
|
||||||
print("Created directory %s" % pluginFolderPath)
|
|
||||||
|
|
||||||
|
|
||||||
def apiTest():
|
|
||||||
apiStatusUrl = 'https://api.spiget.org/v2/status'
|
|
||||||
try:
|
|
||||||
r = requests.get(apiStatusUrl)
|
|
||||||
except (requests.exceptions.HTTPError, requests.exceptions.ConnectionError):
|
|
||||||
print(oColors.brightRed + "Couldn't make a connection to the API. Check you connection to the internet!" + oColors.standardWhite)
|
|
||||||
input("Press any key + enter to exit...")
|
|
||||||
sys.exit()
|
|
||||||
if r.status_code != 200:
|
|
||||||
print(oColors.brightRed + "Problems with the API detected. Plese try it again later!" + oColors.standardWhite)
|
|
||||||
input("Press any key + enter to exit...")
|
|
||||||
sys.exit()
|
|
||||||
|
|
||||||
|
|
||||||
def check_requirements():
|
|
||||||
configValues = configurationValues()
|
|
||||||
apiTest()
|
|
||||||
check_local_plugin_folder()
|
|
||||||
if not configValues.localPluginFolder:
|
|
||||||
if configValues.sftp_useSftp:
|
|
||||||
createSFTPConnection()
|
|
||||||
else:
|
|
||||||
createFTPConnection()
|
|
||||||
|
|
||||||
|
|
||||||
def createTempPluginFolder():
|
|
||||||
configValues = configurationValues()
|
|
||||||
tempPluginFolder = Path("./TempSFTPFolder")
|
|
||||||
if not os.path.isdir(tempPluginFolder):
|
|
||||||
try:
|
|
||||||
os.mkdir(tempPluginFolder)
|
|
||||||
except OSError:
|
|
||||||
print(oColors.brightRed + "Creation of directory %s failed" % configValues.pathToPluginFolder)
|
|
||||||
print(oColors.brightRed + "Please check the config file!" + oColors.standardWhite)
|
|
||||||
input("Press any key + enter to exit...")
|
|
||||||
sys.exit()
|
|
||||||
return tempPluginFolder
|
|
||||||
|
|
||||||
|
|
||||||
def deleteTempPluginFolder(tempPluginFolder):
|
|
||||||
try:
|
|
||||||
shutil.rmtree(tempPluginFolder)
|
|
||||||
except OSError as e:
|
|
||||||
print ("Error: %s - %s." % (e.filename, e.strerror))
|
|
||||||
|
|
||||||
|
|
||||||
def calculateFileSizeMb(downloadFileSize):
|
|
||||||
fileSizeDownload = int(downloadFileSize)
|
|
||||||
fileSizeMb = fileSizeDownload / 1024 / 1024
|
|
||||||
roundedFileSize = round(fileSizeMb, 2)
|
|
||||||
return roundedFileSize
|
|
||||||
|
|
||||||
def calculateFileSizeKb(downloadFileSize):
|
|
||||||
fileSizeDownload = int(downloadFileSize)
|
|
||||||
fileSizeKb = fileSizeDownload / 1024
|
|
||||||
roundedFileSize = round(fileSizeKb, 2)
|
|
||||||
return roundedFileSize
|
|
@ -1,9 +0,0 @@
|
|||||||
# Handles the web requests
|
|
||||||
import requests
|
|
||||||
|
|
||||||
|
|
||||||
def doAPIRequest(url):
|
|
||||||
headers = {'user-agent': 'pluGET/1.0'}
|
|
||||||
response = requests.get(url, headers=headers)
|
|
||||||
packageDetails = response.json()
|
|
||||||
return packageDetails
|
|
@ -367,7 +367,7 @@ def check_installed_plugins(input_selected_object : str="all", input_parameter :
|
|||||||
if plugins_with_udpates != 0:
|
if plugins_with_udpates != 0:
|
||||||
rich_console.print(
|
rich_console.print(
|
||||||
"[not bold][bright_yellow]Plugins with available updates: [bright_green]" +
|
"[not bold][bright_yellow]Plugins with available updates: [bright_green]" +
|
||||||
f"{plugins_with_udpates}[bright_yellow]/[bright_magenta]{plugin_count}"
|
f"{plugins_with_udpates}[bright_yellow]/[green]{plugin_count}"
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
rich_console.print(f"[bright_green]All found plugins are on the newest version!")
|
rich_console.print(f"[bright_green]All found plugins are on the newest version!")
|
||||||
@ -423,7 +423,8 @@ def update_installed_plugins(input_selected_object : str="all", no_confirmation
|
|||||||
|
|
||||||
rich_console.print(
|
rich_console.print(
|
||||||
"\n [not bold][bright_white]● [bright_magenta]" +
|
"\n [not bold][bright_white]● [bright_magenta]" +
|
||||||
f"{plugin.plugin_name} [green]{plugin.plugin_file_version} [cyan]→ [bright_green]{plugin.plugin_latest_version}"
|
f"{plugin.plugin_name} [green]{plugin.plugin_file_version}" + \
|
||||||
|
f" [cyan]→ [bright_green]{plugin.plugin_latest_version}"
|
||||||
)
|
)
|
||||||
|
|
||||||
plugins_updated += 1
|
plugins_updated += 1
|
||||||
|
Loading…
Reference in New Issue
Block a user