Skip to content

Commit b12dcb1

Browse files
Haruma-Kclaude
andcommitted
feat: AddressBasedLabelProviderとAddressBasedVersionProviderを追加
アドレスベースでラベルとバージョンを生成するプロバイダーを実装: - AddressBasedProvider: 共通ロジックを持つベースクラス - AddressBasedLabelProvider: アドレスからラベルを生成 - AddressBasedVersionProvider: アドレスからバージョンを生成 AssetPathBasedProviderと同様の設計パターンを採用し、 フルアドレスまたはファイル名のみの使用、正規表現による置換機能をサポート 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
1 parent ddf7ee2 commit b12dcb1

File tree

6 files changed

+188
-0
lines changed

6 files changed

+188
-0
lines changed
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
using System;
2+
using SmartAddresser.Editor.Core.Models.Shared;
3+
using UnityEditor.AddressableAssets.Settings;
4+
5+
namespace SmartAddresser.Editor.Core.Models.LayoutRules.LabelRules
6+
{
7+
/// <summary>
8+
/// Provide the label based on the addressable entry's address.
9+
/// </summary>
10+
[Serializable]
11+
public sealed class AddressBasedLabelProvider : AddressBasedProvider, ILabelProvider
12+
{
13+
void ILabelProvider.Setup()
14+
{
15+
base.Setup();
16+
}
17+
18+
string ILabelProvider.Provide(string assetPath, Type assetType, bool isFolder, string address,
19+
AddressableAssetGroup addressableAssetGroup)
20+
{
21+
return base.Provide(address);
22+
}
23+
24+
string ILabelProvider.GetDescription()
25+
{
26+
return base.GetDescription();
27+
}
28+
}
29+
}

Assets/SmartAddresser/Editor/Core/Models/LayoutRules/LabelRules/AddressBasedLabelProvider.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.
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
using System;
2+
using SmartAddresser.Editor.Core.Models.Shared;
3+
using UnityEditor.AddressableAssets.Settings;
4+
5+
namespace SmartAddresser.Editor.Core.Models.LayoutRules.VersionRules
6+
{
7+
/// <summary>
8+
/// Provide the version based on the addressable entry's address.
9+
/// </summary>
10+
[Serializable]
11+
public sealed class AddressBasedVersionProvider : AddressBasedProvider, IVersionProvider
12+
{
13+
void IVersionProvider.Setup()
14+
{
15+
base.Setup();
16+
}
17+
18+
string IVersionProvider.Provide(string assetPath, Type assetType, bool isFolder, string address,
19+
AddressableAssetGroup addressableAssetGroup)
20+
{
21+
return base.Provide(address);
22+
}
23+
24+
string IVersionProvider.GetDescription()
25+
{
26+
return base.GetDescription();
27+
}
28+
}
29+
}

Assets/SmartAddresser/Editor/Core/Models/LayoutRules/VersionRules/AddressBasedVersionProvider.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.
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
using System;
2+
using System.IO;
3+
using System.Text.RegularExpressions;
4+
using UnityEngine;
5+
6+
namespace SmartAddresser.Editor.Core.Models.Shared
7+
{
8+
[Serializable]
9+
public abstract class AddressBasedProvider
10+
{
11+
[SerializeField] private bool _useFullAddress = true;
12+
[SerializeField] private bool _replaceWithRegex;
13+
[SerializeField] private string _pattern;
14+
[SerializeField] private string _replacement;
15+
16+
private Regex _regex;
17+
18+
/// <summary>
19+
/// If true, uses the full address. If false, uses only the last segment after the last '/'.
20+
/// </summary>
21+
public bool UseFullAddress
22+
{
23+
get => _useFullAddress;
24+
set => _useFullAddress = value;
25+
}
26+
27+
/// <summary>
28+
/// If true, replaces the address value through regular expressions.
29+
/// </summary>
30+
public bool ReplaceWithRegex
31+
{
32+
get => _replaceWithRegex;
33+
set => _replaceWithRegex = value;
34+
}
35+
36+
/// <summary>
37+
/// Regex pattern to replace the address value.
38+
/// </summary>
39+
public string Pattern
40+
{
41+
get => _pattern;
42+
set => _pattern = value;
43+
}
44+
45+
/// <summary>
46+
/// Replacement value for the regex pattern.
47+
/// </summary>
48+
public string Replacement
49+
{
50+
get => _replacement;
51+
set => _replacement = value;
52+
}
53+
54+
public void Setup()
55+
{
56+
if (!_replaceWithRegex)
57+
return;
58+
59+
try
60+
{
61+
_regex = new Regex(_pattern);
62+
}
63+
catch
64+
{
65+
_regex = null;
66+
}
67+
}
68+
69+
public string Provide(string address)
70+
{
71+
if (string.IsNullOrEmpty(address))
72+
return null;
73+
74+
if (_replaceWithRegex && _regex == null)
75+
return null;
76+
77+
try
78+
{
79+
var sourceValue = _useFullAddress ? address : Path.GetFileName(address);
80+
return _replaceWithRegex ? _regex.Replace(sourceValue, _replacement) : sourceValue;
81+
}
82+
catch
83+
{
84+
return null;
85+
}
86+
}
87+
88+
public string GetDescription()
89+
{
90+
var result = _useFullAddress ? "Source: Full Address" : "Source: Address File Name";
91+
if (_replaceWithRegex)
92+
result += $", Regex: Replace \"{_pattern}\" with \"{_replacement}\"";
93+
94+
return result;
95+
}
96+
}
97+
}

Assets/SmartAddresser/Editor/Core/Models/Shared/AddressBasedProvider.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.

0 commit comments

Comments
 (0)