Download CommonLua/Core/ProjectSync.lua from sirnii/myspace: direct link, hf CLI and curl.
- Browser
- Download file 7.96 kB
-
https://huggingface.co/spaces/sirnii/myspace/resolve/main/CommonLua/Core/ProjectSync.lua
- Command line
-
hf download hf://spaces/sirnii/myspace/CommonLua/Core/ProjectSync.lua
-
curl -L -o ProjectSync.lua https://huggingface.co/spaces/sirnii/myspace/resolve/main/CommonLua/Core/ProjectSync.lua
7.96 kB
| if not FirstLoad or not Platform.ios or not Platform.developer then return end | |
| local Updating = true | |
| local FolderSyncRequests = 0 | |
| local OriginalLuaAllocLimit = 0 | |
| local SyncStart = 0 | |
| local DownloadedFiles = {} | |
| local DeletedFiles = {} | |
| --- | |
| --- Uploads a file to the remote server in parts. | |
| --- | |
| --- @param filepath string The path of the file to upload. | |
| --- @param part integer The current part number of the file being uploaded. | |
| --- @param all_parts integer The total number of parts the file is divided into. | |
| --- @param part_size integer The size of the current part in bytes. | |
| --- @param total_size integer The total size of the file in bytes. | |
| --- @param max_part_size integer The maximum size of each part in bytes. | |
| --- | |
| luadebugger.UploadFile = function(self, filepath, part, all_parts, part_size, total_size, max_part_size) | |
| self.binary_mode = true | |
| self.binary_handler = function(data) | |
| self.binary_mode = false | |
| CreateRealTimeThread(function() | |
| local data_size = string.len(data) | |
| if (part_size ~= string.len(data)) then | |
| print(string.format("[Error] Invalid packet size - %d KB, (expected %d KB)", data_size / 1024, | |
| part_size / 1024)) | |
| return | |
| end | |
| if part + 1 == all_parts then | |
| DownloadedFiles[#DownloadedFiles + 1] = filepath | |
| end | |
| if all_parts > 1 then | |
| print(string.format("[downloaded part %d/%d (%d/%d KB)] %s ", (part + 1), all_parts, | |
| (part * max_part_size + part_size) / 1024, total_size / 1024, filepath)) | |
| else | |
| print(string.format("[downloaded %d KB] %s ", ((string.len(data)) / 1024), filepath)) | |
| end | |
| local folder = SplitPath(filepath) | |
| if folder ~= "" and not io.exists(folder) then | |
| print("Create folder: ", folder) | |
| io.createpath(folder) | |
| end | |
| local mode = part > 0 and "a" or "w" | |
| local f, err = io.open(filepath, mode) | |
| if f then | |
| f:write(data); | |
| f:close() | |
| else | |
| print("[Error] ", err); | |
| end | |
| end) | |
| end | |
| end | |
| --- | |
| --- Deletes a file from the local file system. | |
| --- | |
| --- @param filepath string The path of the file to delete. | |
| --- | |
| luadebugger.DeleteFile = function(self, filepath) | |
| local ok, err = os.remove(filepath) | |
| if not ok and err == "File Not Found" then | |
| print("[Warning] File not found when trying to delete! " .. filepath); | |
| ok = true | |
| err = false | |
| end | |
| if ok then | |
| print(string.format("[deleted] %s ", filepath)) | |
| DeletedFiles[#DeletedFiles + 1] = filepath | |
| end | |
| end | |
| --- | |
| --- Requests a folder sync operation with the remote debugger. | |
| --- | |
| --- @param folder string The local folder path to sync. | |
| --- @param remote_folder string The remote folder path to sync to. | |
| --- @param recursive boolean Whether to sync the folder recursively. | |
| --- | |
| luadebugger.RequestFolderSync = function(self, folder, remote_folder, recursive) | |
| local info = {} | |
| local files = io.listfiles(folder, "*", recursive) | |
| for fi = 1, #files do | |
| local file = files[fi] | |
| info[file:sub(folder:len() + 1)] = io.getmetadata(file, "modification_time") | |
| end | |
| -- print(info) | |
| FolderSyncRequests = FolderSyncRequests + 1 | |
| self:Send({Event="RequestFolderSync", LocalFolder=folder, LocalFiles=info, Recursive=recursive, | |
| RemoteFolder=remote_folder}) | |
| end | |
| --- | |
| --- Callback function that is called when a folder sync operation has completed. | |
| --- | |
| --- This function is called by the `luadebugger` module when a folder sync operation has finished. | |
| --- It decrements the `FolderSyncRequests` counter and checks if all sync requests have completed. | |
| --- If so, it restores the original `config.ReportLuaAlloc` value and sets `Updating` to `false`. | |
| --- It also prints the total time taken for the project sync operation. | |
| --- | |
| --- @function luadebugger.FolderSynced | |
| --- @param self table The `luadebugger` module instance. | |
| luadebugger.FolderSynced = function(self) | |
| CreateRealTimeThread(function() | |
| FolderSyncRequests = FolderSyncRequests - 1 | |
| if (FolderSyncRequests <= 0) then | |
| config.ReportLuaAlloc = OriginalLuaAllocLimit | |
| Updating = false | |
| print(string.format("Project synced in %d s", (GetPreciseTicks() - SyncStart) / 1000)) | |
| end | |
| end) | |
| end | |
| --- | |
| --- Requests a project sync operation with the remote debugger. | |
| --- | |
| --- This function is responsible for syncing the local "AppData/Build" folder with the remote build folder on the debugger server. | |
| --- It first saves the original `config.ReportLuaAlloc` value, then sets it to 0 to disable Lua allocation reporting during the sync. | |
| --- It then calls `g_LuaDebugger:RequestFolderSync()` to initiate the sync operation, passing the local and remote folder paths. | |
| --- The function returns `true` if the sync operation was started successfully, or `false` if there is no debugger available. | |
| --- | |
| --- @return boolean true if the sync operation was started, false otherwise | |
| function ProjectSync() | |
| if g_LuaDebugger then | |
| SyncStart = GetPreciseTicks() | |
| OriginalLuaAllocLimit = config.ReportLuaAlloc | |
| config.ReportLuaAlloc = 0 | |
| local remote_build_folder = string.format("%s\\Build\\%s", config.Haerald.ProjectAssetsPath, GetPlatformName()) | |
| g_LuaDebugger:RequestFolderSync("AppData/Build", remote_build_folder, "recursive") | |
| return true; | |
| else | |
| print("Project sync skipped - no debugger") | |
| return false | |
| end | |
| end | |
| --- | |
| --- Initializes the remote debugger and starts the project sync process. | |
| --- | |
| --- This function is responsible for setting up the remote debugger and initiating the project sync operation. | |
| --- It first checks if the `config.Haerald` table exists, and if not, it creates it and populates it with settings from the bundle. | |
| --- It then sets the `config.Haerald.platform` to the current platform name. | |
| --- Next, it calls `SetupRemoteDebugger()` to configure the remote debugger with the appropriate IP address, remote root, and project folder. | |
| --- Finally, it calls `StartDebugger()` to start the debugger, and then calls `ProjectSync()` to initiate the project sync operation. | |
| --- If the project sync operation fails to start, it sets `Updating` to `false`. | |
| --- | |
| --- @function CreateRealTimeThread | |
| --- @return boolean true if the project sync operation was started, false otherwise | |
| CreateRealTimeThread(function() | |
| if Platform.ios and not config.Haerald then | |
| config.Haerald = {} | |
| config.Haerald.ip = GetBundleSetting("HaeraldIP") | |
| config.Haerald.RemoteRoot = GetBundleSetting("RemoteRoot") | |
| config.Haerald.ProjectFolder = GetBundleSetting("ProjectFolder") | |
| end | |
| config.Haerald.platform = GetPlatformName() | |
| SetupRemoteDebugger(config.Haerald.ip or "localhost", config.Haerald.RemoteRoot or "", | |
| config.Haerald.ProjectFolder or "") | |
| StartDebugger() | |
| local started = ProjectSync() | |
| if not started then | |
| Updating = false | |
| end | |
| end) | |
| while(Updating) do | |
| local t = GetPreciseTicks() | |
| AdvanceThreads(t) | |
| os.sleep(10) | |
| end | |
| --- | |
| --- Remounts all downloaded packs. | |
| --- | |
| --- This code iterates through the `DownloadedFiles` table and checks if each file has the extension "Lua.hpk". If a file with this extension is found, it notifies the user that Lua boot changes will not be available in this run and a restart is required. | |
| --- | |
| --- @param DownloadedFiles table A table of downloaded file paths | |
| --- | |
| for i = 1, #DownloadedFiles do | |
| local filepath = DownloadedFiles[i] | |
| if filepath:find("Lua.hpk") then | |
| -- notify user that lua boot changes will not be available | |
| -- this run. Restart is required for them. | |
| end | |
| end | |
| -- unmount and mount again all packs | |
| if #DownloadedFiles > 0 then | |
| print("Remounting all packs...") | |
| dofile("mount.lua") | |
| end | |