feat: ship 1.0.8.0 release automation and runtime overhaul

- reduce ASAR IO overhead with streamed archive reads, buffered copies, faster relative-path handling and placeholder integrity records
- fix in-place app.asar.unpacked packing/extraction self-copy cases that caused locked-file failures
- tighten JS patch discovery with candidate bundle filters and search hints
- require prebuilt remote-panel dist artifacts and clean up embedded bridge/script packaging
- add unified build entrypoints for PowerShell, cmd and bash and move native CMake output under .tmp
- add release metadata validation, changelog section extraction, pre-commit hook and GitHub Actions validation/release pipelines
- make CHANGELOG the source of truth for release notes and document the tag-driven release flow
- add updater release notes UI with latest/full changelog loading and localize the new update strings
- modularize bridge renderer scripts, add installed apps and game status sync, and support remote launch/stop commands
- centralize bridge protocol, IPC and WebSocket constants and improve LAN IP selection for QR pairing
- refactor remote panel controls/state enums, persist accent color, polish library/session UI and refresh assets
This commit is contained in:
kitbyte
2026-05-04 22:59:33 +03:00
parent 3b2f373946
commit 13759b1db6
125 changed files with 8934 additions and 2839 deletions
+29 -20
View File
@@ -1,4 +1,4 @@
using System;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
@@ -28,32 +28,37 @@ namespace AsarSharp.AsarFileSystem
public static class FileSystemCrawler
{
public static CrawledFileType DetermineFileType(string filename)
{
var fileInfo = new FileInfo(filename);
if (fileInfo.Exists)
FileAttributes attributes;
try
{
return new CrawledFileType { Type = FileType.File, Stat = fileInfo };
attributes = File.GetAttributes(filename);
}
var directoryInfo = new DirectoryInfo(filename);
if (directoryInfo.Exists)
catch (Exception ex) when (ex is IOException || ex is UnauthorizedAccessException)
{
return new CrawledFileType { Type = FileType.Directory, Stat = directoryInfo };
return null;
}
var linkInfo = new FileInfo(filename);
if (linkInfo.Exists && (linkInfo.Attributes & FileAttributes.ReparsePoint) == FileAttributes.ReparsePoint)
bool isDirectory = (attributes & FileAttributes.Directory) == FileAttributes.Directory;
bool isLink = (attributes & FileAttributes.ReparsePoint) == FileAttributes.ReparsePoint;
FileSystemInfo info = isDirectory
? (FileSystemInfo)new DirectoryInfo(filename)
: new FileInfo(filename);
if (isLink)
{
return new CrawledFileType { Type = FileType.Link, Stat = linkInfo };
return new CrawledFileType { Type = FileType.Link, Stat = info };
}
return null;
if (isDirectory)
{
return new CrawledFileType { Type = FileType.Directory, Stat = info };
}
return new CrawledFileType { Type = FileType.File, Stat = info };
}
public static (List<string> filenames, Dictionary<string, CrawledFileType> metadata) CrawlFileSystem(string dir)
{
var metadata = new Dictionary<string, CrawledFileType>();
@@ -73,7 +78,12 @@ namespace AsarSharp.AsarFileSystem
filenames.Add(result.filename);
}
var filteredFilenames = new List<string>();
if (links.Count == 0)
{
return (filenames, metadata);
}
var filteredFilenames = new List<string>(filenames.Count);
foreach (var filename in filenames)
{
@@ -107,7 +117,6 @@ namespace AsarSharp.AsarFileSystem
return (filteredFilenames, metadata);
}
// (File order is not important!!!)
public static List<string> CrawlIterative(string dir)
{