diff options
Diffstat (limited to 'backend/endpoints/get_plist.py')
-rw-r--r-- | backend/endpoints/get_plist.py | 86 |
1 files changed, 53 insertions, 33 deletions
diff --git a/backend/endpoints/get_plist.py b/backend/endpoints/get_plist.py index cfa56bf..6d2ca4c 100644 --- a/backend/endpoints/get_plist.py +++ b/backend/endpoints/get_plist.py @@ -7,36 +7,56 @@ import sys sys.path.append(os.path.join(os.path.dirname(__file__), "..")) from config import Config -output = dict() -output["paths"] = [] - -def find_plist(path): - with os.scandir(path) as it: - for entry in it: - if entry.name == "." or entry.name == ".." or entry.name == "Resources": - continue - if(os.DirEntry.is_dir(entry)): - find_plist(path + "/" + entry.name) - elif(entry.name == "Info.plist"): - #parse_plist(path + "/" + entry.name) - output["paths"].append(path + "/" + entry.name) - -def parse_plist(path): - with open(path, "rb") as fp: - pl = plistlib.load(fp) - print(pl["CFBundleIdentifier"]) - print(pl["CFBundleName"]) - - - -if not os.path.isdir(Config.docset_base): - e = "Invalid DOCSET_BASE \"" + Config.docset_base + "\"" - logging.error(e); - output["success"] = False - output["message"] = e - -else: - find_plist(Config.docset_base); - output["success"] = True - -print(json.dumps(output)) +class Get_Plist: + output = dict() + output["docsets"] = [] + + + def find_plist(path): + with os.scandir(path) as it: + for entry in it: + docset_root = os.path.join(path, entry.name) + plist_path = os.path.join(docset_root, "Contents", "Info.plist") + if(os.path.isfile(plist_path)): + if(Get_Plist.parse_plist(plist_path)): + Get_Plist.output["docsets"][-1]["plist_path"] = plist_path + for f in ["icon.png", "icon@2x.png"]: + if os.path.isfile(os.path.join(docset_root, f)): + Get_Plist.output["docsets"][-1][f] = os.path.join(docset_root, f) + + + def parse_plist(path): + # TODO figure out all possible fields + fields = [ + "CFBundleIdentifier", + "CFBundleName", + "DocSetPlatformFamily"] + + with open(path, "rb") as fp: + pl = plistlib.load(fp) + + if "isDashDocset" in pl and not pl["isDashDocset"]: + return False + + Get_Plist.output["docsets"].append({}) + for f in fields: + Get_Plist.output["docsets"][-1][f] = pl[f] + + return True + + + def main(): + if not os.path.isdir(Config.docset_base): + e = "Invalid DOCSET_BASE \"" + Config.docset_base + "\"" + logging.error(e); + Get_Plist.output["success"] = False + Get_Plist.output["message"] = e + + else: + Get_Plist.find_plist(Config.docset_base); + Get_Plist.output["success"] = True + + return json.dumps(Get_Plist.output) + +if __name__ == "__main__": + Get_Plist.main() |