feat: initial commit for G-Launcher based on Firefly with Horoyoi enhancements
This commit is contained in:
commit
a99470a69f
155 files changed
+19061
No files matched your search
@@ -0,0 +1,61 @@
|
||||
package models
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"os"
|
||||
"regexp"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
type BinaryVersion struct {
|
||||
Name string
|
||||
Major int
|
||||
Minor int
|
||||
Patch int
|
||||
Data []byte
|
||||
}
|
||||
|
||||
func ParseBinaryVersion(path string) (*BinaryVersion, error) {
|
||||
data, err := os.ReadFile(path)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
content := string(data)
|
||||
fmt.Println(content)
|
||||
|
||||
re := regexp.MustCompile(`([A-Za-z]+)(\d+)(?:\.(\d+))?(?:\.(\d+))?`)
|
||||
matches := re.FindStringSubmatch(content)
|
||||
if len(matches) < 2 {
|
||||
return nil, errors.New("invalid version format")
|
||||
}
|
||||
|
||||
binaryVersion := BinaryVersion{
|
||||
Name: matches[1],
|
||||
}
|
||||
if matches[2] != "" {
|
||||
binaryVersion.Major, _ = strconv.Atoi(matches[2])
|
||||
}
|
||||
if len(matches) > 3 && matches[3] != "" {
|
||||
binaryVersion.Minor, _ = strconv.Atoi(matches[3])
|
||||
}
|
||||
if len(matches) > 4 && matches[4] != "" {
|
||||
binaryVersion.Patch, _ = strconv.Atoi(matches[4])
|
||||
}
|
||||
|
||||
binaryVersion.Data = data
|
||||
return &binaryVersion, nil
|
||||
}
|
||||
|
||||
func (v *BinaryVersion) String() string {
|
||||
return fmt.Sprintf("%s-%d.%d.%d", v.Name, v.Major, v.Minor, v.Patch)
|
||||
}
|
||||
|
||||
func (v BinaryVersion) ToInt() int {
|
||||
return v.Major*100 + v.Minor*10 + v.Patch
|
||||
}
|
||||
|
||||
func (v BinaryVersion) Subtract(other *BinaryVersion) int {
|
||||
return v.ToInt() - other.ToInt()
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
package models
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"os"
|
||||
)
|
||||
|
||||
type HDiffFiles struct {
|
||||
RemoteFile string `json:"remoteName"`
|
||||
}
|
||||
func (h *HDiffFiles) ToHDiffData() *HDiffData {
|
||||
return &HDiffData{
|
||||
SourceFileName: h.RemoteFile,
|
||||
TargetFileName: h.RemoteFile,
|
||||
PatchFileName: fmt.Sprintf("%s.hdiff", h.RemoteFile),
|
||||
}
|
||||
}
|
||||
|
||||
func LoadHDiffFiles(path string) ([]*HDiffFiles, error) {
|
||||
file, err := os.Open(path)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
var results []*HDiffFiles
|
||||
scanner := bufio.NewScanner(file)
|
||||
for scanner.Scan() {
|
||||
line := scanner.Text()
|
||||
var item HDiffFiles
|
||||
if err := json.Unmarshal([]byte(line), &item); err == nil {
|
||||
results = append(results, &item)
|
||||
}
|
||||
}
|
||||
|
||||
if err := scanner.Err(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return results, nil
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
package models
|
||||
|
||||
type DiffMapType struct {
|
||||
SourceFileName string `json:"source_file_name"`
|
||||
SourceFileMD5 string `json:"source_file_md5"`
|
||||
SourceFileSize int64 `json:"source_file_size"`
|
||||
|
||||
TargetFileName string `json:"target_file_name"`
|
||||
TargetFileMD5 string `json:"target_file_md5"`
|
||||
TargetFileSize int64 `json:"target_file_size"`
|
||||
|
||||
PatchFileName string `json:"patch_file_name"`
|
||||
PatchFileMD5 string `json:"patch_file_md5"`
|
||||
PatchFileSize int64 `json:"patch_file_size"`
|
||||
}
|
||||
|
||||
type HDiffData struct {
|
||||
SourceFileName string `json:"source_file_name"`
|
||||
TargetFileName string `json:"target_file_name"`
|
||||
PatchFileName string `json:"patch_file_name"`
|
||||
}
|
||||
|
||||
func (d *DiffMapType) ToHDiffData() *HDiffData {
|
||||
return &HDiffData{
|
||||
SourceFileName: d.SourceFileName,
|
||||
TargetFileName: d.TargetFileName,
|
||||
PatchFileName: d.PatchFileName,
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
package models
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"encoding/json"
|
||||
"os"
|
||||
)
|
||||
|
||||
type PkgVersion struct {
|
||||
RemoteFile string `json:"remoteName"`
|
||||
MD5 string `json:"md5"`
|
||||
}
|
||||
|
||||
func LoadPkgVersion(path string) ([]*PkgVersion, error) {
|
||||
file, err := os.Open(path)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
var results []*PkgVersion
|
||||
scanner := bufio.NewScanner(file)
|
||||
for scanner.Scan() {
|
||||
line := scanner.Text()
|
||||
var item PkgVersion
|
||||
if err := json.Unmarshal([]byte(line), &item); err == nil {
|
||||
results = append(results, &item)
|
||||
}
|
||||
}
|
||||
|
||||
if err := scanner.Err(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return results, nil
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
package models
|
||||
|
||||
type ReleaseType struct {
|
||||
ID int `json:"id"`
|
||||
TagName string `json:"tag_name"`
|
||||
TargetCommitish string `json:"target_commitish"`
|
||||
Name string `json:"name"`
|
||||
Body string `json:"body"`
|
||||
URL string `json:"url"`
|
||||
HTMLURL string `json:"html_url"`
|
||||
TarballURL string `json:"tarball_url"`
|
||||
ZipballURL string `json:"zipball_url"`
|
||||
UploadURL string `json:"upload_url"`
|
||||
Draft bool `json:"draft"`
|
||||
Prerelease bool `json:"prerelease"`
|
||||
CreatedAt string `json:"created_at"`
|
||||
PublishedAt string `json:"published_at"`
|
||||
Author AuthorType `json:"author"`
|
||||
Assets []AssetType `json:"assets"`
|
||||
}
|
||||
|
||||
type AuthorType struct {
|
||||
ID int `json:"id"`
|
||||
Login string `json:"login"`
|
||||
LoginName string `json:"login_name"`
|
||||
SourceID int `json:"source_id"`
|
||||
FullName string `json:"full_name"`
|
||||
Email string `json:"email"`
|
||||
AvatarURL string `json:"avatar_url"`
|
||||
HTMLURL string `json:"html_url"`
|
||||
Language string `json:"language"`
|
||||
IsAdmin bool `json:"is_admin"`
|
||||
LastLogin string `json:"last_login"`
|
||||
Created string `json:"created"`
|
||||
Restricted bool `json:"restricted"`
|
||||
Active bool `json:"active"`
|
||||
ProhibitLogin bool `json:"prohibit_login"`
|
||||
Location string `json:"location"`
|
||||
Website string `json:"website"`
|
||||
Description string `json:"description"`
|
||||
Visibility string `json:"visibility"`
|
||||
FollowersCount int `json:"followers_count"`
|
||||
FollowingCount int `json:"following_count"`
|
||||
StarredReposCount int `json:"starred_repos_count"`
|
||||
Username string `json:"username"`
|
||||
}
|
||||
|
||||
type AssetType struct {
|
||||
ID int `json:"id"`
|
||||
Name string `json:"name"`
|
||||
Size int `json:"size"`
|
||||
DownloadCount int `json:"download_count"`
|
||||
CreatedAt string `json:"created_at"`
|
||||
UUID string `json:"uuid"`
|
||||
BrowserDownloadURL string `json:"browser_download_url"`
|
||||
}
|
||||
Reference in new issue
Block a user