com.typhoon.unitysdk 1.0.45 → 1.0.47
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +106 -0
- package/{Editor/doc/changelog.md.meta → CHANGELOG.md.meta} +1 -1
- package/Editor/ChangeLogCacheData.cs +54 -0
- package/Editor/ChangeLogCacheData.cs.meta +11 -0
- package/Editor/ChangelogPreviewerWindow.cs +72 -0
- package/Editor/ChangelogPreviewerWindow.cs.meta +11 -0
- package/Editor/CheckUpdate/CheckUpdateCacheData.cs +79 -0
- package/Editor/CheckUpdate/CheckUpdateCacheData.cs.meta +11 -0
- package/Editor/CheckUpdate/LatestVersionComparison.cs +20 -0
- package/Editor/CheckUpdate/LatestVersionComparison.cs.meta +11 -0
- package/Editor/CheckUpdate/PackageVersionInfo.cs +53 -0
- package/Editor/CheckUpdate/PackageVersionInfo.cs.meta +11 -0
- package/Editor/{doc.meta → CheckUpdate.meta} +1 -1
- package/Editor/GUIDrawer.cs +45 -0
- package/Editor/HistoryVersionWindow.cs +96 -0
- package/Editor/HistoryVersionWindow.cs.meta +11 -0
- package/Editor/Preferences.cs +3 -0
- package/Editor/PublishWindow.cs +123 -1
- package/Editor/UniEditor.cs +340 -3
- package/package.json +1 -1
- package/Editor/doc/changelog.md +0 -2
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# 更新日志
|
|
2
|
+
## [1.0.47] - 2023-12-10
|
|
3
|
+
|
|
4
|
+
### 其它
|
|
5
|
+
* 测试版本更新机制1
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
## [1.0.47] - 2023-12-10
|
|
9
|
+
|
|
10
|
+
### 新增
|
|
11
|
+
* 增加清空日志功能
|
|
12
|
+
|
|
13
|
+
### 修复
|
|
14
|
+
* 补充writetime到package.json
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
## [1.0.46] - 2023-12-09
|
|
18
|
+
|
|
19
|
+
### 新增
|
|
20
|
+
* 新增更新检查机制
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
## [1.0.46] - 2023-12-09
|
|
24
|
+
|
|
25
|
+
### 新增
|
|
26
|
+
* [抖音]onshow,onhide
|
|
27
|
+
* [vivo]onshow,onhide
|
|
28
|
+
* [微信]onshow,onhide
|
|
29
|
+
* 2222222
|
|
30
|
+
|
|
31
|
+
### 修复
|
|
32
|
+
* 屏蔽引力引擎ios
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
## [1.0.46] - 2023-12-09
|
|
36
|
+
|
|
37
|
+
### 新增
|
|
38
|
+
* [抖音]onshow,onhide
|
|
39
|
+
* [vivo]onshow,onhide
|
|
40
|
+
* [微信]onshow,onhide
|
|
41
|
+
* 2222222
|
|
42
|
+
|
|
43
|
+
### 修复
|
|
44
|
+
* 屏蔽引力引擎ios
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
## [1.0.46] - 2023-12-09
|
|
48
|
+
|
|
49
|
+
### 新增
|
|
50
|
+
* [抖音]onshow,onhide
|
|
51
|
+
* [vivo]onshow,onhide
|
|
52
|
+
* [微信]onshow,onhide
|
|
53
|
+
* 2222222
|
|
54
|
+
|
|
55
|
+
### 修复
|
|
56
|
+
* 屏蔽引力引擎ios
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
## [1.0.46] - 2023-12-09
|
|
60
|
+
|
|
61
|
+
### 新增
|
|
62
|
+
* [抖音]onshow,onhide
|
|
63
|
+
* [vivo]onshow,onhide
|
|
64
|
+
* [微信]onshow,onhide
|
|
65
|
+
* 2222222
|
|
66
|
+
|
|
67
|
+
### 修复
|
|
68
|
+
* 屏蔽引力引擎ios
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
## [1.0.46] - 2023-12-09
|
|
72
|
+
|
|
73
|
+
### 新增
|
|
74
|
+
* [抖音]onshow,onhide
|
|
75
|
+
* [vivo]onshow,onhide
|
|
76
|
+
* [微信]onshow,onhide
|
|
77
|
+
* 2222222
|
|
78
|
+
|
|
79
|
+
### 修复
|
|
80
|
+
* 屏蔽引力引擎ios
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
## [1.0.46] - 2023-12-09
|
|
84
|
+
|
|
85
|
+
### 新增
|
|
86
|
+
* [抖音]onshow,onhide
|
|
87
|
+
* [vivo]onshow,onhide
|
|
88
|
+
* [微信]onshow,onhide
|
|
89
|
+
* 2222222
|
|
90
|
+
|
|
91
|
+
### 修复
|
|
92
|
+
* 屏蔽引力引擎ios
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
## [1.0.46] - 2023-12-09
|
|
96
|
+
|
|
97
|
+
### 新增
|
|
98
|
+
* [抖音]onshow,onhide
|
|
99
|
+
* [vivo]onshow,onhide
|
|
100
|
+
* [微信]onshow,onhide
|
|
101
|
+
* 2222222
|
|
102
|
+
|
|
103
|
+
### 修复
|
|
104
|
+
* 屏蔽引力引擎ios
|
|
105
|
+
|
|
106
|
+
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
using System.IO;
|
|
2
|
+
using UnityEditor;
|
|
3
|
+
using UnityEngine;
|
|
4
|
+
|
|
5
|
+
namespace TyphoonUnitySDK
|
|
6
|
+
{
|
|
7
|
+
/// <summary>
|
|
8
|
+
/// 迭代日志缓存
|
|
9
|
+
/// </summary>
|
|
10
|
+
public class ChangeLogCacheData : ScriptableObject
|
|
11
|
+
{
|
|
12
|
+
private const string PATH = "Assets/Typhoon_Gen/TyphoonSDK/Editor/ChangeLogCacheData.asset";
|
|
13
|
+
public string Additions; //新增项(新增的内容)
|
|
14
|
+
public string Fixes; //修复(修复bug和一些已知问题等)
|
|
15
|
+
public string Optimizations; //优化项(指对已有功能或设计进行优化和改进的修改)
|
|
16
|
+
public string Deletions; //删除项(将某些功能或设计从产品中移除或删除的操作)
|
|
17
|
+
public string Other; //其它项(不好分类的日志信息)
|
|
18
|
+
public bool Major = false; //重大版本
|
|
19
|
+
|
|
20
|
+
private static ChangeLogCacheData _default = null;
|
|
21
|
+
|
|
22
|
+
public static ChangeLogCacheData Default
|
|
23
|
+
{
|
|
24
|
+
get
|
|
25
|
+
{
|
|
26
|
+
if (_default == null)
|
|
27
|
+
{
|
|
28
|
+
_default = AssetDatabase.LoadAssetAtPath<ChangeLogCacheData>(PATH);
|
|
29
|
+
if (_default == null)
|
|
30
|
+
{
|
|
31
|
+
_default = CreateInstance<ChangeLogCacheData>();
|
|
32
|
+
var dir = Path.GetDirectoryName(PATH);
|
|
33
|
+
if (!Directory.Exists(dir))
|
|
34
|
+
{
|
|
35
|
+
Directory.CreateDirectory(dir);
|
|
36
|
+
AssetDatabase.Refresh();
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
AssetDatabase.CreateAsset(_default, PATH);
|
|
40
|
+
AssetDatabase.Refresh();
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
return _default;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
public void Save()
|
|
49
|
+
{
|
|
50
|
+
EditorUtility.SetDirty(this);
|
|
51
|
+
AssetDatabase.SaveAssets();
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
using UnityEditor;
|
|
2
|
+
using UnityEngine;
|
|
3
|
+
|
|
4
|
+
namespace TyphoonUnitySDK
|
|
5
|
+
{
|
|
6
|
+
/// <summary>
|
|
7
|
+
/// 日志查看器
|
|
8
|
+
/// </summary>
|
|
9
|
+
public class ChangelogPreviewerWindow : EditorWindow
|
|
10
|
+
{
|
|
11
|
+
[MenuItem("TyphoonSDK/更新日志", priority = -10000)]
|
|
12
|
+
private static void Open()
|
|
13
|
+
{
|
|
14
|
+
_changelog = null;
|
|
15
|
+
var win = GetWindow<ChangelogPreviewerWindow>();
|
|
16
|
+
win.minSize = new Vector2(600, 800);
|
|
17
|
+
win.titleContent = new GUIContent("更新日志");
|
|
18
|
+
win.Show();
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
public static void Open(string changelog)
|
|
23
|
+
{
|
|
24
|
+
_changelog = changelog;
|
|
25
|
+
var win = GetWindow<ChangelogPreviewerWindow>();
|
|
26
|
+
win.minSize = new Vector2(600, 800);
|
|
27
|
+
win.titleContent = new GUIContent("更新日志");
|
|
28
|
+
win.Show();
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
private static string _changelog;
|
|
32
|
+
private static Vector2 _scroll;
|
|
33
|
+
private static GUIStyle _styleTxt;
|
|
34
|
+
|
|
35
|
+
private static GUIStyle StyleTxt
|
|
36
|
+
{
|
|
37
|
+
get
|
|
38
|
+
{
|
|
39
|
+
if (_styleTxt == null)
|
|
40
|
+
{
|
|
41
|
+
_styleTxt = new GUIStyle("label");
|
|
42
|
+
_styleTxt.richText = true;
|
|
43
|
+
_styleTxt.padding = new RectOffset(4, 4, 4, 4);
|
|
44
|
+
_styleTxt.margin = new RectOffset(4, 4, 4, 4);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
return _styleTxt;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
private string Changelog
|
|
52
|
+
{
|
|
53
|
+
get
|
|
54
|
+
{
|
|
55
|
+
if (_changelog == null)
|
|
56
|
+
{
|
|
57
|
+
var asset = AssetDatabase.LoadAssetAtPath<TextAsset>($"{UniEditor.PathRoot}/CHANGELOG.md");
|
|
58
|
+
_changelog = asset == null ? "" : asset.text;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
return _changelog;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
private void OnGUI()
|
|
66
|
+
{
|
|
67
|
+
_scroll = GUILayout.BeginScrollView(_scroll);
|
|
68
|
+
GUILayout.TextArea(Changelog, StyleTxt);
|
|
69
|
+
GUILayout.EndScrollView();
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
using System.Collections.Generic;
|
|
2
|
+
using System.IO;
|
|
3
|
+
using System.Text;
|
|
4
|
+
using UnityEditor;
|
|
5
|
+
using UnityEngine;
|
|
6
|
+
|
|
7
|
+
namespace TyphoonUnitySDK
|
|
8
|
+
{
|
|
9
|
+
/// <summary>
|
|
10
|
+
/// 检查更新缓存的数据
|
|
11
|
+
/// </summary>
|
|
12
|
+
public class CheckUpdateCacheData : ScriptableObject
|
|
13
|
+
{
|
|
14
|
+
private const string PATH = "Assets/Typhoon_Gen/TyphoonSDK/Editor/CheckUpdateCacheData.asset";
|
|
15
|
+
|
|
16
|
+
//最新数据
|
|
17
|
+
public PackageVersionInfo Latest;
|
|
18
|
+
|
|
19
|
+
//所有版本数据
|
|
20
|
+
public List<PackageVersionInfo> AllVersions = new List<PackageVersionInfo>();
|
|
21
|
+
|
|
22
|
+
private static CheckUpdateCacheData _default = null;
|
|
23
|
+
|
|
24
|
+
public static CheckUpdateCacheData Default
|
|
25
|
+
{
|
|
26
|
+
get
|
|
27
|
+
{
|
|
28
|
+
if (_default == null)
|
|
29
|
+
{
|
|
30
|
+
_default = AssetDatabase.LoadAssetAtPath<CheckUpdateCacheData>(PATH);
|
|
31
|
+
if (_default == null)
|
|
32
|
+
{
|
|
33
|
+
_default = CreateInstance<CheckUpdateCacheData>();
|
|
34
|
+
var dir = Path.GetDirectoryName(PATH);
|
|
35
|
+
if (!Directory.Exists(dir))
|
|
36
|
+
{
|
|
37
|
+
Directory.CreateDirectory(dir);
|
|
38
|
+
AssetDatabase.Refresh();
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
AssetDatabase.CreateAsset(_default, PATH);
|
|
42
|
+
AssetDatabase.Refresh();
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
return _default;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
public void Save()
|
|
51
|
+
{
|
|
52
|
+
EditorUtility.SetDirty(this);
|
|
53
|
+
AssetDatabase.SaveAssets();
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
//更新缓存
|
|
57
|
+
public void WriteCache(PackageVersionInfo latest, List<PackageVersionInfo> all)
|
|
58
|
+
{
|
|
59
|
+
Latest = latest;
|
|
60
|
+
AllVersions = all;
|
|
61
|
+
Save();
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
//组合日志
|
|
66
|
+
public string CombineChangelog()
|
|
67
|
+
{
|
|
68
|
+
var all = new List<PackageVersionInfo>(AllVersions);
|
|
69
|
+
all.Sort((a, b) => { return b.PublishTimeStamp.CompareTo(a.PublishTimeStamp); });
|
|
70
|
+
var sb = new StringBuilder();
|
|
71
|
+
foreach (var info in all)
|
|
72
|
+
{
|
|
73
|
+
sb.AppendLine(info.VersionChangeLog);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
return sb.ToString();
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
using System;
|
|
2
|
+
|
|
3
|
+
namespace TyphoonUnitySDK
|
|
4
|
+
{
|
|
5
|
+
/// <summary>
|
|
6
|
+
/// 最新版本比对信息
|
|
7
|
+
/// </summary>
|
|
8
|
+
[Serializable]
|
|
9
|
+
public class LatestVersionComparison
|
|
10
|
+
{
|
|
11
|
+
public PackageVersionInfo Current;
|
|
12
|
+
public PackageVersionInfo Latest;
|
|
13
|
+
|
|
14
|
+
public LatestVersionComparison(PackageVersionInfo current, PackageVersionInfo latest)
|
|
15
|
+
{
|
|
16
|
+
Current = current;
|
|
17
|
+
Latest = latest;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
using System;
|
|
2
|
+
|
|
3
|
+
namespace TyphoonUnitySDK
|
|
4
|
+
{
|
|
5
|
+
/// <summary>
|
|
6
|
+
/// 包版本信息
|
|
7
|
+
/// </summary>
|
|
8
|
+
[Serializable]
|
|
9
|
+
public class PackageVersionInfo
|
|
10
|
+
{
|
|
11
|
+
public string Version = ""; //版本号
|
|
12
|
+
public long WriteTimeStamp = -1; //写入时间戳
|
|
13
|
+
public string VersionChangeLog = ""; //版本更新内容
|
|
14
|
+
public bool IsMajor = false; //重大版本
|
|
15
|
+
public long PublishTimeStamp = -1; //发布时间戳
|
|
16
|
+
|
|
17
|
+
public DateTime WriteTime
|
|
18
|
+
{
|
|
19
|
+
get
|
|
20
|
+
{
|
|
21
|
+
var time = new DateTime(1970, 1, 1);
|
|
22
|
+
return time.ToLocalTime().AddMilliseconds(WriteTimeStamp);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
public string GetWriteTimeDateString() => WriteTimeStamp > 0 ? WriteTime.Date.ToLongDateString() : "";
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
public DateTime PublishTime
|
|
30
|
+
{
|
|
31
|
+
get
|
|
32
|
+
{
|
|
33
|
+
var time = new DateTime(1970, 1, 1);
|
|
34
|
+
return time.ToLocalTime().AddMilliseconds(PublishTimeStamp);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
public string GetPublishTimeDateString() =>
|
|
39
|
+
PublishTimeStamp > 0 ? PublishTime.Date.ToLongDateString() : "";
|
|
40
|
+
|
|
41
|
+
public PackageVersionInfo()
|
|
42
|
+
{
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
public PackageVersionInfo(string version, long writeTimeStamp, string versionChangeLog, bool isMajor)
|
|
46
|
+
{
|
|
47
|
+
Version = version;
|
|
48
|
+
WriteTimeStamp = writeTimeStamp;
|
|
49
|
+
VersionChangeLog = versionChangeLog;
|
|
50
|
+
IsMajor = isMajor;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
package/Editor/GUIDrawer.cs
CHANGED
|
@@ -29,6 +29,24 @@ namespace TyphoonUnitySDK
|
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
|
|
32
|
+
private static GUIStyle _styleTooltipRight = null;
|
|
33
|
+
|
|
34
|
+
private static GUIStyle StyleTooltipRight
|
|
35
|
+
{
|
|
36
|
+
get
|
|
37
|
+
{
|
|
38
|
+
if (_styleTooltipRight == null)
|
|
39
|
+
{
|
|
40
|
+
_styleTooltipRight = new GUIStyle(Styles.rlabel_italic);
|
|
41
|
+
_styleTooltipRight.normal.textColor = new Color(0.47f, 0.8f, 1f, 1f);
|
|
42
|
+
_styleTooltipRight.alignment = TextAnchor.MiddleRight;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
return _styleTooltipRight;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
|
|
32
50
|
private static GUIStyle _linkstyle = null;
|
|
33
51
|
|
|
34
52
|
private static GUIStyle LinkStyle
|
|
@@ -102,6 +120,33 @@ namespace TyphoonUnitySDK
|
|
|
102
120
|
GUILayout.TextArea(content, StyleTooltip, option);
|
|
103
121
|
}
|
|
104
122
|
|
|
123
|
+
|
|
124
|
+
/// <summary>
|
|
125
|
+
/// 绘制关键提示
|
|
126
|
+
/// </summary>
|
|
127
|
+
public static void DrawKeynotes(Rect rect, string content)
|
|
128
|
+
{
|
|
129
|
+
StyleTooltip.normal.textColor = EditorGUIUtility.isProSkin
|
|
130
|
+
? new Color(0.47f, 0.8f, 1f, 1f)
|
|
131
|
+
: new Color(0.04f, 0.31f, 0.57f, 1f);
|
|
132
|
+
StyleTooltip.richText = true;
|
|
133
|
+
GUI.TextArea(rect, content, StyleTooltip);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
/// <summary>
|
|
138
|
+
/// 绘制关键提示,靠右
|
|
139
|
+
/// </summary>
|
|
140
|
+
public static void DrawKeynotesAlignmentRight(Rect rect, string content)
|
|
141
|
+
{
|
|
142
|
+
StyleTooltipRight.normal.textColor = EditorGUIUtility.isProSkin
|
|
143
|
+
? new Color(0.47f, 0.8f, 1f, 1f)
|
|
144
|
+
: new Color(0.04f, 0.31f, 0.57f, 1f);
|
|
145
|
+
StyleTooltipRight.richText = true;
|
|
146
|
+
GUI.TextArea(rect, content, StyleTooltipRight);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
|
|
105
150
|
/// <summary>
|
|
106
151
|
/// 绘制关键提示
|
|
107
152
|
/// </summary>
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
using System.Collections.Generic;
|
|
2
|
+
using UnityEditor;
|
|
3
|
+
using UnityEngine;
|
|
4
|
+
|
|
5
|
+
namespace TyphoonUnitySDK
|
|
6
|
+
{
|
|
7
|
+
/// <summary>
|
|
8
|
+
/// 历史版本
|
|
9
|
+
/// </summary>
|
|
10
|
+
public class HistoryVersionWindow : EditorWindow
|
|
11
|
+
{
|
|
12
|
+
private static Color SelectColor =>
|
|
13
|
+
EditorGUIUtility.isProSkin ? new Color(0.21f, 0.2f, 0.21f, 1f) : new Color(0.69f, 0.7f, 0.69f, 1f);
|
|
14
|
+
|
|
15
|
+
private static Color NormalColor =>
|
|
16
|
+
EditorGUIUtility.isProSkin ? new Color(0.35f, 0.35f, 0.35f, 1f) : new Color(0.87f, 0.87f, 0.87f, 1f);
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
private const float MENU_WIDTH = 268;
|
|
20
|
+
private List<PackageVersionInfo> _history = null;
|
|
21
|
+
|
|
22
|
+
public List<PackageVersionInfo> History
|
|
23
|
+
{
|
|
24
|
+
get
|
|
25
|
+
{
|
|
26
|
+
if (_history == null)
|
|
27
|
+
{
|
|
28
|
+
_history = CheckUpdateCacheData.Default.AllVersions ?? new List<PackageVersionInfo>();
|
|
29
|
+
_history.Sort((a, b) => { return b.PublishTimeStamp.CompareTo(a.PublishTimeStamp); });
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
return _history;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
private static Vector2 _scroll;
|
|
37
|
+
private static PackageVersionInfo _select;
|
|
38
|
+
|
|
39
|
+
public static void Open()
|
|
40
|
+
{
|
|
41
|
+
var win = GetWindow<HistoryVersionWindow>();
|
|
42
|
+
win.titleContent = new GUIContent("历史版本");
|
|
43
|
+
win.minSize = new Vector2(600, 400);
|
|
44
|
+
win.Show();
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
private void OnGUI()
|
|
48
|
+
{
|
|
49
|
+
if (History.Count <= 0)
|
|
50
|
+
{
|
|
51
|
+
GUILayout.Label("读取失败,请检查更新后再重试", Styles.rbold_title);
|
|
52
|
+
}
|
|
53
|
+
else
|
|
54
|
+
{
|
|
55
|
+
var rect = new Rect(0, 0, position.width, position.height);
|
|
56
|
+
var rectLeft = rect;
|
|
57
|
+
rectLeft.width = MENU_WIDTH;
|
|
58
|
+
DrawLeftMenu(rectLeft);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
private void DrawLeftMenu(Rect rect)
|
|
63
|
+
{
|
|
64
|
+
var rectView = rect;
|
|
65
|
+
var center = rect.center;
|
|
66
|
+
rectView.width -= 8;
|
|
67
|
+
rectView.height -= 8;
|
|
68
|
+
GUILayout.BeginArea(rectView);
|
|
69
|
+
_scroll = GUILayout.BeginScrollView(_scroll);
|
|
70
|
+
|
|
71
|
+
foreach (var info in History)
|
|
72
|
+
{
|
|
73
|
+
var isSelect = _select == info;
|
|
74
|
+
DrawMenuButton(isSelect, info.Version, info.GetPublishTimeDateString());
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
GUILayout.EndScrollView();
|
|
78
|
+
GUILayout.EndArea();
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
private void DrawMenuButton(bool select, string version, string date)
|
|
83
|
+
{
|
|
84
|
+
GUILayout.Button("", Styles.rbutton, GUILayout.Height(32));
|
|
85
|
+
var rect = GUILayoutUtility.GetLastRect();
|
|
86
|
+
if (select)
|
|
87
|
+
{
|
|
88
|
+
EditorGUI.DrawRect(rect, SelectColor);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
var rectVersion = rect;
|
|
92
|
+
rectVersion.height = 22;
|
|
93
|
+
GUIDrawer.DrawKeynotes(rectVersion, $"版本 {version}");
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
package/Editor/Preferences.cs
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
using System.IO;
|
|
2
2
|
using UnityEditor;
|
|
3
3
|
using UnityEngine;
|
|
4
|
+
using UnityEngine.Serialization;
|
|
4
5
|
|
|
5
6
|
namespace TyphoonUnitySDK
|
|
6
7
|
{
|
|
@@ -35,5 +36,7 @@ namespace TyphoonUnitySDK
|
|
|
35
36
|
}
|
|
36
37
|
|
|
37
38
|
[Header("gradle目录")] public string GradlePath = string.Empty;
|
|
39
|
+
[LabelOverride("有重大更新时提醒我")] public bool CheckMajor = true;
|
|
40
|
+
[LabelOverride("自定检查更新")] public bool CheckUpdate = true;
|
|
38
41
|
}
|
|
39
42
|
}
|
package/Editor/PublishWindow.cs
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
using System;
|
|
2
1
|
using System.Collections.Generic;
|
|
3
2
|
using UnityEditor;
|
|
4
3
|
using UnityEngine;
|
|
@@ -25,6 +24,7 @@ namespace TyphoonUnitySDK
|
|
|
25
24
|
return _LockChannel.Contains(setting.Channel);
|
|
26
25
|
}
|
|
27
26
|
|
|
27
|
+
|
|
28
28
|
//获取logo
|
|
29
29
|
public Texture GetLogo(AppChannel channel)
|
|
30
30
|
{
|
|
@@ -54,12 +54,31 @@ namespace TyphoonUnitySDK
|
|
|
54
54
|
|
|
55
55
|
public const float LEFT_MENU_WITH = 238;
|
|
56
56
|
public const float MENU_ITEM_HEIGHT = 32;
|
|
57
|
+
private const float USER_INFO_HEIGHT = 70; //用户信息栏高度
|
|
58
|
+
|
|
57
59
|
public HashSet<PublishSetting> PublishSettings = new HashSet<PublishSetting>();
|
|
58
60
|
public string InputTxtSearchSetting = "";
|
|
59
61
|
private PublishSetting _select = null;
|
|
60
62
|
private Vector2 _scrollMenu;
|
|
63
|
+
|
|
61
64
|
private Vector2 _scrollContent;
|
|
62
65
|
|
|
66
|
+
//当前版本信息
|
|
67
|
+
private PackageVersionInfo _currentVersionInfo;
|
|
68
|
+
|
|
69
|
+
private PackageVersionInfo CurrentVersionInfo
|
|
70
|
+
{
|
|
71
|
+
get
|
|
72
|
+
{
|
|
73
|
+
if (_currentVersionInfo == null)
|
|
74
|
+
{
|
|
75
|
+
_currentVersionInfo = UniEditor.LoadCurrentVersionInfo();
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
return _currentVersionInfo;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
63
82
|
[MenuItem("TyphoonSDK/发布", priority = 20000)]
|
|
64
83
|
public static void Open()
|
|
65
84
|
{
|
|
@@ -67,6 +86,8 @@ namespace TyphoonUnitySDK
|
|
|
67
86
|
win.minSize = new Vector2(800, 500);
|
|
68
87
|
win.titleContent = new GUIContent("发布");
|
|
69
88
|
win.Show();
|
|
89
|
+
//自动检查新版本
|
|
90
|
+
UniEditor.AutoCheckNewVersion();
|
|
70
91
|
}
|
|
71
92
|
|
|
72
93
|
private void OnEnable()
|
|
@@ -179,6 +200,7 @@ namespace TyphoonUnitySDK
|
|
|
179
200
|
var rectPos = rectLeftMenu;
|
|
180
201
|
rectPos.y = rectSearch.yMax + 4;
|
|
181
202
|
rectPos.height = rectLeftMenu.yMax - rectPos.y;
|
|
203
|
+
rectPos.height -= USER_INFO_HEIGHT;
|
|
182
204
|
GUILayout.BeginArea(rectPos);
|
|
183
205
|
rectPos.x = 0;
|
|
184
206
|
rectPos.y = 0;
|
|
@@ -250,6 +272,106 @@ namespace TyphoonUnitySDK
|
|
|
250
272
|
}
|
|
251
273
|
|
|
252
274
|
GUILayout.EndArea();
|
|
275
|
+
|
|
276
|
+
//绘制用户信息栏
|
|
277
|
+
var rectUserInfo = rectPos;
|
|
278
|
+
rectUserInfo.height = USER_INFO_HEIGHT;
|
|
279
|
+
rectUserInfo.width = LEFT_MENU_WITH;
|
|
280
|
+
rectUserInfo.y = rect.yMax - rectUserInfo.height;
|
|
281
|
+
var line = rectUserInfo;
|
|
282
|
+
line.height = 1;
|
|
283
|
+
line.y = rectUserInfo.y - line.height;
|
|
284
|
+
var colorLine = EditorGUIUtility.isProSkin
|
|
285
|
+
? new Color(0.14f, 0.14f, 0.14f, 1f)
|
|
286
|
+
: new Color(0.6f, 0.6f, 0.6f, 1f);
|
|
287
|
+
var colorBg = EditorGUIUtility.isProSkin
|
|
288
|
+
? new Color(0.24f, 0.24f, 0.24f, 1f)
|
|
289
|
+
: new Color(0.8f, 0.8f, 0.8f, 1f);
|
|
290
|
+
EditorGUI.DrawRect(rectUserInfo, colorBg);
|
|
291
|
+
EditorGUI.DrawRect(line, colorLine);
|
|
292
|
+
DrawUserInfo(rectUserInfo);
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
private void DrawUserInfo(Rect rect)
|
|
296
|
+
{
|
|
297
|
+
var center = rect.center;
|
|
298
|
+
rect.width -= 4;
|
|
299
|
+
rect.height -= 4;
|
|
300
|
+
rect.center = center;
|
|
301
|
+
GUILayout.BeginArea(rect);
|
|
302
|
+
|
|
303
|
+
GUIDrawer.DrawKeynotes(
|
|
304
|
+
$"当前 {CurrentVersionInfo.Version} {CurrentVersionInfo.GetWriteTimeDateString()}");
|
|
305
|
+
if (CheckUpdateCacheData.Default.Latest != null)
|
|
306
|
+
{
|
|
307
|
+
GUIDrawer.DrawKeynotes(
|
|
308
|
+
$"最新 {CheckUpdateCacheData.Default.Latest.Version} {CheckUpdateCacheData.Default.Latest.GetWriteTimeDateString()}");
|
|
309
|
+
}
|
|
310
|
+
else
|
|
311
|
+
{
|
|
312
|
+
GUIDrawer.DrawKeynotes($"最新 ---");
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
GUILayout.EndArea();
|
|
316
|
+
|
|
317
|
+
|
|
318
|
+
var btnUpdateRect = rect;
|
|
319
|
+
btnUpdateRect.height = 22;
|
|
320
|
+
btnUpdateRect.width = 70;
|
|
321
|
+
btnUpdateRect.x = rect.xMax - btnUpdateRect.width;
|
|
322
|
+
center = btnUpdateRect.center;
|
|
323
|
+
var draw = btnUpdateRect;
|
|
324
|
+
draw.width -= 4;
|
|
325
|
+
draw.height -= 4;
|
|
326
|
+
draw.center = center;
|
|
327
|
+
if (GUI.Button(draw, "检查更新", Styles.rbutton))
|
|
328
|
+
{
|
|
329
|
+
UniEditor.ManualCheckNewVersion();
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
var btnHistoryRect = btnUpdateRect;
|
|
333
|
+
btnHistoryRect.y += btnHistoryRect.height;
|
|
334
|
+
center = btnHistoryRect.center;
|
|
335
|
+
draw = btnHistoryRect;
|
|
336
|
+
draw.width -= 4;
|
|
337
|
+
draw.height -= 4;
|
|
338
|
+
draw.center = center;
|
|
339
|
+
if (GUI.Button(draw, "历史版本", Styles.rbutton))
|
|
340
|
+
{
|
|
341
|
+
if (CheckUpdateCacheData.Default.AllVersions.Count < 0)
|
|
342
|
+
{
|
|
343
|
+
EditorUtility.DisplayDialog("提示", "历史版本读取失败", "是");
|
|
344
|
+
}
|
|
345
|
+
else
|
|
346
|
+
{
|
|
347
|
+
//读取所有历史版本,弹出右键菜单
|
|
348
|
+
HistoryVersionWindow.Open();
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
var btnDocRect = btnHistoryRect;
|
|
353
|
+
btnDocRect.y += btnDocRect.height;
|
|
354
|
+
center = btnDocRect.center;
|
|
355
|
+
draw = btnDocRect;
|
|
356
|
+
draw.width -= 4;
|
|
357
|
+
draw.height -= 4;
|
|
358
|
+
draw.center = center;
|
|
359
|
+
if (GUI.Button(draw, "说明文档", Styles.rbutton))
|
|
360
|
+
{
|
|
361
|
+
//读取所有历史版本,弹出右键菜单
|
|
362
|
+
UniEditor.OpenDoc();
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
// var bottomInfoRect = btnDocRect;
|
|
366
|
+
// bottomInfoRect.y += bottomInfoRect.height;
|
|
367
|
+
// bottomInfoRect.width = rect.width;
|
|
368
|
+
// bottomInfoRect.x = rect.x;
|
|
369
|
+
// center = bottomInfoRect.center;
|
|
370
|
+
// bottomInfoRect.width -= 4;
|
|
371
|
+
// bottomInfoRect.height -= 4;
|
|
372
|
+
// bottomInfoRect.center = center;
|
|
373
|
+
// GUIDrawer.DrawKeynotesAlignmentRight(bottomInfoRect,
|
|
374
|
+
// $"{CurrentVersionInfo.GetWriteTimeDateString()} v{CurrentVersionInfo.Version}");
|
|
253
375
|
}
|
|
254
376
|
|
|
255
377
|
/*绘制内容栏*/
|
package/Editor/UniEditor.cs
CHANGED
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
using System;
|
|
2
2
|
using System.Collections.Generic;
|
|
3
3
|
using System.Diagnostics;
|
|
4
|
+
using System.Globalization;
|
|
4
5
|
using System.IO;
|
|
5
6
|
using System.Linq;
|
|
7
|
+
using System.Net.Http;
|
|
6
8
|
using System.Text;
|
|
7
9
|
using System.Threading.Tasks;
|
|
8
10
|
using UnityEditor;
|
|
9
11
|
using UnityEngine;
|
|
10
|
-
using Debug = UnityEngine.Debug;
|
|
11
12
|
using AlphaDirectory = Alphaleonis.Win32.Filesystem.Directory;
|
|
13
|
+
using Debug = UnityEngine.Debug;
|
|
12
14
|
|
|
13
15
|
namespace TyphoonUnitySDK
|
|
14
16
|
{
|
|
@@ -275,7 +277,7 @@ namespace TyphoonUnitySDK
|
|
|
275
277
|
// [MenuItem("TyphoonSDK/安装拓展/Toast模块", priority = 100)]
|
|
276
278
|
public static void InstallToast()
|
|
277
279
|
{
|
|
278
|
-
AssetDatabase.ImportPackage(
|
|
280
|
+
AssetDatabase.ImportPackage(PackagePath_Toast, true);
|
|
279
281
|
}
|
|
280
282
|
|
|
281
283
|
|
|
@@ -294,6 +296,7 @@ namespace TyphoonUnitySDK
|
|
|
294
296
|
}
|
|
295
297
|
}
|
|
296
298
|
|
|
299
|
+
|
|
297
300
|
/// <summary>
|
|
298
301
|
/// 弹出二次提示窗口
|
|
299
302
|
/// </summary>
|
|
@@ -761,7 +764,7 @@ namespace TyphoonUnitySDK
|
|
|
761
764
|
}
|
|
762
765
|
|
|
763
766
|
|
|
764
|
-
[MenuItem("TyphoonSDK/打开.typhoonoutput", priority = -
|
|
767
|
+
[MenuItem("TyphoonSDK/打开.typhoonoutput", priority = -9000)]
|
|
765
768
|
public static void OpenOutPutFolder()
|
|
766
769
|
{
|
|
767
770
|
var file = $".typhoonoutput/.md";
|
|
@@ -778,5 +781,339 @@ namespace TyphoonUnitySDK
|
|
|
778
781
|
|
|
779
782
|
EditorUtility.RevealInFinder(file);
|
|
780
783
|
}
|
|
784
|
+
|
|
785
|
+
//请求最新版本信息
|
|
786
|
+
public static async Task<(PackageVersionInfo info, string state)> RequestLatestInfo()
|
|
787
|
+
{
|
|
788
|
+
//从镜像地址中检查
|
|
789
|
+
var url = "https://registry.npmmirror.com/com.typhoon.unitysdk/latest";
|
|
790
|
+
PackageVersionInfo latest = null;
|
|
791
|
+
var req = await HttpGet(url);
|
|
792
|
+
if (req.state)
|
|
793
|
+
{
|
|
794
|
+
try
|
|
795
|
+
{
|
|
796
|
+
latest = ParseToVersionInfo(req.result);
|
|
797
|
+
}
|
|
798
|
+
catch (Exception e)
|
|
799
|
+
{
|
|
800
|
+
return (latest, "fail");
|
|
801
|
+
}
|
|
802
|
+
|
|
803
|
+
return (latest, "ok");
|
|
804
|
+
}
|
|
805
|
+
else
|
|
806
|
+
{
|
|
807
|
+
//请求失败
|
|
808
|
+
return (latest, "request error");
|
|
809
|
+
}
|
|
810
|
+
}
|
|
811
|
+
|
|
812
|
+
//更新远端版本信息
|
|
813
|
+
public static async Task<bool> UpdateRemoteVersionInfos()
|
|
814
|
+
{
|
|
815
|
+
var latestResult = await RequestLatestInfo();
|
|
816
|
+
if (latestResult.state == "ok")
|
|
817
|
+
{
|
|
818
|
+
//请求成功,与本地的做对比,本地版本大于等于云端版本
|
|
819
|
+
if (CheckUpdateCacheData.Default.Latest.WriteTimeStamp >= latestResult.info.WriteTimeStamp)
|
|
820
|
+
{
|
|
821
|
+
//更新完毕
|
|
822
|
+
return true;
|
|
823
|
+
}
|
|
824
|
+
|
|
825
|
+
//有更新,继续请求所有版本信息
|
|
826
|
+
var allVersionInfo = await RequestAllVersionInfo();
|
|
827
|
+
if (allVersionInfo.state == "ok")
|
|
828
|
+
{
|
|
829
|
+
//写入缓存
|
|
830
|
+
CheckUpdateCacheData.Default.WriteCache(latestResult.info, allVersionInfo.infos);
|
|
831
|
+
return true;
|
|
832
|
+
}
|
|
833
|
+
}
|
|
834
|
+
|
|
835
|
+
return false;
|
|
836
|
+
}
|
|
837
|
+
|
|
838
|
+
//检查更新
|
|
839
|
+
public static bool CheckUpdate()
|
|
840
|
+
{
|
|
841
|
+
if (!Preferences.Default.CheckUpdate)
|
|
842
|
+
{
|
|
843
|
+
return false;
|
|
844
|
+
}
|
|
845
|
+
|
|
846
|
+
var current = LoadCurrentVersionInfo();
|
|
847
|
+
if (CheckUpdateCacheData.Default.Latest != null)
|
|
848
|
+
{
|
|
849
|
+
if (CheckUpdateCacheData.Default.Latest.WriteTimeStamp > current.WriteTimeStamp)
|
|
850
|
+
{
|
|
851
|
+
//如果大于本地版本,提示有更新
|
|
852
|
+
var click = EditorUtility.DisplayDialogComplex("提示",
|
|
853
|
+
$"发现新版本(可从选项中关闭此检查)\n版本:{CheckUpdateCacheData.Default.Latest.Version}\n日期:{CheckUpdateCacheData.Default.Latest.WriteTime.ToShortTimeString()}是否更新?",
|
|
854
|
+
"是", "否", "查看日志");
|
|
855
|
+
switch (click)
|
|
856
|
+
{
|
|
857
|
+
case 0:
|
|
858
|
+
{
|
|
859
|
+
Debug.Log("修改配置,更新插件包");
|
|
860
|
+
}
|
|
861
|
+
break;
|
|
862
|
+
case 1:
|
|
863
|
+
{
|
|
864
|
+
Debug.Log("取消更新");
|
|
865
|
+
}
|
|
866
|
+
break;
|
|
867
|
+
case 2:
|
|
868
|
+
{
|
|
869
|
+
Debug.Log("打开日志并展示");
|
|
870
|
+
ChangelogPreviewerWindow.Open(CheckUpdateCacheData.Default.CombineChangelog());
|
|
871
|
+
}
|
|
872
|
+
break;
|
|
873
|
+
}
|
|
874
|
+
|
|
875
|
+
return true;
|
|
876
|
+
}
|
|
877
|
+
}
|
|
878
|
+
|
|
879
|
+
return false;
|
|
880
|
+
}
|
|
881
|
+
|
|
882
|
+
//检查是否存在重大版本修复
|
|
883
|
+
public static bool CheckMajor()
|
|
884
|
+
{
|
|
885
|
+
if (!Preferences.Default.CheckMajor)
|
|
886
|
+
{
|
|
887
|
+
return false;
|
|
888
|
+
}
|
|
889
|
+
|
|
890
|
+
var current = LoadCurrentVersionInfo();
|
|
891
|
+
var all = CheckUpdateCacheData.Default.AllVersions;
|
|
892
|
+
all.Sort((a, b) =>
|
|
893
|
+
{
|
|
894
|
+
if (a.WriteTimeStamp == b.WriteTimeStamp && a.WriteTimeStamp < 0)
|
|
895
|
+
{
|
|
896
|
+
return String.Compare(b.Version, a.Version, StringComparison.Ordinal);
|
|
897
|
+
}
|
|
898
|
+
|
|
899
|
+
return b.WriteTimeStamp.CompareTo(a.WriteTimeStamp);
|
|
900
|
+
});
|
|
901
|
+
//提取大于本地版本的部分
|
|
902
|
+
var major = false;
|
|
903
|
+
foreach (var info in all)
|
|
904
|
+
{
|
|
905
|
+
if (info.WriteTimeStamp > current.WriteTimeStamp)
|
|
906
|
+
{
|
|
907
|
+
major |= info.IsMajor;
|
|
908
|
+
}
|
|
909
|
+
}
|
|
910
|
+
|
|
911
|
+
if (major)
|
|
912
|
+
{
|
|
913
|
+
var click = EditorUtility.DisplayDialogComplex("提示",
|
|
914
|
+
$"发现重大版本修复(可从选项中关闭此检查)\n版本:{CheckUpdateCacheData.Default.Latest.Version}\n日期:{CheckUpdateCacheData.Default.Latest.WriteTime.ToShortTimeString()}是否更新?",
|
|
915
|
+
"是", "否", "查看日志");
|
|
916
|
+
switch (click)
|
|
917
|
+
{
|
|
918
|
+
case 0:
|
|
919
|
+
{
|
|
920
|
+
Debug.Log("修改配置,更新插件包");
|
|
921
|
+
}
|
|
922
|
+
break;
|
|
923
|
+
case 1:
|
|
924
|
+
{
|
|
925
|
+
Debug.Log("取消更新");
|
|
926
|
+
}
|
|
927
|
+
break;
|
|
928
|
+
case 2:
|
|
929
|
+
{
|
|
930
|
+
Debug.Log("打开日志并展示");
|
|
931
|
+
ChangelogPreviewerWindow.Open(CheckUpdateCacheData.Default.CombineChangelog());
|
|
932
|
+
}
|
|
933
|
+
break;
|
|
934
|
+
}
|
|
935
|
+
|
|
936
|
+
return true;
|
|
937
|
+
}
|
|
938
|
+
|
|
939
|
+
return false;
|
|
940
|
+
}
|
|
941
|
+
|
|
942
|
+
//自动检查
|
|
943
|
+
public static async void AutoCheckNewVersion()
|
|
944
|
+
{
|
|
945
|
+
var flag = await UpdateRemoteVersionInfos();
|
|
946
|
+
if (flag)
|
|
947
|
+
{
|
|
948
|
+
//检查完毕
|
|
949
|
+
var popUp = CheckMajor();
|
|
950
|
+
//如果没有检查完毕
|
|
951
|
+
if (!popUp)
|
|
952
|
+
{
|
|
953
|
+
popUp = CheckUpdate();
|
|
954
|
+
}
|
|
955
|
+
}
|
|
956
|
+
}
|
|
957
|
+
|
|
958
|
+
//手动检查更新
|
|
959
|
+
public static async void ManualCheckNewVersion()
|
|
960
|
+
{
|
|
961
|
+
var flag = await UpdateRemoteVersionInfos();
|
|
962
|
+
if (flag)
|
|
963
|
+
{
|
|
964
|
+
//检查完毕
|
|
965
|
+
var popUp = CheckMajor();
|
|
966
|
+
//如果没有检查完毕
|
|
967
|
+
if (!popUp)
|
|
968
|
+
{
|
|
969
|
+
popUp = CheckUpdate();
|
|
970
|
+
}
|
|
971
|
+
|
|
972
|
+
if (!popUp)
|
|
973
|
+
{
|
|
974
|
+
EditorUtility.DisplayDialog("提示", "检查完毕,暂无发现更新", "是");
|
|
975
|
+
}
|
|
976
|
+
}
|
|
977
|
+
else
|
|
978
|
+
{
|
|
979
|
+
EditorUtility.DisplayDialog("提示", "获取新版本失败", "是");
|
|
980
|
+
}
|
|
981
|
+
}
|
|
982
|
+
|
|
983
|
+
|
|
984
|
+
//读取当前版本信息
|
|
985
|
+
public static PackageVersionInfo LoadCurrentVersionInfo()
|
|
986
|
+
{
|
|
987
|
+
string currentVersion = null; //当前版本
|
|
988
|
+
var currentWriteTime = -1L;
|
|
989
|
+
try
|
|
990
|
+
{
|
|
991
|
+
var jsonPath = $"{PathRoot}/package.json";
|
|
992
|
+
if (File.Exists(jsonPath))
|
|
993
|
+
{
|
|
994
|
+
var json = File.ReadAllText(jsonPath);
|
|
995
|
+
return ParseToVersionInfo(json);
|
|
996
|
+
}
|
|
997
|
+
}
|
|
998
|
+
catch (Exception e)
|
|
999
|
+
{
|
|
1000
|
+
}
|
|
1001
|
+
|
|
1002
|
+
return new PackageVersionInfo();
|
|
1003
|
+
}
|
|
1004
|
+
|
|
1005
|
+
//json转版本信息
|
|
1006
|
+
public static PackageVersionInfo ParseToVersionInfo(string json)
|
|
1007
|
+
{
|
|
1008
|
+
var map = json.ToXObject<Dictionary<string, object>>();
|
|
1009
|
+
var version = "";
|
|
1010
|
+
var writeTime = -1L;
|
|
1011
|
+
var changelog = "";
|
|
1012
|
+
var major = false;
|
|
1013
|
+
if (map.TryGetValue("version", out var out_version))
|
|
1014
|
+
{
|
|
1015
|
+
version = out_version.ToString();
|
|
1016
|
+
}
|
|
1017
|
+
|
|
1018
|
+
if (map.TryGetValue("write_time_stamp", out var out_write_time_stamp))
|
|
1019
|
+
{
|
|
1020
|
+
if (long.TryParse(out_write_time_stamp.ToString(), out var output))
|
|
1021
|
+
{
|
|
1022
|
+
writeTime = output;
|
|
1023
|
+
}
|
|
1024
|
+
}
|
|
1025
|
+
|
|
1026
|
+
|
|
1027
|
+
if (map.TryGetValue("version_log", out var out_version_log))
|
|
1028
|
+
{
|
|
1029
|
+
changelog = out_version_log.ToString();
|
|
1030
|
+
}
|
|
1031
|
+
|
|
1032
|
+
if (map.TryGetValue("major_flag", out var out_major_flag))
|
|
1033
|
+
{
|
|
1034
|
+
major = out_major_flag.ToString().ToLower() == "true";
|
|
1035
|
+
}
|
|
1036
|
+
|
|
1037
|
+
return new PackageVersionInfo(version, writeTime, changelog, major);
|
|
1038
|
+
}
|
|
1039
|
+
|
|
1040
|
+
//获取所有版本信息
|
|
1041
|
+
public static async Task<(List<PackageVersionInfo> infos, string state)> RequestAllVersionInfo()
|
|
1042
|
+
{
|
|
1043
|
+
var url = "https://registry.npmmirror.com/com.typhoon.unitysdk";
|
|
1044
|
+
var req = await HttpGet(url);
|
|
1045
|
+
var versionInfos = new List<PackageVersionInfo>();
|
|
1046
|
+
if (req.state)
|
|
1047
|
+
{
|
|
1048
|
+
try
|
|
1049
|
+
{
|
|
1050
|
+
var map = req.result.ToXObject<Dictionary<string, object>>();
|
|
1051
|
+
var versions = map["versions"].ToString().ToXObject<Dictionary<string, object>>();
|
|
1052
|
+
var times = map["time"].ToString().ToXObject<Dictionary<string, string>>();
|
|
1053
|
+
//解析成时间
|
|
1054
|
+
var timeMap = new Dictionary<string, DateTime>();
|
|
1055
|
+
foreach (var pair in times)
|
|
1056
|
+
{
|
|
1057
|
+
string dateTimeWithoutMilliseconds = pair.Value.Substring(0, pair.Value.IndexOf(".")) + "Z";
|
|
1058
|
+
DateTime dateTime = DateTime.ParseExact(dateTimeWithoutMilliseconds,
|
|
1059
|
+
"yyyy-MM-dd'T'HH:mm:ss'Z'",
|
|
1060
|
+
CultureInfo.InvariantCulture);
|
|
1061
|
+
timeMap[pair.Key] = dateTime;
|
|
1062
|
+
}
|
|
1063
|
+
|
|
1064
|
+
foreach (var element in versions)
|
|
1065
|
+
{
|
|
1066
|
+
var json = element.Value.ToString();
|
|
1067
|
+
var info = ParseToVersionInfo(json);
|
|
1068
|
+
if (timeMap.TryGetValue(info.Version, out var match))
|
|
1069
|
+
{
|
|
1070
|
+
//转换成时间戳
|
|
1071
|
+
info.PublishTimeStamp =
|
|
1072
|
+
(long)(match.ToUniversalTime() - (new DateTime(1970, 1, 1).ToUniversalTime()))
|
|
1073
|
+
.TotalMilliseconds;
|
|
1074
|
+
}
|
|
1075
|
+
|
|
1076
|
+
versionInfos.Add(info);
|
|
1077
|
+
}
|
|
1078
|
+
|
|
1079
|
+
return (versionInfos, "ok");
|
|
1080
|
+
}
|
|
1081
|
+
catch (Exception e)
|
|
1082
|
+
{
|
|
1083
|
+
Debug.LogError($"解析失败:{req.result} ");
|
|
1084
|
+
return (versionInfos, "parse error");
|
|
1085
|
+
}
|
|
1086
|
+
}
|
|
1087
|
+
else
|
|
1088
|
+
{
|
|
1089
|
+
return (versionInfos, "request error");
|
|
1090
|
+
}
|
|
1091
|
+
}
|
|
1092
|
+
|
|
1093
|
+
|
|
1094
|
+
public static async Task<(string result, bool state)> HttpGet(string url, float timeout = 20)
|
|
1095
|
+
{
|
|
1096
|
+
using (HttpClient client = new HttpClient())
|
|
1097
|
+
{
|
|
1098
|
+
client.Timeout = TimeSpan.FromSeconds(timeout);
|
|
1099
|
+
try
|
|
1100
|
+
{
|
|
1101
|
+
HttpResponseMessage response = await client.GetAsync(url);
|
|
1102
|
+
|
|
1103
|
+
response.EnsureSuccessStatusCode();
|
|
1104
|
+
string content = await response.Content.ReadAsStringAsync();
|
|
1105
|
+
if (response.IsSuccessStatusCode)
|
|
1106
|
+
{
|
|
1107
|
+
return (content, true);
|
|
1108
|
+
}
|
|
1109
|
+
|
|
1110
|
+
return (content, false);
|
|
1111
|
+
}
|
|
1112
|
+
catch (HttpRequestException e)
|
|
1113
|
+
{
|
|
1114
|
+
return (e.ToString(), false);
|
|
1115
|
+
}
|
|
1116
|
+
}
|
|
1117
|
+
}
|
|
781
1118
|
}
|
|
782
1119
|
}
|
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"com.typhoon.unitysdk","displayName":"typhoon unity sdk","version":"1.0.
|
|
1
|
+
{"name":"com.typhoon.unitysdk","displayName":"typhoon unity sdk","version":"1.0.47","description":"","unity":"2018.1","type":"tool","hideInEditor":false,"author":{"name":"Jan Zhang","email":"","url":""},"changelogUrl":"","documentationUrl":"","keywords":["typhoon"],"license":"","licensesUrl":"","customDependencies":[{"PackageName":"com.unity.nuget.newtonsoft-json","Value":"2.0.0"}],"version_log":"## [1.0.47] - 2023-12-10\r\n\r\n### 其它\n* 测试版本更新机制1\r\n\r\n","major_flag":false,"write_time_stamp":1702179502000,"others":{"items":[]},"dependencies":{"com.unity.nuget.newtonsoft-json":"2.0.0"}}
|
package/Editor/doc/changelog.md
DELETED