Compare commits

...

4 Commits

Author SHA1 Message Date
7ec81ab146 Check the data directory only once 2022-12-01 19:50:05 +08:00
cf3ffeb8c6 Fix data file dir does not exist (#164) 2022-12-01 19:41:45 +08:00
118a7fe0f1 Update version to v1.7.5 2022-11-29 13:11:58 +08:00
005c68cc5b Optimize search(#149 #163) 2022-11-29 13:10:00 +08:00
3 changed files with 84 additions and 9 deletions

View File

@@ -31,5 +31,5 @@ using System.Runtime.InteropServices;
//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
//通过使用 "*",如下所示:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.7.4")]
[assembly: AssemblyFileVersion("1.7.4")]
[assembly: AssemblyVersion("1.7.5")]
[assembly: AssemblyFileVersion("1.7.5")]

View File

@@ -23,13 +23,23 @@ namespace GrasscutterTools.Utils
/// </summary>
public static OpenCommandAPI OC { get; set; }
private static string AppDataFolder { get; } = GetAppDataFolder();
private static string GetAppDataFolder()
{
var dir = Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),
"GrasscutterTools");
if (!Directory.Exists(dir))
Directory.CreateDirectory(dir);
return dir;
}
/// <summary>
/// 应用数据目录
/// </summary>
public static string GetAppDataFile(string filename) =>
Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),
"GrasscutterTools",
filename);
public static string GetAppDataFile(string filename)
{
return Path.Combine(AppDataFolder, filename);
}
}
}

View File

@@ -1,5 +1,6 @@
using System;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
@@ -32,7 +33,7 @@ namespace GrasscutterTools.Utils
/// <param name="filter">过滤内容</param>
public static void ListBoxFilter(ListBox listBox, string[] source, string filter)
{
filter = filter.Trim();
filter = filter.Trim().ToLower();
listBox.BeginUpdate();
listBox.Items.Clear();
if (source != null && source.Length > 0)
@@ -40,11 +41,75 @@ namespace GrasscutterTools.Utils
if (string.IsNullOrEmpty(filter))
listBox.Items.AddRange(source);
else
listBox.Items.AddRange(source.Where(n => n.Contains(filter)).ToArray());
listBox.Items.AddRange(source.Where(n => Contains(n, filter)).ToArray());
}
listBox.EndUpdate();
}
private static bool Contains(string source, string filter)
{
source = source.ToLower();
return source.Contains(filter) || (Encoding.Default.CodePage == 936 && ContainsPY(source, filter));
}
private static bool ContainsPY(string source, string filter)
{
int i = 0;
foreach (var ch in source)
{
var py = ch;
var bytes = Encoding.Default.GetBytes(new char[] { ch });
if (bytes.Length == 2)
{
py = GetPinYing((bytes[0] << 8) + bytes[1]);
py = py == '\0' ? ch : py;
}
if (filter[i] == py)
i++;
else i = 0;
if (i == filter.Length) return true;
}
return false;
}
/// <summary>
/// 获取拼音首字母,范围外返回原值
/// </summary>
/// <param name="ch">字符</param>
/// <returns>拼音首字母</returns>
private static char GetPinYing(int i)
{
if (i < 45217) return '\0';
if (i < 45253) return 'a';
if (i < 45761) return 'b';
if (i < 46318) return 'c';
if (i < 46826) return 'd';
if (i < 47010) return 'e';
if (i < 47297) return 'f';
if (i < 47614) return 'g';
if (i < 48119) return 'h';
if (i < 48119) return 'i';
if (i < 49062) return 'j';
if (i < 49324) return 'k';
if (i < 49896) return 'l';
if (i < 50371) return 'm';
if (i < 50614) return 'n';
if (i < 50622) return 'o';
if (i < 50906) return 'p';
if (i < 51387) return 'q';
if (i < 51446) return 'r';
if (i < 52218) return 's';
if (i < 52698) return 't';
if (i < 52698) return 'u';
if (i < 52698) return 'v';
if (i < 52980) return 'w';
if (i < 53689) return 'x';
if (i < 54481) return 'y';
if (i < 55290) return 'z';
return '\0';
}
/// <summary>
/// 使用浏览器打开网址
/// </summary>