@@ -9,9 +9,11 @@ defmodule Mix.Tasks.Pe.Update do
9
9
10
10
-h | -help This help
11
11
--set-icon <filename> Embeds a given application icon
12
+ --get-icon <filename> Extracts an embedded icon and stores it to the filename
12
13
--set-manifest <filename> Embeds a given side-by-side manifest
13
14
--set-info <info_type> <value> Embeds the given version information
14
15
--set-resource <type> <filename> Embeds any resources type
16
+ --del-resource <type> Remove any resources type
15
17
16
18
Known info types are:
17
19
@@ -87,12 +89,16 @@ defmodule Mix.Tasks.Pe.Update do
87
89
Enum . reduce ( updates , resource_table , fn { type , funs } , resource_table ->
88
90
resource = LibPE.ResourceTable . get_resource ( resource_table , type )
89
91
90
- resource =
92
+ new_resource =
91
93
Enum . reduce ( funs , resource , fn fun , resource ->
92
94
fun . ( resource )
93
95
end )
94
96
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
96
102
end )
97
103
98
104
LibPE . set_resources ( pe , resource_table )
@@ -128,6 +134,22 @@ defmodule Mix.Tasks.Pe.Update do
128
134
end
129
135
end
130
136
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
+
131
153
defp process_args ( opts , [ "--set-resource" , name , filename | rest ] ) do
132
154
data =
133
155
case File . read ( filename ) do
@@ -139,6 +161,11 @@ defmodule Mix.Tasks.Pe.Update do
139
161
|> process_args ( rest )
140
162
end
141
163
164
+ defp process_args ( opts , [ "--del-resource" , name | rest ] ) do
165
+ add_resource ( opts , name , nil )
166
+ |> process_args ( rest )
167
+ end
168
+
142
169
defp process_args ( opts , [ "--set-info" , name , value | rest ] ) do
143
170
update = fn version ->
144
171
page = LibPE.Codepage . encode ( 0 )
0 commit comments