mirror of
https://github.com/HolographicHat/Yae.git
synced 2025-12-15 02:48:12 +08:00
update feat
This commit is contained in:
@@ -13,6 +13,8 @@ public static class GlobalVars {
|
|||||||
public static string GamePath = "";
|
public static string GamePath = "";
|
||||||
public static Version AppVersion = Assembly.GetEntryAssembly()!.GetName().Version!;
|
public static Version AppVersion = Assembly.GetEntryAssembly()!.GetName().Version!;
|
||||||
|
|
||||||
|
public const uint AppVersionCode = 77;
|
||||||
|
public const string AppVersionName = "2.?";
|
||||||
public const string LibName = "YaeLib.dll";
|
public const string LibName = "YaeLib.dll";
|
||||||
public const string PipeName = "YaeAchievementPipe";
|
public const string PipeName = "YaeAchievementPipe";
|
||||||
public const string BucketHost = "https://cn-cd-1259389942.file.myqcloud.com";
|
public const string BucketHost = "https://cn-cd-1259389942.file.myqcloud.com";
|
||||||
|
|||||||
@@ -1,5 +0,0 @@
|
|||||||
namespace YaeAchievement;
|
|
||||||
|
|
||||||
public static class Logger {
|
|
||||||
|
|
||||||
}
|
|
||||||
454
src/Proto/UpdateInfo.cs
Normal file
454
src/Proto/UpdateInfo.cs
Normal file
@@ -0,0 +1,454 @@
|
|||||||
|
// <auto-generated>
|
||||||
|
// Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||||
|
// source: UpdateInfo.proto
|
||||||
|
// </auto-generated>
|
||||||
|
#pragma warning disable 1591, 0612, 3021, 8981
|
||||||
|
#region Designer generated code
|
||||||
|
|
||||||
|
using pb = global::Google.Protobuf;
|
||||||
|
using pbc = global::Google.Protobuf.Collections;
|
||||||
|
using pbr = global::Google.Protobuf.Reflection;
|
||||||
|
using scg = global::System.Collections.Generic;
|
||||||
|
/// <summary>Holder for reflection information generated from UpdateInfo.proto</summary>
|
||||||
|
public static partial class UpdateInfoReflection {
|
||||||
|
|
||||||
|
#region Descriptor
|
||||||
|
/// <summary>File descriptor for UpdateInfo.proto</summary>
|
||||||
|
public static pbr::FileDescriptor Descriptor {
|
||||||
|
get { return descriptor; }
|
||||||
|
}
|
||||||
|
private static pbr::FileDescriptor descriptor;
|
||||||
|
|
||||||
|
static UpdateInfoReflection() {
|
||||||
|
byte[] descriptorData = global::System.Convert.FromBase64String(
|
||||||
|
string.Concat(
|
||||||
|
"ChBVcGRhdGVJbmZvLnByb3RvIqwBCgpVcGRhdGVJbmZvEhMKC3ZlcnNpb25D",
|
||||||
|
"b2RlGAEgASgNEhMKC3ZlcnNpb25OYW1lGAIgASgJEhMKC2Rlc2NyaXB0aW9u",
|
||||||
|
"GAMgASgJEhMKC3BhY2thZ2VMaW5rGAQgASgJEhMKC2ZvcmNlVXBkYXRlGAUg",
|
||||||
|
"ASgIEhkKEWVuYWJsZUxpYkRvd25sb2FkGAYgASgIEhoKEmVuYWJsZUF1dG9E",
|
||||||
|
"b3dubG9hZBgHIAEoCGIGcHJvdG8z"));
|
||||||
|
descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
|
||||||
|
new pbr::FileDescriptor[] { },
|
||||||
|
new pbr::GeneratedClrTypeInfo(null, null, new pbr::GeneratedClrTypeInfo[] {
|
||||||
|
new pbr::GeneratedClrTypeInfo(typeof(global::UpdateInfo), global::UpdateInfo.Parser, new[]{ "VersionCode", "VersionName", "Description", "PackageLink", "ForceUpdate", "EnableLibDownload", "EnableAutoDownload" }, null, null, null, null)
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
}
|
||||||
|
#region Messages
|
||||||
|
public sealed partial class UpdateInfo : pb::IMessage<UpdateInfo>
|
||||||
|
#if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
|
||||||
|
, pb::IBufferMessage
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
private static readonly pb::MessageParser<UpdateInfo> _parser = new pb::MessageParser<UpdateInfo>(() => new UpdateInfo());
|
||||||
|
private pb::UnknownFieldSet _unknownFields;
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
|
||||||
|
public static pb::MessageParser<UpdateInfo> Parser { get { return _parser; } }
|
||||||
|
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
|
||||||
|
public static pbr::MessageDescriptor Descriptor {
|
||||||
|
get { return global::UpdateInfoReflection.Descriptor.MessageTypes[0]; }
|
||||||
|
}
|
||||||
|
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
|
||||||
|
pbr::MessageDescriptor pb::IMessage.Descriptor {
|
||||||
|
get { return Descriptor; }
|
||||||
|
}
|
||||||
|
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
|
||||||
|
public UpdateInfo() {
|
||||||
|
OnConstruction();
|
||||||
|
}
|
||||||
|
|
||||||
|
partial void OnConstruction();
|
||||||
|
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
|
||||||
|
public UpdateInfo(UpdateInfo other) : this() {
|
||||||
|
versionCode_ = other.versionCode_;
|
||||||
|
versionName_ = other.versionName_;
|
||||||
|
description_ = other.description_;
|
||||||
|
packageLink_ = other.packageLink_;
|
||||||
|
forceUpdate_ = other.forceUpdate_;
|
||||||
|
enableLibDownload_ = other.enableLibDownload_;
|
||||||
|
enableAutoDownload_ = other.enableAutoDownload_;
|
||||||
|
_unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
|
||||||
|
}
|
||||||
|
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
|
||||||
|
public UpdateInfo Clone() {
|
||||||
|
return new UpdateInfo(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>Field number for the "versionCode" field.</summary>
|
||||||
|
public const int VersionCodeFieldNumber = 1;
|
||||||
|
private uint versionCode_;
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
|
||||||
|
public uint VersionCode {
|
||||||
|
get { return versionCode_; }
|
||||||
|
set {
|
||||||
|
versionCode_ = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>Field number for the "versionName" field.</summary>
|
||||||
|
public const int VersionNameFieldNumber = 2;
|
||||||
|
private string versionName_ = "";
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
|
||||||
|
public string VersionName {
|
||||||
|
get { return versionName_; }
|
||||||
|
set {
|
||||||
|
versionName_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>Field number for the "description" field.</summary>
|
||||||
|
public const int DescriptionFieldNumber = 3;
|
||||||
|
private string description_ = "";
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
|
||||||
|
public string Description {
|
||||||
|
get { return description_; }
|
||||||
|
set {
|
||||||
|
description_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>Field number for the "packageLink" field.</summary>
|
||||||
|
public const int PackageLinkFieldNumber = 4;
|
||||||
|
private string packageLink_ = "";
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
|
||||||
|
public string PackageLink {
|
||||||
|
get { return packageLink_; }
|
||||||
|
set {
|
||||||
|
packageLink_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>Field number for the "forceUpdate" field.</summary>
|
||||||
|
public const int ForceUpdateFieldNumber = 5;
|
||||||
|
private bool forceUpdate_;
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
|
||||||
|
public bool ForceUpdate {
|
||||||
|
get { return forceUpdate_; }
|
||||||
|
set {
|
||||||
|
forceUpdate_ = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>Field number for the "enableLibDownload" field.</summary>
|
||||||
|
public const int EnableLibDownloadFieldNumber = 6;
|
||||||
|
private bool enableLibDownload_;
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
|
||||||
|
public bool EnableLibDownload {
|
||||||
|
get { return enableLibDownload_; }
|
||||||
|
set {
|
||||||
|
enableLibDownload_ = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>Field number for the "enableAutoDownload" field.</summary>
|
||||||
|
public const int EnableAutoDownloadFieldNumber = 7;
|
||||||
|
private bool enableAutoDownload_;
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
|
||||||
|
public bool EnableAutoDownload {
|
||||||
|
get { return enableAutoDownload_; }
|
||||||
|
set {
|
||||||
|
enableAutoDownload_ = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
|
||||||
|
public override bool Equals(object other) {
|
||||||
|
return Equals(other as UpdateInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
|
||||||
|
public bool Equals(UpdateInfo other) {
|
||||||
|
if (ReferenceEquals(other, null)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (ReferenceEquals(other, this)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (VersionCode != other.VersionCode) return false;
|
||||||
|
if (VersionName != other.VersionName) return false;
|
||||||
|
if (Description != other.Description) return false;
|
||||||
|
if (PackageLink != other.PackageLink) return false;
|
||||||
|
if (ForceUpdate != other.ForceUpdate) return false;
|
||||||
|
if (EnableLibDownload != other.EnableLibDownload) return false;
|
||||||
|
if (EnableAutoDownload != other.EnableAutoDownload) return false;
|
||||||
|
return Equals(_unknownFields, other._unknownFields);
|
||||||
|
}
|
||||||
|
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
|
||||||
|
public override int GetHashCode() {
|
||||||
|
int hash = 1;
|
||||||
|
if (VersionCode != 0) hash ^= VersionCode.GetHashCode();
|
||||||
|
if (VersionName.Length != 0) hash ^= VersionName.GetHashCode();
|
||||||
|
if (Description.Length != 0) hash ^= Description.GetHashCode();
|
||||||
|
if (PackageLink.Length != 0) hash ^= PackageLink.GetHashCode();
|
||||||
|
if (ForceUpdate != false) hash ^= ForceUpdate.GetHashCode();
|
||||||
|
if (EnableLibDownload != false) hash ^= EnableLibDownload.GetHashCode();
|
||||||
|
if (EnableAutoDownload != false) hash ^= EnableAutoDownload.GetHashCode();
|
||||||
|
if (_unknownFields != null) {
|
||||||
|
hash ^= _unknownFields.GetHashCode();
|
||||||
|
}
|
||||||
|
return hash;
|
||||||
|
}
|
||||||
|
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
|
||||||
|
public override string ToString() {
|
||||||
|
return pb::JsonFormatter.ToDiagnosticString(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
|
||||||
|
public void WriteTo(pb::CodedOutputStream output) {
|
||||||
|
#if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
|
||||||
|
output.WriteRawMessage(this);
|
||||||
|
#else
|
||||||
|
if (VersionCode != 0) {
|
||||||
|
output.WriteRawTag(8);
|
||||||
|
output.WriteUInt32(VersionCode);
|
||||||
|
}
|
||||||
|
if (VersionName.Length != 0) {
|
||||||
|
output.WriteRawTag(18);
|
||||||
|
output.WriteString(VersionName);
|
||||||
|
}
|
||||||
|
if (Description.Length != 0) {
|
||||||
|
output.WriteRawTag(26);
|
||||||
|
output.WriteString(Description);
|
||||||
|
}
|
||||||
|
if (PackageLink.Length != 0) {
|
||||||
|
output.WriteRawTag(34);
|
||||||
|
output.WriteString(PackageLink);
|
||||||
|
}
|
||||||
|
if (ForceUpdate != false) {
|
||||||
|
output.WriteRawTag(40);
|
||||||
|
output.WriteBool(ForceUpdate);
|
||||||
|
}
|
||||||
|
if (EnableLibDownload != false) {
|
||||||
|
output.WriteRawTag(48);
|
||||||
|
output.WriteBool(EnableLibDownload);
|
||||||
|
}
|
||||||
|
if (EnableAutoDownload != false) {
|
||||||
|
output.WriteRawTag(56);
|
||||||
|
output.WriteBool(EnableAutoDownload);
|
||||||
|
}
|
||||||
|
if (_unknownFields != null) {
|
||||||
|
_unknownFields.WriteTo(output);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
|
||||||
|
void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) {
|
||||||
|
if (VersionCode != 0) {
|
||||||
|
output.WriteRawTag(8);
|
||||||
|
output.WriteUInt32(VersionCode);
|
||||||
|
}
|
||||||
|
if (VersionName.Length != 0) {
|
||||||
|
output.WriteRawTag(18);
|
||||||
|
output.WriteString(VersionName);
|
||||||
|
}
|
||||||
|
if (Description.Length != 0) {
|
||||||
|
output.WriteRawTag(26);
|
||||||
|
output.WriteString(Description);
|
||||||
|
}
|
||||||
|
if (PackageLink.Length != 0) {
|
||||||
|
output.WriteRawTag(34);
|
||||||
|
output.WriteString(PackageLink);
|
||||||
|
}
|
||||||
|
if (ForceUpdate != false) {
|
||||||
|
output.WriteRawTag(40);
|
||||||
|
output.WriteBool(ForceUpdate);
|
||||||
|
}
|
||||||
|
if (EnableLibDownload != false) {
|
||||||
|
output.WriteRawTag(48);
|
||||||
|
output.WriteBool(EnableLibDownload);
|
||||||
|
}
|
||||||
|
if (EnableAutoDownload != false) {
|
||||||
|
output.WriteRawTag(56);
|
||||||
|
output.WriteBool(EnableAutoDownload);
|
||||||
|
}
|
||||||
|
if (_unknownFields != null) {
|
||||||
|
_unknownFields.WriteTo(ref output);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
|
||||||
|
public int CalculateSize() {
|
||||||
|
int size = 0;
|
||||||
|
if (VersionCode != 0) {
|
||||||
|
size += 1 + pb::CodedOutputStream.ComputeUInt32Size(VersionCode);
|
||||||
|
}
|
||||||
|
if (VersionName.Length != 0) {
|
||||||
|
size += 1 + pb::CodedOutputStream.ComputeStringSize(VersionName);
|
||||||
|
}
|
||||||
|
if (Description.Length != 0) {
|
||||||
|
size += 1 + pb::CodedOutputStream.ComputeStringSize(Description);
|
||||||
|
}
|
||||||
|
if (PackageLink.Length != 0) {
|
||||||
|
size += 1 + pb::CodedOutputStream.ComputeStringSize(PackageLink);
|
||||||
|
}
|
||||||
|
if (ForceUpdate != false) {
|
||||||
|
size += 1 + 1;
|
||||||
|
}
|
||||||
|
if (EnableLibDownload != false) {
|
||||||
|
size += 1 + 1;
|
||||||
|
}
|
||||||
|
if (EnableAutoDownload != false) {
|
||||||
|
size += 1 + 1;
|
||||||
|
}
|
||||||
|
if (_unknownFields != null) {
|
||||||
|
size += _unknownFields.CalculateSize();
|
||||||
|
}
|
||||||
|
return size;
|
||||||
|
}
|
||||||
|
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
|
||||||
|
public void MergeFrom(UpdateInfo other) {
|
||||||
|
if (other == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (other.VersionCode != 0) {
|
||||||
|
VersionCode = other.VersionCode;
|
||||||
|
}
|
||||||
|
if (other.VersionName.Length != 0) {
|
||||||
|
VersionName = other.VersionName;
|
||||||
|
}
|
||||||
|
if (other.Description.Length != 0) {
|
||||||
|
Description = other.Description;
|
||||||
|
}
|
||||||
|
if (other.PackageLink.Length != 0) {
|
||||||
|
PackageLink = other.PackageLink;
|
||||||
|
}
|
||||||
|
if (other.ForceUpdate != false) {
|
||||||
|
ForceUpdate = other.ForceUpdate;
|
||||||
|
}
|
||||||
|
if (other.EnableLibDownload != false) {
|
||||||
|
EnableLibDownload = other.EnableLibDownload;
|
||||||
|
}
|
||||||
|
if (other.EnableAutoDownload != false) {
|
||||||
|
EnableAutoDownload = other.EnableAutoDownload;
|
||||||
|
}
|
||||||
|
_unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
|
||||||
|
}
|
||||||
|
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
|
||||||
|
public void MergeFrom(pb::CodedInputStream input) {
|
||||||
|
#if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
|
||||||
|
input.ReadRawMessage(this);
|
||||||
|
#else
|
||||||
|
uint tag;
|
||||||
|
while ((tag = input.ReadTag()) != 0) {
|
||||||
|
switch(tag) {
|
||||||
|
default:
|
||||||
|
_unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
|
||||||
|
break;
|
||||||
|
case 8: {
|
||||||
|
VersionCode = input.ReadUInt32();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 18: {
|
||||||
|
VersionName = input.ReadString();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 26: {
|
||||||
|
Description = input.ReadString();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 34: {
|
||||||
|
PackageLink = input.ReadString();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 40: {
|
||||||
|
ForceUpdate = input.ReadBool();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 48: {
|
||||||
|
EnableLibDownload = input.ReadBool();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 56: {
|
||||||
|
EnableAutoDownload = input.ReadBool();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
|
||||||
|
void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) {
|
||||||
|
uint tag;
|
||||||
|
while ((tag = input.ReadTag()) != 0) {
|
||||||
|
switch(tag) {
|
||||||
|
default:
|
||||||
|
_unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
|
||||||
|
break;
|
||||||
|
case 8: {
|
||||||
|
VersionCode = input.ReadUInt32();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 18: {
|
||||||
|
VersionName = input.ReadString();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 26: {
|
||||||
|
Description = input.ReadString();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 34: {
|
||||||
|
PackageLink = input.ReadString();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 40: {
|
||||||
|
ForceUpdate = input.ReadBool();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 48: {
|
||||||
|
EnableLibDownload = input.ReadBool();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 56: {
|
||||||
|
EnableAutoDownload = input.ReadBool();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
|
#endregion Designer generated code
|
||||||
78
src/Utils.cs
78
src/Utils.cs
@@ -29,42 +29,44 @@ public static class Utils {
|
|||||||
return c;
|
return c;
|
||||||
});
|
});
|
||||||
|
|
||||||
public static string GetBucketFileAsString(string path) {
|
public static string GetBucketFileAsString(string path, bool cache = true) {
|
||||||
return Encoding.UTF8.GetString(GetBucketFileAsByteArray(path));
|
return Encoding.UTF8.GetString(GetBucketFileAsByteArray(path, cache));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static byte[] GetBucketFileAsByteArray(string path) {
|
public static byte[] GetBucketFileAsByteArray(string path, bool cache = true) {
|
||||||
using var msg = new HttpRequestMessage {
|
using var msg = new HttpRequestMessage {
|
||||||
Method = HttpMethod.Get,
|
Method = HttpMethod.Get,
|
||||||
RequestUri = new Uri($"{GlobalVars.BucketHost}/{path}")
|
RequestUri = new Uri($"{GlobalVars.BucketHost}/{path}")
|
||||||
};
|
};
|
||||||
CacheItem? ci = null;
|
CacheItem? ci = null;
|
||||||
string? etag = null;
|
var cacheName = cache ? $"./cache/{CalculateMD5(path)[..16]}.miko" : "";
|
||||||
var cacheName = $"./cache/{CalculateMD5(path)[..16]}.miko";
|
if (cache) {
|
||||||
if (File.Exists(cacheName)) {
|
Directory.CreateDirectory("cache");
|
||||||
using var input = File.OpenRead(cacheName);
|
if (File.Exists(cacheName)) {
|
||||||
using var dInput = new GZipStream(input, CompressionMode.Decompress);
|
using var input = File.OpenRead(cacheName);
|
||||||
ci = CacheItem.Parser.ParseFrom(dInput);
|
using var dInput = new GZipStream(input, CompressionMode.Decompress);
|
||||||
etag = ci.Etag;
|
ci = CacheItem.Parser.ParseFrom(dInput);
|
||||||
}
|
msg.Headers.TryAddWithoutValidation("If-None-Match", $"{ci.Etag}");
|
||||||
if (etag != null) {
|
|
||||||
msg.Headers.TryAddWithoutValidation("If-None-Match", $"{etag}");
|
}
|
||||||
}
|
}
|
||||||
using var response = CHttpClient.Value.Send(msg);
|
using var response = CHttpClient.Value.Send(msg);
|
||||||
if (response.StatusCode == HttpStatusCode.NotModified) {
|
if (cache && response.StatusCode == HttpStatusCode.NotModified) {
|
||||||
return ci!.Content.ToByteArray();
|
return ci!.Content.ToByteArray();
|
||||||
}
|
}
|
||||||
response.EnsureSuccessStatusCode();
|
response.EnsureSuccessStatusCode();
|
||||||
etag = response.Headers.ETag!.Tag;
|
|
||||||
var responseBytes = response.Content.ReadAsByteArrayAsync().Result;
|
var responseBytes = response.Content.ReadAsByteArrayAsync().Result;
|
||||||
using var os = File.OpenWrite(cacheName);
|
if (cache) {
|
||||||
using var cos = new GZipStream(os, CompressionLevel.SmallestSize);
|
var etag = response.Headers.ETag!.Tag;
|
||||||
new CacheItem {
|
using var os = File.OpenWrite(cacheName);
|
||||||
Etag = etag,
|
using var cos = new GZipStream(os, CompressionLevel.SmallestSize);
|
||||||
Version = 3,
|
new CacheItem {
|
||||||
Checksum = CalculateMD5(responseBytes),
|
Etag = etag,
|
||||||
Content = ByteString.CopyFrom(responseBytes)
|
Version = 3,
|
||||||
}.WriteTo(cos);
|
Checksum = CalculateMD5(responseBytes),
|
||||||
|
Content = ByteString.CopyFrom(responseBytes)
|
||||||
|
}.WriteTo(cos);
|
||||||
|
}
|
||||||
return responseBytes;
|
return responseBytes;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -81,7 +83,6 @@ public static class Utils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void LoadConfig() {
|
public static void LoadConfig() {
|
||||||
Directory.CreateDirectory("cache");
|
|
||||||
var conf = JsonNode.Parse(File.ReadAllText(GlobalVars.ConfigFileName))!;
|
var conf = JsonNode.Parse(File.ReadAllText(GlobalVars.ConfigFileName))!;
|
||||||
var path = conf["genshinPath"];
|
var path = conf["genshinPath"];
|
||||||
if (path == null || CheckGamePathValid(path.GetValue<string>())) {
|
if (path == null || CheckGamePathValid(path.GetValue<string>())) {
|
||||||
@@ -93,6 +94,35 @@ public static class Utils {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void CheckUpdate() {
|
||||||
|
var info = UpdateInfo.Parser.ParseFrom(GetBucketFileAsByteArray("schicksal/version"))!;
|
||||||
|
if (GlobalVars.AppVersionCode != info.VersionCode) {
|
||||||
|
Console.WriteLine($"有可用更新: {GlobalVars.AppVersionName} => {info.VersionName}");
|
||||||
|
Console.WriteLine($"更新内容: \n{info.Description}");
|
||||||
|
if (info.EnableAutoDownload) {
|
||||||
|
Console.WriteLine("正在下载更新包...");
|
||||||
|
var fullPath = Path.GetFullPath("update.7z");
|
||||||
|
File.WriteAllBytes(fullPath, GetBucketFileAsByteArray(info.PackageLink));
|
||||||
|
Console.WriteLine("下载完毕! 关闭程序后, 将压缩包解压至当前目录即可完成更新.");
|
||||||
|
new Process {
|
||||||
|
StartInfo = {
|
||||||
|
FileName = fullPath,
|
||||||
|
UseShellExecute = true
|
||||||
|
}
|
||||||
|
}.Start();
|
||||||
|
Environment.Exit(0);
|
||||||
|
}
|
||||||
|
Console.WriteLine($"下载地址: {info.PackageLink}");
|
||||||
|
if (info.ForceUpdate) {
|
||||||
|
Console.WriteLine("在完成此次更新前, 程序可能无法正常使用.");
|
||||||
|
Environment.Exit(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (info.EnableLibDownload) {
|
||||||
|
File.WriteAllBytes("YaeLib.dll", GetBucketFileAsByteArray("schicksal/lib.dll"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private static bool CheckGamePathValid(string path) {
|
private static bool CheckGamePathValid(string path) {
|
||||||
var dir = Path.GetDirectoryName(path)!;
|
var dir = Path.GetDirectoryName(path)!;
|
||||||
return File.Exists($"{dir}/UnityPlayer.dll") && File.Exists($"{dir}/mhypbase.dll");
|
return File.Exists($"{dir}/UnityPlayer.dll") && File.Exists($"{dir}/mhypbase.dll");
|
||||||
|
|||||||
Reference in New Issue
Block a user