This repository has been archived on 2025-03-14. You can view files and clone it, but cannot push or open issues or pull requests.
SFIS/server/pm.py
2022-04-26 16:53:05 +08:00

70 lines
2.8 KiB
Python

from struct import pack
from lib import *
"The Package Manager of SFIS"
def install(package_name, package_version="latest", package_source="https://store.sfis.imwangzhiyu.ga/"):
Path.mkdir("tmp")
os.chdir("tmp")
print("Install " + package_name)
if package_version == "latest":
print("Using latest version")
print("Get: latest.json")
latest = File.json2dict(Net.get(package_source + "latest.json"))
package_version = latest[package_name]
print("Auto Currect: the latest version is " + package_version)
name = str(package_name) + "_" + str(package_version) + ".sap"
link = package_source + name
print("Download: " + link + " (" + "size:" + Net.size(link) + ")")
time.sleep(0.5)
File.rewrite(name, Net.get(link))
os.chdir("..")
os.chdir("addons")
print("Unpacking: " + name)
Path.rm(package_name)
os.mkdir(package_name)
os.chdir(package_name)
File.untar("../../tmp/" + name, ".") # .sap file is .tar file
os.chdir("..")
print("Setting up: " + package_name + " " + package_version)
print("Add to package database")
db_data = File.json2dict(File.read("addons.json"))
db_data[package_name] = package_version
File.rewrite("addons.json", File.dict2json(db_data))
os.chdir("..")
print("Addon [" + package_name + "] has completely installed!")
def remove(package_name):
os.chdir("addons")
if os.path.exists(package_name):
print("Remove: " + package_name)
print("Deleting files")
Path.rm(package_name)
print("Setting up: " + package_name)
print("Remove from database")
db_data = File.json2dict(File.read("addons.json"))
db_data.pop(package_name)
File.rewrite("addons.json", File.dict2json(db_data))
print("Addon [" + package_name + "] has completely removed!")
else:
print("Can not find the target")
def list(mode="offline", source="https://store.sfis.imwangzhiyu.ga"):
print("List: " + mode)
if mode == "online":
try:
global source_status
if source == "https://store.sfis.imwangzhiyu.ga":
source_status = "Official"
else:
source_status = "Three-party"
print("Get: latest.list" + " from " + source + " (" + source_status + ")")
source_list = File.json2dict(Net.get(source + "/latest.json"))
for one in source_list:
print(one + " v" + source_list[one])
except:
print("E: Network Error")
else:
print("Reading local database")
source_list = File.json2dict(File.read("./addons/addons.json"))
for one in source_list:
print(one + " v" + source_list[one])
def _info(addon_name): #TODO
pass
print("Developing")