Skip to content

Commit 3af155b

Browse files
authored
Merge pull request #29 from tsgcpp/feature/revise_editor
fix: Fix to get all collections from StringTableCollectionBundle
2 parents da4a47b + 134c9f9 commit 3af155b

File tree

18 files changed

+201
-45
lines changed

18 files changed

+201
-45
lines changed

Assets/Plugins/LocalizationExtension/Editor/AssetTool/AssetFinding.cs

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,16 @@ namespace Tsgcpp.Localization.Extension.Editor
88
{
99
public static class AssetFinding
1010
{
11-
public static IReadOnlyList<T> FindAssetsInFolders<T>(IReadOnlyList<DefaultAsset> folders) where T : UnityEngine.Object
11+
public static IReadOnlyList<T> FindAssets<T>(DefaultAsset folder) where T : UnityEngine.Object
12+
{
13+
return FindAssets<T>(new List<DefaultAsset> { folder });
14+
}
15+
16+
public static IReadOnlyList<T> FindAssets<T>(IReadOnlyList<DefaultAsset> folders) where T : UnityEngine.Object
1217
{
1318
if (folders == null)
1419
{
15-
throw new NullReferenceException("folders is null.");
20+
return new List<T>();
1621
}
1722

1823
var folderPathList = folders
@@ -22,10 +27,14 @@ public static IReadOnlyList<T> FindAssetsInFolders<T>(IReadOnlyList<DefaultAsset
2227
.Where(path => Directory.Exists(path))
2328
.ToList();
2429

30+
if (folderPathList.Count <= 0)
31+
{
32+
return new List<T>();
33+
}
34+
2535
var assets = AssetDatabase
26-
.FindAssets($"t:{typeof(T).Name}")
36+
.FindAssets($"t:{typeof(T).Name}", searchInFolders: folderPathList.ToArray())
2737
.Select(AssetDatabase.GUIDToAssetPath)
28-
.Where(path => folderPathList.Any(folderPath => path.StartsWith(folderPath)))
2938
.OrderBy(path => path)
3039
.Distinct()
3140
.Select(AssetDatabase.LoadAssetAtPath<T>)

Assets/Plugins/LocalizationExtension/Editor/Google/StringTableCollection/StringTableCollectionBundle.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public sealed class StringTableCollectionBundle : ScriptableObject, ITargetFolde
2626
public float SleepSecondsPerRequest => _sleepSecondsPerRequest;
2727

2828
public IReadOnlyList<StringTableCollection> StringTableCollections =>
29-
AssetFinding.FindAssetsInFolders<StringTableCollection>(TargetFolders);
29+
AssetFinding.FindAssets<StringTableCollection>(TargetFolders);
3030

3131
public void PullAllLocales(
3232
bool removeMissingEntries = false,

Assets/Plugins/LocalizationExtension/Editor/Google/StringTableCollection/StringTableCollectionBundleEditor.cs

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ public sealed class StringTableCollectionBundleEditor : UnityEditor.Editor
1313
{
1414
private StringTableCollectionBundle Bundle => target as StringTableCollectionBundle;
1515

16+
private CacheListConverter<DefaultAsset, StringTableCollection> _stringTableCollectionsConverter = null;
17+
public CacheListConverter<DefaultAsset, StringTableCollection> StringTableCollectionsConverter =>
18+
_stringTableCollectionsConverter ??= new CacheListConverter<DefaultAsset, StringTableCollection>(actualConverter: new FolderToCollectionConverter(Bundle));
19+
1620
public override void OnInspectorGUI()
1721
{
1822
DrawDefaultInspector();
@@ -30,7 +34,7 @@ public override void OnInspectorGUI()
3034
private void DrawToolsWithSheetsServiceProvider()
3135
{
3236
EditorGUILayout.LabelField("Tools (using SheetsServiceProvider)", EditorStyles.boldLabel);
33-
using var h = new GUILayout.HorizontalScope();
37+
using var h = new EditorGUILayout.HorizontalScope();
3438
if (GUILayout.Button("Pull All Locales"))
3539
{
3640
var serviceProvider = GetSheetsServiceProvider();
@@ -47,7 +51,7 @@ private void DrawToolsWithSheetsServiceProvider()
4751
private void DrawToolsWithServiceAccount()
4852
{
4953
EditorGUILayout.LabelField("Tools (using Google Service Account)", EditorStyles.boldLabel);
50-
using var h = new GUILayout.HorizontalScope();
54+
using var h = new EditorGUILayout.HorizontalScope();
5155
if (GUILayout.Button("Pull All Locales"))
5256
{
5357
PullWithGoogleServiceAccount();
@@ -60,9 +64,6 @@ private void DrawToolsWithServiceAccount()
6064
}
6165

6266
private bool _showStringTableCollections = true;
63-
private readonly CacheListConverter<DefaultAsset, StringTableCollection> _stringTableCollectionsConverter =
64-
new CacheListConverter<DefaultAsset, StringTableCollection>(
65-
actualConverter: new FolderToCollectionConverter());
6667

6768
private void DrawStringTableCollections()
6869
{
@@ -80,7 +81,13 @@ private void DrawStringTableCollections()
8081
using var h = new EditorGUILayout.VerticalScope(GUI.skin.box);
8182
using var g = new EditorGUI.DisabledGroupScope(true);
8283

83-
var stringTableCollections = _stringTableCollectionsConverter.Convert(Bundle.TargetFolders);
84+
var stringTableCollections = StringTableCollectionsConverter.Convert(Bundle.TargetFolders);
85+
if (stringTableCollections.Count <= 0)
86+
{
87+
EditorGUILayout.LabelField("No \"StringTableCollection\"s.");
88+
return;
89+
}
90+
8491
foreach (var collection in stringTableCollections)
8592
{
8693
EditorGUILayout.ObjectField(collection, typeof(StringTableCollection), allowSceneObjects: false);
@@ -136,9 +143,16 @@ private ServiceAccountSheetsServiceProvider CreateServiceAccountSheetsServicePro
136143

137144
private sealed class FolderToCollectionConverter : IListConverter<DefaultAsset, StringTableCollection>
138145
{
146+
private readonly StringTableCollectionBundle _bundle;
147+
148+
public FolderToCollectionConverter(StringTableCollectionBundle bundle)
149+
{
150+
_bundle = bundle;
151+
}
152+
139153
public IReadOnlyList<StringTableCollection> Convert(IReadOnlyList<DefaultAsset> list)
140154
{
141-
return AssetFinding.FindAssetsInFolders<StringTableCollection>(list);
155+
return _bundle.StringTableCollections;
142156
}
143157
}
144158
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
using UnityEngine;
2+
3+
namespace Tests.Tsgcpp.Localization.Extension.Editor
4+
{
5+
// [CreateAssetMenu(fileName = nameof(TestAsset), menuName = "Tsgcpp/Tests/TestAssetFinding/" + nameof(TestAsset), order = 1)]
6+
public sealed class TestAsset : ScriptableObject
7+
{
8+
[SerializeField] private string _label;
9+
public string Label => _label;
10+
}
11+
}

Assets/Tests/LocalizationExtension/Editor/AssetTool/TestAsset.cs.meta

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Assets/Tests/LocalizationExtension/Editor/AssetTool/TestAssetFinding.cs

Lines changed: 72 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,35 @@ namespace Tests.Tsgcpp.Localization.Extension.Editor
1212
public class TestAssetFinding
1313
{
1414
[Test]
15-
public void FindAssetsInFolders_ReturnsTextAsset_IfFolderContainsTextAsset_WhenOneFolder()
15+
public void FindAssets_WithDefaultAssetArg_ReturnsAsset_IfFolderContainsAsset()
16+
{
17+
// Arrange
18+
var folder = AssetDatabase.LoadAssetAtPath<DefaultAsset>("Assets/Tests/LocalizationExtension/Editor/Resources/Foo02/Bar01/Baz01");
19+
20+
// Act
21+
var actual = AssetFinding.FindAssets<TestAsset>(folder);
22+
23+
// Assert
24+
Assert.That(actual.Count, Is.EqualTo(2));
25+
Assert.That(actual[0].Label, Is.EqualTo("02"));
26+
Assert.That(actual[1].Label, Is.EqualTo("04"));
27+
}
28+
29+
[Test]
30+
public void FindAssets_WithDefaultAssetArg_ReturnsNoAssets_IfArgIsNull()
31+
{
32+
// Arrange
33+
DefaultAsset folder = null;
34+
35+
// Act
36+
var actual = AssetFinding.FindAssets<TestAsset>(folder);
37+
38+
// Assert
39+
Assert.That(actual.Count, Is.EqualTo(0));
40+
}
41+
42+
[Test]
43+
public void FindAssets_WithListArg_ReturnsAsset_IfFolderContainsAsset_WhenOneFolder()
1644
{
1745
// Arrange
1846
var folders = new List<DefaultAsset>
@@ -21,16 +49,16 @@ public void FindAssetsInFolders_ReturnsTextAsset_IfFolderContainsTextAsset_WhenO
2149
};
2250

2351
// Act
24-
var actual = AssetFinding.FindAssetsInFolders<TextAsset>(folders);
52+
var actual = AssetFinding.FindAssets<TestAsset>(folders);
2553

2654
// Assert
2755
Assert.That(actual.Count, Is.EqualTo(2));
28-
Assert.That(actual[0].text, Is.EqualTo("02"));
29-
Assert.That(actual[1].text, Is.EqualTo("04"));
56+
Assert.That(actual[0].Label, Is.EqualTo("02"));
57+
Assert.That(actual[1].Label, Is.EqualTo("04"));
3058
}
3159

3260
[Test]
33-
public void FindAssetsInFolders_ReturnsTextAsset_IfFolderContainsTextAsset_WhenMultipleFolders()
61+
public void FindAssets_WithListArg_ReturnsAsset_IfFolderContainsAsset_WhenMultipleFolders()
3462
{
3563
// Arrange
3664
var folders = new List<DefaultAsset>
@@ -41,18 +69,18 @@ public void FindAssetsInFolders_ReturnsTextAsset_IfFolderContainsTextAsset_WhenM
4169
};
4270

4371
// Act
44-
var actual = AssetFinding.FindAssetsInFolders<TextAsset>(folders);
72+
var actual = AssetFinding.FindAssets<TestAsset>(folders);
4573

4674
// Assert
4775
Assert.That(actual.Count, Is.EqualTo(4));
48-
Assert.That(actual[0].text, Is.EqualTo("01"));
49-
Assert.That(actual[1].text, Is.EqualTo("02"));
50-
Assert.That(actual[2].text, Is.EqualTo("04"));
51-
Assert.That(actual[3].text, Is.EqualTo("03"));
76+
Assert.That(actual[0].Label, Is.EqualTo("01"));
77+
Assert.That(actual[1].Label, Is.EqualTo("02"));
78+
Assert.That(actual[2].Label, Is.EqualTo("04"));
79+
Assert.That(actual[3].Label, Is.EqualTo("03"));
5280
}
5381

5482
[Test]
55-
public void FindAssetsInFolders_ReturnsUniquedTextAsset_IfTextAssetsAreDupulicated()
83+
public void FindAssets_WithListArg_ReturnsUniquedAsset_IfAssetsAreDupulicated()
5684
{
5785
// Arrange
5886
var folders = new List<DefaultAsset>
@@ -63,17 +91,17 @@ public void FindAssetsInFolders_ReturnsUniquedTextAsset_IfTextAssetsAreDupulicat
6391
};
6492

6593
// Act
66-
var actual = AssetFinding.FindAssetsInFolders<TextAsset>(folders);
94+
var actual = AssetFinding.FindAssets<TestAsset>(folders);
6795

6896
// Assert
6997
Assert.That(actual.Count, Is.EqualTo(3));
70-
Assert.That(actual[0].text, Is.EqualTo("02"));
71-
Assert.That(actual[1].text, Is.EqualTo("04"));
72-
Assert.That(actual[2].text, Is.EqualTo("03"));
98+
Assert.That(actual[0].Label, Is.EqualTo("02"));
99+
Assert.That(actual[1].Label, Is.EqualTo("04"));
100+
Assert.That(actual[2].Label, Is.EqualTo("03"));
73101
}
74102

75103
[Test]
76-
public void FindAssetsInFolders_ReturnsNoTextAssets_IfTextAssetsDontExist()
104+
public void FindAssets_WithListArg_ReturnsNoAssets_IfAssetsDontExist()
77105
{
78106
// Arrange
79107
var folders = new List<DefaultAsset>
@@ -82,31 +110,54 @@ public void FindAssetsInFolders_ReturnsNoTextAssets_IfTextAssetsDontExist()
82110
};
83111

84112
// Act
85-
var actual = AssetFinding.FindAssetsInFolders<TextAsset>(folders);
113+
var actual = AssetFinding.FindAssets<TestAsset>(folders);
86114

87115
// Assert
88116
Assert.That(actual.Count, Is.EqualTo(0));
89117
}
90118

91119
[Test]
92-
public void FindAssetsInFolders_ReturnsNoTextAssets_IfFoldersIsNone()
120+
public void FindAssets_WithListArg_ReturnsNoAssets_IfNullList()
93121
{
94122
// Arrange
95123
var folders = new List<DefaultAsset>
96124
{
125+
null,
97126
};
98127

99128
// Act
100-
var actual = AssetFinding.FindAssetsInFolders<TextAsset>(folders);
129+
var actual = AssetFinding.FindAssets<TestAsset>(folders);
101130

102131
// Assert
103132
Assert.That(actual.Count, Is.EqualTo(0));
104133
}
105134

106135
[Test]
107-
public void FindAssetsInFolders_ThrowsNullReferenceException_IfArgIsNull()
136+
public void FindAssets_WithListArg_ReturnsNoAssets_IfArgIsNull()
108137
{
109-
Assert.Throws<NullReferenceException>(() => AssetFinding.FindAssetsInFolders<TextAsset>(null));
138+
// Arrange
139+
List<DefaultAsset> folders = null;
140+
141+
// Act
142+
var actual = AssetFinding.FindAssets<TestAsset>(folders);
143+
144+
// Assert
145+
Assert.That(actual.Count, Is.EqualTo(0));
146+
}
147+
148+
[Test]
149+
public void FindAssets_WithListArg_ReturnsNoAssets_IfFoldersIsNone()
150+
{
151+
// Arrange
152+
var folders = new List<DefaultAsset>
153+
{
154+
};
155+
156+
// Act
157+
var actual = AssetFinding.FindAssets<TestAsset>(folders);
158+
159+
// Assert
160+
Assert.That(actual.Count, Is.EqualTo(0));
110161
}
111162
}
112163
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
%YAML 1.1
2+
%TAG !u! tag:unity3d.com,2011:
3+
--- !u!114 &11400000
4+
MonoBehaviour:
5+
m_ObjectHideFlags: 0
6+
m_CorrespondingSourceObject: {fileID: 0}
7+
m_PrefabInstance: {fileID: 0}
8+
m_PrefabAsset: {fileID: 0}
9+
m_GameObject: {fileID: 0}
10+
m_Enabled: 1
11+
m_EditorHideFlags: 0
12+
m_Script: {fileID: 11500000, guid: f2fd2ba5cf501d149becb29e6e258529, type: 3}
13+
m_Name: TestAsset01
14+
m_EditorClassIdentifier:
15+
_label: 01

Assets/Tests/LocalizationExtension/Editor/Resources/Foo02/Bar01/Baz01/Text04.txt.meta renamed to Assets/Tests/LocalizationExtension/Editor/Resources/Foo01/Bar01/TestAsset01.asset.meta

Lines changed: 3 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Assets/Tests/LocalizationExtension/Editor/Resources/Foo01/Bar01/Text01.txt

Lines changed: 0 additions & 1 deletion
This file was deleted.
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
%YAML 1.1
2+
%TAG !u! tag:unity3d.com,2011:
3+
--- !u!114 &11400000
4+
MonoBehaviour:
5+
m_ObjectHideFlags: 0
6+
m_CorrespondingSourceObject: {fileID: 0}
7+
m_PrefabInstance: {fileID: 0}
8+
m_PrefabAsset: {fileID: 0}
9+
m_GameObject: {fileID: 0}
10+
m_Enabled: 1
11+
m_EditorHideFlags: 0
12+
m_Script: {fileID: 11500000, guid: f2fd2ba5cf501d149becb29e6e258529, type: 3}
13+
m_Name: TestAsset02
14+
m_EditorClassIdentifier:
15+
_label: 02

0 commit comments

Comments
 (0)