-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPluginEverything.cs
More file actions
139 lines (125 loc) · 4.98 KB
/
PluginEverything.cs
File metadata and controls
139 lines (125 loc) · 4.98 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
using Newtonsoft.Json;
using Quokka.ListItems;
using Quokka.PluginArch;
using System.Collections.ObjectModel;
using System.Globalization;
using System.IO;
using System.Runtime.InteropServices;
using System.Text;
namespace PluginEverything
{
/// <summary>
/// The Everything Plugin
/// </summary>
public partial class Everything : Plugin
{
/// <summary>
/// <inheritdoc/><br />
/// The name is "Everything"
/// </summary>
public override string PluginName { get; set; } = "Everything";
private static Settings pluginSettings = new();
internal static Settings PluginSettings { get => pluginSettings; set => pluginSettings = value; }
/// <summary>
/// Sets Everything Request Flags and Max values num. Also loads the plugin's settings
/// </summary>
public Everything()
{
Everything_SetRequestFlags(EVERYTHING_REQUEST_FILE_NAME | EVERYTHING_REQUEST_FULL_PATH_AND_FILE_NAME | EVERYTHING_REQUEST_DATE_MODIFIED | EVERYTHING_REQUEST_SIZE);
Everything_SetMax(uint.Parse(Everything.PluginSettings.EverythingSettings.MaxResultsFromQuery, new CultureInfo("en-US")));
string fileName = Environment.CurrentDirectory + "\\PlugBoard\\PluginEverything\\Plugin\\settings.json";
PluginSettings = JsonConvert.DeserializeObject<Settings>(File.ReadAllText(fileName))!;
if (!PluginSettings.Previewer.Contains("explorer"))
{ // the only exception - a previewer should be a user installed program
PluginSettings.Previewer = Path.GetFullPath(PluginSettings.Previewer);
}
}
private Collection<ListItem> ProduceItems(string query)
{
UInt32 i;
if (query.Contains(PluginSettings.EverythingSettings.MatchPathFlag))
{
query = query.Replace(PluginSettings.EverythingSettings.MatchPathFlag, "");
Everything_SetMatchPath(true);
}
else
{
Everything_SetMatchPath(false);
}
if (query.Contains(PluginSettings.EverythingSettings.MatchCaseFlag))
{
query = query.Replace(PluginSettings.EverythingSettings.MatchCaseFlag, "");
Everything_SetMatchCase(true);
}
else
{
Everything_SetMatchCase(false);
}
if (query.Contains(PluginSettings.EverythingSettings.MatchWholeWordFlag))
{
query = query.Replace(PluginSettings.EverythingSettings.MatchWholeWordFlag, "");
Everything_SetMatchWholeWord(true);
}
else
{
Everything_SetMatchWholeWord(false);
}
if (query.Contains(PluginSettings.EverythingSettings.RegexFlag))
{
query = query.Replace(PluginSettings.EverythingSettings.RegexFlag, "");
Everything_SetRegex(true);
}
else
{
Everything_SetRegex(false);
}
Everything_SetSearchW(query);
Everything_QueryW(true);
Collection<ListItem> ItemList = new();
for (i = 0; i < Everything_GetNumResults(); i++)
{
StringBuilder path = new(256);
Everything_GetResultDateModified(i, out long date_modified);
Everything_GetResultSize(i, out long size);
Everything_GetResultFullPathName(i, path, 256);
bool isFolderResult = Everything_IsFolderResult(i);
bool isVolumeResult = Everything_IsVolumeResult(i);
string dateModified = DateTime.FromFileTime(date_modified).Year + "/" + DateTime.FromFileTime(date_modified).Month + "/" + DateTime.FromFileTime(date_modified).Day + " " + DateTime.FromFileTime(date_modified).Hour + ":" + DateTime.FromFileTime(date_modified).Minute.ToString("D2");
ItemList.Add(new EverythingItem(Marshal.PtrToStringUni(Everything_GetResultFileName(i)), path.ToString(), isFolderResult, isVolumeResult, size.ToString(), dateModified));
}
return ItemList;
}
/// <summary>
/// <inheritdoc /><br />
/// Executes the query, obtains the relevant information for each item from Everything and then creates EverythingItems for them
/// </summary>
/// <param name="query"><inheritdoc/></param>
/// <returns><inheritdoc/></returns>
public override Collection<ListItem> OnQueryChange(string query)
{
query ??= "";
return ProduceItems(query);
}
/// <summary>
/// <inheritdoc/>
/// </summary>
/// <returns>
/// The EverythingSignifier from plugin settings
/// </returns>
public override Collection<string> CommandSignifiers()
{
return new Collection<string>() { PluginSettings.EverythingSignifier };
}
/// <summary>
/// <inheritdoc/>
/// </summary>
/// <param name="command">The EverythingSignifier (Since there is only 1 signifier for this plugin), followed by the file / folder being searched for</param>
/// <returns>Collection of files / folders that possibly match what is being searched for</returns>
public override Collection<ListItem> OnSignifier(string command)
{
command ??= "";
command = command.Substring(PluginSettings.EverythingSignifier.Length);
return FuzzySearch.Sort(command, ProduceItems(command));
}
}
}