Skip to content

Commit 02392be

Browse files
committed
Added options to delete resources and extract icons
1 parent 52efe72 commit 02392be

File tree

1 file changed

+29
-2
lines changed

1 file changed

+29
-2
lines changed

lib/mix/tasks/update.ex

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,11 @@ defmodule Mix.Tasks.Pe.Update do
99
1010
-h | -help This help
1111
--set-icon <filename> Embeds a given application icon
12+
--get-icon <filename> Extracts an embedded icon and stores it to the filename
1213
--set-manifest <filename> Embeds a given side-by-side manifest
1314
--set-info <info_type> <value> Embeds the given version information
1415
--set-resource <type> <filename> Embeds any resources type
16+
--del-resource <type> Remove any resources type
1517
1618
Known info types are:
1719
@@ -87,12 +89,16 @@ defmodule Mix.Tasks.Pe.Update do
8789
Enum.reduce(updates, resource_table, fn {type, funs}, resource_table ->
8890
resource = LibPE.ResourceTable.get_resource(resource_table, type)
8991

90-
resource =
92+
new_resource =
9193
Enum.reduce(funs, resource, fn fun, resource ->
9294
fun.(resource)
9395
end)
9496

95-
LibPE.ResourceTable.set_resource(resource_table, type, resource)
97+
if new_resource != resource do
98+
LibPE.ResourceTable.set_resource(resource_table, type, new_resource)
99+
else
100+
resource_table
101+
end
96102
end)
97103

98104
LibPE.set_resources(pe, resource_table)
@@ -128,6 +134,22 @@ defmodule Mix.Tasks.Pe.Update do
128134
end
129135
end
130136

137+
defp process_args(opts, ["--get-icon", filename | rest]) do
138+
if File.exists?(filename) do
139+
error("The output file already exists: #{filename}")
140+
end
141+
142+
update_resource(opts, "RT_ICON", fn icon ->
143+
if icon == nil do
144+
Mix.Shell.IO.error("No icon found in the file")
145+
else
146+
File.write!(filename, icon.entry.data)
147+
end
148+
icon
149+
end)
150+
|> process_args(rest)
151+
end
152+
131153
defp process_args(opts, ["--set-resource", name, filename | rest]) do
132154
data =
133155
case File.read(filename) do
@@ -139,6 +161,11 @@ defmodule Mix.Tasks.Pe.Update do
139161
|> process_args(rest)
140162
end
141163

164+
defp process_args(opts, ["--del-resource", name | rest]) do
165+
add_resource(opts, name, nil)
166+
|> process_args(rest)
167+
end
168+
142169
defp process_args(opts, ["--set-info", name, value | rest]) do
143170
update = fn version ->
144171
page = LibPE.Codepage.encode(0)

0 commit comments

Comments
 (0)