Skip to content

Commit

Permalink
Support categories, update project structure
Browse files Browse the repository at this point in the history
  • Loading branch information
ichenpipi committed Sep 6, 2023
1 parent 75bf3be commit 5b349b4
Show file tree
Hide file tree
Showing 52 changed files with 2,798 additions and 1,466 deletions.
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
# Changelog

## [1.1.0] - 2023-09-06

- Support categories
- Update project structure

## [1.0.2] - 2023-08-24

- Modify APIs
Expand Down
196 changes: 145 additions & 51 deletions Editor/Scripts/CodeExecutorData.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
using System;
using System.Collections.Generic;
using System.Linq;

namespace ChenPipi.CodeExecutor.Editor
{
Expand All @@ -17,6 +16,7 @@ public static class CodeExecutorData
private class UserData
{
public int version = 0;
public List<string> categories = new List<string>();
public SnippetInfo newSnippet = new SnippetInfo();
public List<SnippetInfo> snippets = new List<SnippetInfo>()
{
Expand All @@ -27,8 +27,11 @@ private class UserData
editTime = 0,
top = false,
name = "HelloWorld",
code = "UnityEngine.Debug.Log(\"[CodeExecutor] Hello World!\");\nUnityEngine.Debug.LogWarning(\"[CodeExecutor] Hello World!\");\nUnityEngine.Debug.LogError(\"[CodeExecutor] Hello World!\");",
mode = "C#"
code = @"UnityEngine.Debug.Log(""[CodeExecutor] Hello World!"");
UnityEngine.Debug.LogWarning(""[CodeExecutor] Hello World!"");
UnityEngine.Debug.LogError(""[CodeExecutor] Hello World!"");",
mode = "C#",
category = null,
},
new SnippetInfo()
{
Expand All @@ -38,7 +41,8 @@ private class UserData
top = false,
name = "CrazyThursday",
code = "UnityEngine.Debug.LogError(\"[CodeExecutor] Crazy Thursday\");",
mode = "C#"
mode = "C#",
category = "Test",
},
new SnippetInfo()
{
Expand All @@ -48,7 +52,8 @@ private class UserData
top = false,
name = "TestImport",
code = "@import(\"CrazyThursday\")\r\n\nUnityEngine.Debug.LogError(\"[CodeExecutor] V Me 50\");",
mode = "C#"
mode = "C#",
category = "Test",
},
};
}
Expand All @@ -70,6 +75,85 @@ private static UserData userData

#endregion

#region Categories

public static List<string> GetCategories()
{
List<string> list = new List<string>(userData.categories);
foreach (SnippetInfo snippet in snippets)
{
if (!string.IsNullOrEmpty(snippet.category) && !list.Contains(snippet.category))
{
userData.categories.Add(snippet.category);
list.Add(snippet.category);
}
}
return list;
}

private static List<string> categories => s_UserData.categories;

public static bool HasCategory(string name)
{
if (string.IsNullOrEmpty(name))
{
return false;
}
return categories.Contains(name);
}

public static void AddCategory(string name)
{
if (string.IsNullOrEmpty(name) || HasCategory(name))
{
return;
}
categories.Add(name);
}

public static void RemoveCategory(string name)
{
if (string.IsNullOrEmpty(name))
{
return;
}
categories.Remove(name);
// 更新代码段
foreach (SnippetInfo snippet in snippets)
{
if (name.Equals(snippet.category, StringComparison.OrdinalIgnoreCase))
{
snippet.category = null;
}
}
}

public static void RenameCategory(string originalName, string newName)
{
if (string.IsNullOrEmpty(originalName))
{
return;
}
int index = categories.IndexOf(originalName);
if (index < 0)
{
return;
}
categories[index] = newName;
// 更新代码段
foreach (SnippetInfo snippet in snippets)
{
if (originalName.Equals(snippet.category, StringComparison.OrdinalIgnoreCase))
{
snippet.category = newName;
}
}
}

#endregion

#region NewSnippet

/// <summary>
/// 新代码段
/// </summary>
Expand All @@ -78,76 +162,76 @@ public static SnippetInfo newSnippet
get => userData.newSnippet;
}

#endregion

#region Snippets

public static List<SnippetInfo> snippets => userData.snippets;
#region Snippets Mapping

private static readonly Dictionary<string, SnippetInfo> s_GuidMap = new Dictionary<string, SnippetInfo>();

private static void GenerateMapping()
{
s_GuidMap.Clear();
foreach (SnippetInfo snippetInfo in snippets)
foreach (SnippetInfo snippet in snippets)
{
s_GuidMap.Add(snippetInfo.guid, snippetInfo);
s_GuidMap.Add(snippet.guid, snippet);
}
}

#endregion

public static List<SnippetInfo> GetSnippets()
{
return snippets;
}

private static List<SnippetInfo> snippets => userData.snippets;

public static SnippetInfo GetSnippet(string guid)
{
if (string.IsNullOrEmpty(guid))
{
return null;
}
if (s_GuidMap.TryGetValue(guid, out SnippetInfo snippetInfo))
if (!string.IsNullOrEmpty(guid) && s_GuidMap.TryGetValue(guid, out SnippetInfo snippet))
{
return snippetInfo;
return snippet;
}
return null;
}

public static SnippetInfo AddSnippet(string code, string name = null, string mode = null)
public static SnippetInfo AddSnippet(string code, string name = null, string mode = null, string category = null)
{
if (string.IsNullOrEmpty(name))
{
name = "Unnamed";
}
long time = PipiUtility.GetTimestamp();
SnippetInfo snippetInfo = new SnippetInfo()
SnippetInfo snippet = new SnippetInfo()
{
guid = PipiUtility.NewGuid(),
createTime = time,
editTime = time,
code = code,
name = name,
mode = mode,
category = category,
};
snippets.Add(snippetInfo);
s_GuidMap.Add(snippetInfo.guid, snippetInfo);
return snippetInfo;
snippets.Add(snippet);
s_GuidMap.Add(snippet.guid, snippet);
return snippet;
}

public static void RemoveSnippet(string guid)
{
if (string.IsNullOrEmpty(guid))
{
return;
}
if (!s_GuidMap.TryGetValue(guid, out SnippetInfo snippetInfo))
if (string.IsNullOrEmpty(guid) || !s_GuidMap.TryGetValue(guid, out SnippetInfo snippet))
{
return;
}
s_GuidMap.Remove(guid);
snippets.Remove(snippetInfo);
snippets.Remove(snippet);
}

public static bool HasSnippet(string guid)
{
if (string.IsNullOrEmpty(guid))
{
return false;
}
return s_GuidMap.ContainsKey(guid);
return (!string.IsNullOrEmpty(guid) && s_GuidMap.ContainsKey(guid));
}

public static SnippetInfo GetSnippetWithName(string name, string mode = null)
Expand All @@ -171,6 +255,19 @@ public static bool HasSnippetWithName(string name)
return (GetSnippetWithName(name) != null);
}

public static List<SnippetInfo> GetSnippetsWithCategory(string category)
{
List<SnippetInfo> list = new List<SnippetInfo>();
foreach (SnippetInfo snippet in snippets)
{
if (snippet.MatchCategory(category))
{
list.Add(snippet);
}
}
return list;
}

#endregion

#region Basic Interface
Expand Down Expand Up @@ -230,38 +327,34 @@ private static void SetLocal(UserData value)

}

#region ItemInfo
#region Type Definition

/// <summary>
/// 条目信息
/// </summary>
[Serializable]
public class SnippetInfo
{

public string guid = string.Empty;
public string guid = null;
public long createTime = 0;
public long editTime = 0;
public bool top = false;
public string name = string.Empty;
public string code = string.Empty;
public string mode = string.Empty;
public string name = null;
public string code = null;
public string mode = null;
public string category = null;

public bool MatchGuid(string guid)
{
return this.guid.Equals(guid, StringComparison.OrdinalIgnoreCase);
}
public bool MatchGuid(string guid) => (this.guid != null && this.guid.Equals(guid, StringComparison.OrdinalIgnoreCase));

public bool MatchName(string name)
{
return this.name.Equals(name, StringComparison.OrdinalIgnoreCase);
}
public bool MatchName(string name) => (this.name != null && this.name.Equals(name, StringComparison.OrdinalIgnoreCase));

public bool MatchMode(string mode)
{
return this.mode.Equals(mode, StringComparison.OrdinalIgnoreCase);
}
public bool MatchMode(string mode) => (this.mode != null && this.mode.Equals(mode, StringComparison.OrdinalIgnoreCase));

public bool MatchCategory(string category) =>
(
(string.IsNullOrEmpty(this.category) && string.IsNullOrEmpty(category)) ||
(this.category != null && this.category.Equals(category, StringComparison.OrdinalIgnoreCase))
);
}

[Serializable]
Expand All @@ -273,9 +366,10 @@ public class SnippetWrapper
[Serializable]
public class SnippetInfoSimplified
{
public string name = string.Empty;
public string code = string.Empty;
public string mode = string.Empty;
public string name = null;
public string code = null;
public string mode = null;
public string category = null;
}

#endregion
Expand Down
Loading

0 comments on commit 5b349b4

Please sign in to comment.