Skip to content

Commit eddb318

Browse files
committed
Feature: Last-used Shadertoy ID remembered (and full URL supported).
1 parent 77c1374 commit eddb318

File tree

4 files changed

+53
-11
lines changed

4 files changed

+53
-11
lines changed

ShaderShrinker/Shrinker.WpfApp/AppViewModel.cs

Lines changed: 30 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ public class AppViewModel : ViewModelBase
6767

6868
public CustomOptions CustomOptions => m_customOptions;
6969

70-
public string ShadertoyShaderId { get; set; }
70+
public string ShadertoyShaderId { get; set; } = Settings.Default.ShadertoyShaderId;
7171

7272
private string OriginalCode
7373
{
@@ -252,21 +252,41 @@ private void LoadGlslFromFile(object obj)
252252
private void LoadGlslFromShadertoy(object obj)
253253
{
254254
var id = ShadertoyShaderId?.Trim();
255-
if (string.IsNullOrWhiteSpace(id) || id.Length != 6)
255+
if (id != null)
256+
{
257+
const string Prefix = "https://www.shadertoy.com/view/";
258+
if (id.StartsWith(Prefix))
259+
id = id.Substring(Prefix.Length);
260+
}
261+
262+
if (string.IsNullOrWhiteSpace(id))
256263
return;
257264

258-
using (new BusyCursor())
259-
using (var wc = new WebClient())
265+
try
260266
{
261-
var json = wc.DownloadString($"https://www.shadertoy.com/api/v1/shaders/{id}?key=BtntM4");
267+
using (new BusyCursor())
268+
using (var wc = new WebClient())
269+
{
270+
var json = wc.DownloadString($"https://www.shadertoy.com/api/v1/shaders/{id}?key=BtntM4");
271+
272+
var shaderData = JsonConvert.DeserializeObject<Root>(json);
273+
var shaderCode = shaderData?.Shader?.renderpass.LastOrDefault()?.code;
274+
if (string.IsNullOrWhiteSpace(shaderCode))
275+
{
276+
MyMessageQueue.Enqueue($"Failed to import GLSL: {(string.IsNullOrEmpty(shaderData.Error) ? "Unknown error occurred." : shaderData.Error)}");
277+
return;
278+
}
262279

263-
var shaderData = JsonConvert.DeserializeObject<Root>(json);
264-
var shaderCode = shaderData?.Shader?.renderpass.LastOrDefault()?.code;
265-
if (!string.IsNullOrWhiteSpace(shaderCode))
266280
LoadGlslFromStringAsync(shaderCode);
281+
Settings.Default.ShadertoyShaderId = id;
282+
Settings.Default.Save();
283+
OnPropertyChanged(nameof(ShadertoyShaderId));
284+
}
285+
}
286+
finally
287+
{
288+
DialogHost.CloseDialogCommand.Execute(null, null);
267289
}
268-
269-
DialogHost.CloseDialogCommand.Execute(null, null);
270290
}
271291

272292
private void SaveGlslToFile(object obj)

ShaderShrinker/Shrinker.WpfApp/Properties/Settings.Designer.cs

Lines changed: 13 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ShaderShrinker/Shrinker.WpfApp/Properties/Settings.settings

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,8 @@
88
<Setting Name="MostRecentPreset" Type="System.String" Scope="User">
99
<Value Profile="(Default)">Maximum</Value>
1010
</Setting>
11+
<Setting Name="ShaderToyShaderId" Type="System.String" Scope="User">
12+
<Value Profile="(Default)" />
13+
</Setting>
1114
</Settings>
1215
</SettingsFile>

ShaderShrinker/Shrinker.WpfApp/ShadertoyApi/ShadertoyApi.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,5 +57,12 @@ public class Shader
5757
public class Root
5858
{
5959
public Shader Shader { get; set; }
60+
public string Error { get; set; }
61+
62+
public Root(Shader shader, string error)
63+
{
64+
Shader = shader;
65+
Error = error;
66+
}
6067
}
6168
}

0 commit comments

Comments
 (0)