1use crate::core::{interpolate_env_vars, UserEnvVars};
2
3pub const FOLDERID_ACCOUNT_PICTURES :&str = "{008CA0B1-55B4-4C56-B8A8-4DE4B299D3BE}";
4pub const FOLDERID_ADMINTOOLS :&str = "{724EF170-A42D-4FEF-9F26-B60E846FBA4F}";
5pub const FOLDERID_APPDATADESKTOP :&str = "{B2C5E279-7ADD-439F-B28C-C41FE1BBF672}";
6pub const FOLDERID_APPDATADOCUMENTS :&str = "{7BE16610-1F7F-44AC-BFF0-83E15F2FFCA1}";
7pub const FOLDERID_APPDATAFAVORITES :&str = "{7CFBEFBC-DE1F-45AA-B843-A542AC536CC9}";
8pub const FOLDERID_APPDATAPROGRAMDATA :&str = "{559D40A3-A036-40FA-AF61-84CB430A4D34}";
9pub const FOLDERID_APPLICATIONSHORTCUTS :&str = "{A3918781-E5F2-4890-B3D9-A7E54332328C}";
10pub const FOLDERID_CAMERAROLL :&str = "{AB5FB87B-7CE2-4F83-915D-550846C9537B}";
11pub const FOLDERID_CDBURNING :&str = "{9E52AB10-F80D-49DF-ACB8-4330F5687855}";
12pub const FOLDERID_COMMONADMINTOOLS :&str = "{D0384E7D-BAC3-4797-8F14-CBA229B392B5}";
13pub const FOLDERID_COMMONOEMLINKS :&str = "{C1BAE2D0-10DF-4334-BEDD-7AA20B227A9D}";
14pub const FOLDERID_COMMONPROGRAMS :&str = "{0139D44E-6AFE-49F2-8690-3DAFCAE6FFB8}";
15pub const FOLDERID_COMMONSTARTMENU :&str = "{A4115719-D62E-491D-AA7C-E74B8BE3B067}";
16pub const FOLDERID_COMMONSTARTUP :&str = "{82A5EA35-D9CD-47C5-9629-E15D2F714E6E}";
17pub const FOLDERID_COMMONTEMPLATES :&str = "{B94237E7-57AC-4347-9151-B08C6C32D1F7}";
18pub const FOLDERID_CONTACTS :&str = "{56784854-C6CB-462B-8169-88E350ACB882}";
19pub const FOLDERID_COOKIES :&str = "{2B0F765D-C0E9-4171-908E-08A611B84FF6}";
20pub const FOLDERID_DESKTOP :&str = "{B4BFCC3A-DB2C-424C-B029-7FE99A87C641}";
21pub const FOLDERID_DEVICEMETADATASTORE :&str = "{5CE4A5E9-E4EB-479D-B89F-130C02886155}";
22pub const FOLDERID_DOCUMENTS :&str = "{FDD39AD0-238F-46AF-ADB4-6C85480369C7}";
23pub const FOLDERID_DOCUMENTSLIBRARY :&str = "{7B0DB17D-9CD2-4A93-9733-46CC89022E7C}";
24pub const FOLDERID_DOWNLOADS :&str = "{374DE290-123F-4565-9164-39C4925E467B}";
25pub const FOLDERID_FAVORITES :&str = "{1777F761-68AD-4D8A-87BD-30B759FA33DD}";
26pub const FOLDERID_FONTS :&str = "{FD228CB7-AE11-4AE3-864C-16F3910AB8FE}";
27pub const FOLDERID_GAMETASKS :&str = "{054FAE61-4DD8-4787-80B6-090220C4B700}";
28pub const FOLDERID_HISTORY :&str = "{D9DC8A3B-B784-432E-A781-5A1130A75963}";
29pub const FOLDERID_IMPLICITAPPSHORTCUTS :&str = "{BCB5256F-79F6-4CEE-B725-DC34E402FD46}";
30pub const FOLDERID_INTERNETCACHE :&str = "{352481E8-33BE-4251-BA85-6007CAEDCF9D}";
31pub const FOLDERID_LIBRARIES :&str = "{1B3EA5DC-B587-4786-B4EF-BD1DC332AEAE}";
32pub const FOLDERID_LINKS :&str = "{BFB9D5E0-C6A9-404C-B2B2-AE6DB6AF4968}";
33pub const FOLDERID_LOCALAPPDATA :&str = "{F1B32785-6FBA-4FCF-9D55-7B8E7F157091}";
34pub const FOLDERID_LOCALAPPDATALOW :&str = "{A520A1A4-1780-4FF6-BD18-167343C5AF16}";
35pub const FOLDERID_MUSIC :&str = "{4BD8D571-6D19-48D3-BE97-422220080E43}";
36pub const FOLDERID_MUSICLIBRARY :&str = "{2112AB0A-C86A-4FFE-A368-0DE96E47012E}";
37pub const FOLDERID_NETHOOD :&str = "{C5ABBF53-E17F-4121-8900-86626FC2C973}";
38pub const FOLDERID_OBJECTS3D :&str = "{31C0DD25-9439-4F12-BF41-7FF4EDA38722}";
39pub const FOLDERID_ORIGINALIMAGES :&str = "{2C36C0AA-5812-4B87-BFD0-4CD0DFB19B39}";
40pub const FOLDERID_PHOTOALBUMS :&str = "{69D2CF90-FC33-4FB7-9A0C-EBB0F0FCB43C}";
41pub const FOLDERID_PICTURESLIBRARY :&str = "{A990AE9F-A03B-4E80-94BC-9912D7504104}";
42pub const FOLDERID_PICTURES :&str = "{33E28130-4E1E-4676-835A-98395C3BC3BB}";
43pub const FOLDERID_PLAYLISTS :&str = "{DE92C1C7-837F-4F69-A3BB-86E631204A23}";
44pub const FOLDERID_PRINTHOOD :&str = "{9274BD8D-CFD1-41C3-B35E-B13F55A758F4}";
45pub const FOLDERID_PROFILE :&str = "{5E6C858F-0E22-4760-9AFE-EA3317B67173}";
46pub const FOLDERID_PROGRAMDATA :&str = "{62AB5D82-FDC1-4DC3-A9DD-070D1D495D97}";
47pub const FOLDERID_PROGRAMFILES :&str = "{905E63B6-C1BF-494E-B29C-65B732D3D21A}";
48pub const FOLDERID_PROGRAMFILESX64 :&str = "{6D809377-6AF0-444B-8957-A3773F02200E}";
49pub const FOLDERID_PROGRAMFILESX86 :&str = "{7C5A40EF-A0FB-4BFC-874A-C0F2E0B9FA8E}";
50pub const FOLDERID_PROGRAMFILESCOMMON :&str = "{F7F1ED05-9F6D-47A2-AAAE-29D317C6F066}";
51pub const FOLDERID_PROGRAMFILESCOMMONX64 :&str = "{6365D5A7-0F0D-45E5-87F6-0DA56B6A4F7D}";
52pub const FOLDERID_PROGRAMFILESCOMMONX86 :&str = "{DE974D24-D9C6-4D3E-BF91-F4455120B917}";
53pub const FOLDERID_PROGRAMS :&str = "{A77F5D77-2E2B-44C3-A6A2-ABA601054A51}";
54pub const FOLDERID_PUBLIC :&str = "{DFDF76A2-C82A-4D63-906A-5644AC457385}";
55pub const FOLDERID_PUBLICDESKTOP :&str = "{C4AA340D-F20F-4863-AFEF-F87EF2E6BA25}";
56pub const FOLDERID_PUBLICDOCUMENTS :&str = "{ED4824AF-DCE4-45A8-81E2-FC7965083634}";
57pub const FOLDERID_PUBLICDOWNLOADS :&str = "{3D644C9B-1FB8-4F30-9B45-F670235F79C0}";
58pub const FOLDERID_PUBLICGAMETASKS :&str = "{DEBF2536-E1A8-4C59-B6A2-414586476AEA}";
59pub const FOLDERID_PUBLICLIBRARIES :&str = "{48DAF80B-E6CF-4F4E-B800-0E69D84EE384}";
60pub const FOLDERID_PUBLICMUSIC :&str = "{3214FAB5-9757-4298-BB61-92A9DEAA44FF}";
61pub const FOLDERID_PUBLICPICTURES :&str = "{B6EBFB86-6907-413C-9AF7-4FC2ABF07CC5}";
62pub const FOLDERID_PUBLICRINGTONES :&str = "{E555AB60-153B-4D17-9F04-A5FE99FC15EC}";
63pub const FOLDERID_PUBLICUSERTILES :&str = "{0482AF6C-08F1-4C34-8C90-E17EC98B1E17}";
64pub const FOLDERID_PUBLICVIDEOS :&str = "{2400183A-6185-49FB-A2D8-4A392A602BA3}";
65pub const FOLDERID_QUICKLAUNCH :&str = "{52A4F021-7B75-48A9-9F6B-4B87A210BC8F}";
66pub const FOLDERID_RECENT :&str = "{AE50C081-EBD2-438A-8655-8A092E34987A}";
67pub const FOLDERID_RECORDEDTVLIBRARY :&str = "{1A6FDBA2-F42D-4358-A798-B74D745926C5}";
68pub const FOLDERID_RESOURCEDIR :&str = "{8AD10C31-2ADB-4296-A8F7-E4701232C972}";
69pub const FOLDERID_ROAMINGAPPDATA :&str = "{3EB685DB-65F9-4CF6-A03A-E3EF65729F3D}";
70pub const FOLDERID_ROAMEDTILEIMAGES :&str = "{AAA8D5A5-F1D6-4259-BAA8-78E7EF60835E}";
71pub const FOLDERID_ROAMINGTILES :&str = "{00BCFC5A-ED94-4E48-96A1-3F6217F21990}";
72pub const FOLDERID_SAMPLEMUSIC :&str = "{B250C668-F57D-4EE1-A63C-290EE7D1AA1F}";
73pub const FOLDERID_SAMPLEPICTURES :&str = "{C4900540-2379-4C75-844B-64E6FAF8716B}";
74pub const FOLDERID_SAMPLEPLAYLISTS :&str = "{15CA69B3-30EE-49C1-ACE1-6B5EC372AFB5}";
75pub const FOLDERID_SAMPLEVIDEOS :&str = "{859EAD94-2E85-48AD-A71A-0969CB56A6CD}";
76pub const FOLDERID_SAVEDGAMES :&str = "{4C5C32FF-BB9D-43B0-B5B4-2D72E54EAAA4}";
77pub const FOLDERID_SAVEDPICTURES :&str = "{3B193882-D3AD-4EAB-965A-69829D1FB59F}";
78pub const FOLDERID_SAVEDPICTURESLIBRARY :&str = "{E25B5812-BE88-4BD9-94B0-29233477B6C3}";
79pub const FOLDERID_SAVEDSEARCHES :&str = "{7D1D3A04-DEBB-4115-95CF-2F29DA2920DA}";
80pub const FOLDERID_SCREENSHOTS :&str = "{B7BEDE81-DF94-4682-A7D8-57A52620B86F}";
81pub const FOLDERID_SEARCHHISTORY :&str = "{0D4C3DB6-03A3-462F-A0E6-08924C41B5D4}";
82pub const FOLDERID_SEARCHTEMPLATES :&str = "{7E636BFE-DFA9-4D5E-B456-D7B39851D8A9}";
83pub const FOLDERID_SENDTO :&str = "{8983036C-27C0-404B-8F08-102D10DCFD74}";
84pub const FOLDERID_SIDEBARDEFAULTPARTS :&str = "{7B396E54-9EC5-4300-BE0A-2482EBAE1A26}";
85pub const FOLDERID_SIDEBARPARTS :&str = "{A75D362E-50FC-4FB7-AC2C-A8BEAA314493}";
86pub const FOLDERID_SKYDRIVE :&str = "{A52BBA46-E9E1-435F-B3D9-28DAA648C0F6}";
87pub const FOLDERID_SKYDRIVECAMERAROLL :&str = "{767E6811-49CB-4273-87C2-20F355E1085B}";
88pub const FOLDERID_SKYDRIVEDOCUMENTS :&str = "{24D89E24-2F19-4534-9DDE-6A6671FBB8FE}";
89pub const FOLDERID_SKYDRIVEPICTURES :&str = "{339719B5-8C47-4894-94C2-D8F77ADD44A6}";
90pub const FOLDERID_STARTMENU :&str = "{625B53C3-AB48-4EC1-BA1F-A1EF4146FC19}";
91pub const FOLDERID_STARTUP :&str = "{B97D20BB-F46A-4C97-BA10-5E3608430854}";
92pub const FOLDERID_SYSTEM :&str = "{1AC14E77-02E7-4E5D-B744-2EB1AE5198B7}";
93pub const FOLDERID_SYSTEMX86 :&str = "{D65231B0-B2F1-4857-A4CE-A8E7C6EA7D27}";
94pub const FOLDERID_TEMPLATES :&str = "{A63293E8-664E-48DB-A079-DF759E0509F7}";
95pub const FOLDERID_USERPINNED :&str = "{9E3995AB-1F9C-4F13-B827-48B24B6C7174}";
96pub const FOLDERID_USERPROFILES :&str = "{0762D272-C50A-4BB0-A382-697DCD729B80}";
97pub const FOLDERID_USERPROGRAMFILES :&str = "{5CD7AEE2-2219-4A67-B85D-6C9CE15660CB}";
98pub const FOLDERID_USERPROGRAMFILESCOMMON :&str = "{BCBD3057-CA5C-4622-B42D-BC56DB0AE516}";
99pub const FOLDERID_VIDEOS :&str = "{18989B1D-99B5-455B-841C-AB7C74E4DDFC}";
100pub const FOLDERID_VIDEOSLIBRARY :&str = "{491E922F-5643-4AF4-A7EB-4E7A138D8174}";
101pub const FOLDERID_WINDOWS :&str = "{F38BF404-1D43-42F2-9305-67DE0B28FC23}";
102
103pub const FOLDERID_ACCOUNT_PICTURES_VALUE: &str = "%APPDATA%\\Microsoft\\Windows\\AccountPictures";
104pub const FOLDERID_ADMINTOOLS_VALUE: &str ="%APPDATA%\\Microsoft\\Windows\\Start Menu\\Programs\\Administrative Tools";
105pub const FOLDERID_APPDATADESKTOP_VALUE: &str = "%LOCALAPPDATA%\\Desktop";
106pub const FOLDERID_APPDATADOCUMENTS_VALUE: &str = "%LOCALAPPDATA%\\Documents";
107pub const FOLDERID_APPDATAFAVORITES_VALUE: &str = "%LOCALAPPDATA%\\Favorites";
108pub const FOLDERID_APPDATAPROGRAMDATA_VALUE: &str = "%LOCALAPPDATA%\\ProgramData";
109pub const FOLDERID_APPLICATIONSHORTCUTS_VALUE: &str ="%LOCALAPPDATA%\\Microsoft\\Windows\\Application Shortcuts";
110pub const FOLDERID_CAMERAROLL_VALUE: &str = "%USERPROFILE%\\Pictures\\Camera Roll";
111pub const FOLDERID_CDBURNING_VALUE: &str = "%LOCALAPPDATA%\\Microsoft\\Windows\\Burn\\Burn";
112pub const FOLDERID_COMMONADMINTOOLS_VALUE: &str ="%ALLUSERSPROFILE%\\Microsoft\\Windows\\Start Menu\\Programs\\Administrative Tools";
113pub const FOLDERID_COMMONOEMLINKS_VALUE: &str = "%ALLUSERSPROFILE%\\OEM Links";
114pub const FOLDERID_COMMONPROGRAMS_VALUE: &str ="%ALLUSERSPROFILE%\\Microsoft\\Windows\\Start Menu\\Programs";
115pub const FOLDERID_COMMONSTARTMENU_VALUE: &str ="%ALLUSERSPROFILE%\\Microsoft\\Windows\\Start Menu";
116pub const FOLDERID_COMMONSTARTUP_VALUE: &str ="%ALLUSERSPROFILE%\\Microsoft\\Windows\\Start Menu\\Programs\\StartUp";
117pub const FOLDERID_COMMONTEMPLATES_VALUE: &str = "%ALLUSERSPROFILE%\\Microsoft\\Windows\\Templates";
118pub const FOLDERID_CONTACTS_VALUE: &str = "%USERPROFILE%\\Contacts";
119pub const FOLDERID_COOKIES_VALUE: &str = "%APPDATA%\\Microsoft\\Windows\\Cookies";
120pub const FOLDERID_DESKTOP_VALUE: &str = "%USERPROFILE%\\Desktop";
121pub const FOLDERID_DEVICEMETADATASTORE_VALUE: &str ="%ALLUSERSPROFILE%\\Microsoft\\Windows\\DeviceMetadataStore";
122pub const FOLDERID_DOCUMENTS_VALUE: &str = "%USERPROFILE%\\Documents";
123pub const FOLDERID_DOCUMENTSLIBRARY_VALUE: &str ="%APPDATA%\\Microsoft\\Windows\\Libraries\\Documents.library-ms";
124pub const FOLDERID_DOWNLOADS_VALUE: &str = "%USERPROFILE%\\Downloads";
125pub const FOLDERID_FAVORITES_VALUE: &str = "%USERPROFILE%\\Favorites";
126pub const FOLDERID_FONTS_VALUE: &str = "%windir%\\Fonts";
127pub const FOLDERID_GAMETASKS_VALUE: &str = "%LOCALAPPDATA%\\Microsoft\\Windows\\GameExplorer";
128pub const FOLDERID_HISTORY_VALUE: &str = "%LOCALAPPDATA%\\Microsoft\\Windows\\History";
129pub const FOLDERID_IMPLICITAPPSHORTCUTS_VALUE: &str ="%APPDATA%\\Microsoft\\Internet Explorer\\Quick Launch\\User Pinned\\ImplicitAppShortcuts";
130pub const FOLDERID_INTERNETCACHE_VALUE: &str ="%LOCALAPPDATA%\\Microsoft\\Windows\\Temporary Internet Files";
131pub const FOLDERID_LIBRARIES_VALUE: &str = "%APPDATA%\\Microsoft\\Windows\\Libraries";
132pub const FOLDERID_LINKS_VALUE: &str = "%USERPROFILE%\\Links";
133pub const FOLDERID_LOCALAPPDATA_VALUE: &str = "%LOCALAPPDATA%";
134pub const FOLDERID_LOCALAPPDATALOW_VALUE: &str = "%USERPROFILE%\\AppData\\LocalLow";
135pub const FOLDERID_MUSIC_VALUE: &str = "%USERPROFILE%\\Music";
136pub const FOLDERID_MUSICLIBRARY_VALUE: &str ="%APPDATA%\\Microsoft\\Windows\\Libraries\\Music.library-ms";
137pub const FOLDERID_NETHOOD_VALUE: &str = "%APPDATA%\\Microsoft\\Windows\\Network Shortcuts";
138pub const FOLDERID_OBJECTS3D_VALUE: &str = "%USERPROFILE%\\3D Objects";
139pub const FOLDERID_ORIGINALIMAGES_VALUE: &str ="%LOCALAPPDATA%\\Microsoft\\Windows Photo Gallery\\Original Images";
140pub const FOLDERID_PHOTOALBUMS_VALUE: &str = "%USERPROFILE%\\Pictures\\Slide Shows";
141pub const FOLDERID_PICTURESLIBRARY_VALUE: &str ="%APPDATA%\\Microsoft\\Windows\\Libraries\\Pictures.library-ms";
142pub const FOLDERID_PICTURES_VALUE: &str = "%USERPROFILE%\\Pictures";
143pub const FOLDERID_PLAYLISTS_VALUE: &str = "%USERPROFILE%\\Music\\Playlists";
144pub const FOLDERID_PRINTHOOD_VALUE: &str = "%APPDATA%\\Microsoft\\Windows\\Printer Shortcuts";
145pub const FOLDERID_PROFILE_VALUE: &str = "%USERPROFILE%";
146pub const FOLDERID_PROGRAMDATA_VALUE: &str = "%ALLUSERSPROFILE%";
147pub const FOLDERID_PROGRAMFILES_VALUE: &str = "%ProgramFiles%";
148pub const FOLDERID_PROGRAMFILESX64_VALUE: &str = "%ProgramFiles%";
149pub const FOLDERID_PROGRAMFILESX86_VALUE: &str = "%ProgramFiles%";
150pub const FOLDERID_PROGRAMFILESCOMMON_VALUE: &str = "%ProgramFiles%\\Common Files";
151pub const FOLDERID_PROGRAMFILESCOMMONX64_VALUE: &str = "%ProgramFiles%\\Common Files";
152pub const FOLDERID_PROGRAMFILESCOMMONX86_VALUE: &str = "%ProgramFiles%\\Common Files";
153pub const FOLDERID_PROGRAMS_VALUE: &str = "%APPDATA%\\Microsoft\\Windows\\Start Menu\\Programs";
154pub const FOLDERID_PUBLIC_VALUE: &str = "%PUBLIC%";
155pub const FOLDERID_PUBLICDESKTOP_VALUE: &str = "%PUBLIC%\\Desktop";
156pub const FOLDERID_PUBLICDOCUMENTS_VALUE: &str = "%PUBLIC%\\Documents";
157pub const FOLDERID_PUBLICDOWNLOADS_VALUE: &str = "%PUBLIC%\\Downloads";
158pub const FOLDERID_PUBLICGAMETASKS_VALUE: &str ="%ALLUSERSPROFILE%\\Microsoft\\Windows\\GameExplorer";
159pub const FOLDERID_PUBLICLIBRARIES_VALUE: &str = "%ALLUSERSPROFILE%\\Microsoft\\Windows\\Libraries";
160pub const FOLDERID_PUBLICMUSIC_VALUE: &str = "%PUBLIC%\\Music";
161pub const FOLDERID_PUBLICPICTURES_VALUE: &str = "%PUBLIC%\\Pictures";
162pub const FOLDERID_PUBLICRINGTONES_VALUE: &str = "%ALLUSERSPROFILE%\\Microsoft\\Windows\\Ringtones";
163pub const FOLDERID_PUBLICUSERTILES_VALUE: &str = "%PUBLIC%\\AccountPictures";
164pub const FOLDERID_PUBLICVIDEOS_VALUE: &str = "%PUBLIC%\\Videos";
165pub const FOLDERID_QUICKLAUNCH_VALUE: &str ="%APPDATA%\\Microsoft\\Internet Explorer\\Quick Launch";
166pub const FOLDERID_RECENT_VALUE: &str = "%APPDATA%\\Microsoft\\Windows\\Recent";
167pub const FOLDERID_RECORDEDTVLIBRARY_VALUE: &str = "%PUBLIC%\\RecordedTV.library-ms";
168pub const FOLDERID_RESOURCEDIR_VALUE: &str = "%windir%\\Resources";
169pub const FOLDERID_ROAMINGAPPDATA_VALUE: &str = "%APPDATA%";
170pub const FOLDERID_ROAMEDTILEIMAGES_VALUE: &str ="%LOCALAPPDATA%\\Microsoft\\Windows\\RoamedTileImages";
171pub const FOLDERID_ROAMINGTILES_VALUE: &str = "%LOCALAPPDATA%\\Microsoft\\Windows\\RoamingTiles";
172pub const FOLDERID_SAMPLEMUSIC_VALUE: &str = "%PUBLIC%\\Music\\Sample Music";
173pub const FOLDERID_SAMPLEPICTURES_VALUE: &str = "%PUBLIC%\\Pictures\\Sample Pictures";
174pub const FOLDERID_SAMPLEPLAYLISTS_VALUE: &str = "%PUBLIC%\\Music\\Sample Playlists";
175pub const FOLDERID_SAMPLEVIDEOS_VALUE: &str = "%PUBLIC%\\Videos\\Sample Videos";
176pub const FOLDERID_SAVEDGAMES_VALUE: &str = "%USERPROFILE%\\Saved Games";
177pub const FOLDERID_SAVEDPICTURES_VALUE: &str = "%USERPROFILE%\\Pictures\\Saved Pictures";
178pub const FOLDERID_SAVEDPICTURESLIBRARY_VALUE: &str ="%APPDATA%\\Microsoft\\Windows\\Libraries\\SavedPictures.library-ms";
179pub const FOLDERID_SAVEDSEARCHES_VALUE: &str = "%USERPROFILE%\\Searches";
180pub const FOLDERID_SCREENSHOTS_VALUE: &str = "%USERPROFILE%\\Pictures\\Screenshots";
181pub const FOLDERID_SEARCHHISTORY_VALUE: &str ="%LOCALAPPDATA%\\Microsoft\\Windows\\ConnectedSearch\\History";
182pub const FOLDERID_SEARCHTEMPLATES_VALUE: &str ="%LOCALAPPDATA%\\Microsoft\\Windows\\ConnectedSearch\\Templates";
183pub const FOLDERID_SENDTO_VALUE: &str = "%APPDATA%\\Microsoft\\Windows\\SendTo";
184pub const FOLDERID_SIDEBARDEFAULTPARTS_VALUE: &str = "%ProgramFiles%\\Windows Sidebar\\Gadgets";
185pub const FOLDERID_SIDEBARPARTS_VALUE: &str = "%LOCALAPPDATA%\\Microsoft\\Windows Sidebar\\Gadgets";
186pub const FOLDERID_SKYDRIVE_VALUE: &str = "%USERPROFILE%\\OneDrive";
187pub const FOLDERID_SKYDRIVECAMERAROLL_VALUE: &str ="%USERPROFILE%\\OneDrive\\Pictures\\Camera Roll";
188pub const FOLDERID_SKYDRIVEDOCUMENTS_VALUE: &str = "%USERPROFILE%\\OneDrive\\Documents";
189pub const FOLDERID_SKYDRIVEPICTURES_VALUE: &str = "%USERPROFILE%\\OneDrive\\Pictures";
190pub const FOLDERID_STARTMENU_VALUE: &str = "%APPDATA%\\Microsoft\\Windows\\Start Menu";
191pub const FOLDERID_STARTUP_VALUE: &str ="%APPDATA%\\Microsoft\\Windows\\Start Menu\\Programs\\StartUp";
192pub const FOLDERID_SYSTEM_VALUE: &str = "%windir%\\system32";
193pub const FOLDERID_SYSTEMX86_VALUE: &str = "%windir%\\system32";
194pub const FOLDERID_TEMPLATES_VALUE: &str = "%APPDATA%\\Microsoft\\Windows\\Templates";
195pub const FOLDERID_USERPINNED_VALUE: &str ="%APPDATA%\\Microsoft\\Internet Explorer\\Quick Launch\\User Pinned";
196pub const FOLDERID_USERPROFILES_VALUE: &str = "%SystemDrive%\\Users";
197pub const FOLDERID_USERPROGRAMFILES_VALUE: &str = "%LOCALAPPDATA%\\Programs";
198pub const FOLDERID_USERPROGRAMFILESCOMMON_VALUE: &str = "%LOCALAPPDATA%\\Programs\\Common";
199pub const FOLDERID_VIDEOS_VALUE: &str = "%USERPROFILE%\\Videos";
200pub const FOLDERID_VIDEOSLIBRARY_VALUE: &str ="%APPDATA%\\Microsoft\\Windows\\Libraries\\Videos.library-ms";
201pub const FOLDERID_WINDOWS_VALUE: &str = "%windir%";
202
203pub fn csidl_value(csidl: &str) -> Option<&'static str> {
204 Some(match csidl {
205 FOLDERID_ACCOUNT_PICTURES => FOLDERID_ACCOUNT_PICTURES_VALUE,
206 FOLDERID_ADMINTOOLS => FOLDERID_ADMINTOOLS_VALUE,
207 FOLDERID_APPDATADESKTOP => FOLDERID_APPDATADESKTOP_VALUE,
208 FOLDERID_APPDATADOCUMENTS => FOLDERID_APPDATADOCUMENTS_VALUE,
209 FOLDERID_APPDATAFAVORITES => FOLDERID_APPDATAFAVORITES_VALUE,
210 FOLDERID_APPDATAPROGRAMDATA => FOLDERID_APPDATAPROGRAMDATA_VALUE,
211 FOLDERID_APPLICATIONSHORTCUTS => FOLDERID_APPLICATIONSHORTCUTS_VALUE,
212 FOLDERID_CAMERAROLL => FOLDERID_CAMERAROLL_VALUE,
213 FOLDERID_CDBURNING => FOLDERID_CDBURNING_VALUE,
214 FOLDERID_COMMONADMINTOOLS => FOLDERID_COMMONADMINTOOLS_VALUE,
215 FOLDERID_COMMONOEMLINKS => FOLDERID_COMMONOEMLINKS_VALUE,
216 FOLDERID_COMMONPROGRAMS => FOLDERID_COMMONPROGRAMS_VALUE,
217 FOLDERID_COMMONSTARTMENU => FOLDERID_COMMONSTARTMENU_VALUE,
218 FOLDERID_COMMONSTARTUP => FOLDERID_COMMONSTARTUP_VALUE,
219 FOLDERID_COMMONTEMPLATES => FOLDERID_COMMONTEMPLATES_VALUE,
220 FOLDERID_CONTACTS => FOLDERID_CONTACTS_VALUE,
221 FOLDERID_COOKIES => FOLDERID_COOKIES_VALUE,
222 FOLDERID_DESKTOP => FOLDERID_DESKTOP_VALUE,
223 FOLDERID_DEVICEMETADATASTORE => FOLDERID_DEVICEMETADATASTORE_VALUE,
224 FOLDERID_DOCUMENTS => FOLDERID_DOCUMENTS_VALUE,
225 FOLDERID_DOCUMENTSLIBRARY => FOLDERID_DOCUMENTSLIBRARY_VALUE,
226 FOLDERID_DOWNLOADS => FOLDERID_DOWNLOADS_VALUE,
227 FOLDERID_FAVORITES => FOLDERID_FAVORITES_VALUE,
228 FOLDERID_FONTS => FOLDERID_FONTS_VALUE,
229 FOLDERID_GAMETASKS => FOLDERID_GAMETASKS_VALUE,
230 FOLDERID_HISTORY => FOLDERID_HISTORY_VALUE,
231 FOLDERID_IMPLICITAPPSHORTCUTS => FOLDERID_IMPLICITAPPSHORTCUTS_VALUE,
232 FOLDERID_INTERNETCACHE => FOLDERID_INTERNETCACHE_VALUE,
233 FOLDERID_LIBRARIES => FOLDERID_LIBRARIES_VALUE,
234 FOLDERID_LINKS => FOLDERID_LINKS_VALUE,
235 FOLDERID_LOCALAPPDATA => FOLDERID_LOCALAPPDATA_VALUE,
236 FOLDERID_LOCALAPPDATALOW => FOLDERID_LOCALAPPDATALOW_VALUE,
237 FOLDERID_MUSIC => FOLDERID_MUSIC_VALUE,
238 FOLDERID_MUSICLIBRARY => FOLDERID_MUSICLIBRARY_VALUE,
239 FOLDERID_NETHOOD => FOLDERID_NETHOOD_VALUE,
240 FOLDERID_OBJECTS3D => FOLDERID_OBJECTS3D_VALUE,
241 FOLDERID_ORIGINALIMAGES => FOLDERID_ORIGINALIMAGES_VALUE,
242 FOLDERID_PHOTOALBUMS => FOLDERID_PHOTOALBUMS_VALUE,
243 FOLDERID_PICTURESLIBRARY => FOLDERID_PICTURESLIBRARY_VALUE,
244 FOLDERID_PICTURES => FOLDERID_PICTURES_VALUE,
245 FOLDERID_PLAYLISTS => FOLDERID_PLAYLISTS_VALUE,
246 FOLDERID_PRINTHOOD => FOLDERID_PRINTHOOD_VALUE,
247 FOLDERID_PROFILE => FOLDERID_PROFILE_VALUE,
248 FOLDERID_PROGRAMDATA => FOLDERID_PROGRAMDATA_VALUE,
249 FOLDERID_PROGRAMFILES => FOLDERID_PROGRAMFILES_VALUE,
250 FOLDERID_PROGRAMFILESX64 => FOLDERID_PROGRAMFILESX64_VALUE,
251 FOLDERID_PROGRAMFILESX86 => FOLDERID_PROGRAMFILESX86_VALUE,
252 FOLDERID_PROGRAMFILESCOMMON => FOLDERID_PROGRAMFILESCOMMON_VALUE,
253 FOLDERID_PROGRAMFILESCOMMONX64 => FOLDERID_PROGRAMFILESCOMMONX64_VALUE,
254 FOLDERID_PROGRAMFILESCOMMONX86 => FOLDERID_PROGRAMFILESCOMMONX86_VALUE,
255 FOLDERID_PROGRAMS => FOLDERID_PROGRAMS_VALUE,
256 FOLDERID_PUBLIC => FOLDERID_PUBLIC_VALUE,
257 FOLDERID_PUBLICDESKTOP => FOLDERID_PUBLICDESKTOP_VALUE,
258 FOLDERID_PUBLICDOCUMENTS => FOLDERID_PUBLICDOCUMENTS_VALUE,
259 FOLDERID_PUBLICDOWNLOADS => FOLDERID_PUBLICDOWNLOADS_VALUE,
260 FOLDERID_PUBLICGAMETASKS => FOLDERID_PUBLICGAMETASKS_VALUE,
261 FOLDERID_PUBLICLIBRARIES => FOLDERID_PUBLICLIBRARIES_VALUE,
262 FOLDERID_PUBLICMUSIC => FOLDERID_PUBLICMUSIC_VALUE,
263 FOLDERID_PUBLICPICTURES => FOLDERID_PUBLICPICTURES_VALUE,
264 FOLDERID_PUBLICRINGTONES => FOLDERID_PUBLICRINGTONES_VALUE,
265 FOLDERID_PUBLICUSERTILES => FOLDERID_PUBLICUSERTILES_VALUE,
266 FOLDERID_PUBLICVIDEOS => FOLDERID_PUBLICVIDEOS_VALUE,
267 FOLDERID_QUICKLAUNCH => FOLDERID_QUICKLAUNCH_VALUE,
268 FOLDERID_RECENT => FOLDERID_RECENT_VALUE,
269 FOLDERID_RECORDEDTVLIBRARY => FOLDERID_RECORDEDTVLIBRARY_VALUE,
270 FOLDERID_RESOURCEDIR => FOLDERID_RESOURCEDIR_VALUE,
271 FOLDERID_ROAMINGAPPDATA => FOLDERID_ROAMINGAPPDATA_VALUE,
272 FOLDERID_ROAMEDTILEIMAGES => FOLDERID_ROAMEDTILEIMAGES_VALUE,
273 FOLDERID_ROAMINGTILES => FOLDERID_ROAMINGTILES_VALUE,
274 FOLDERID_SAMPLEMUSIC => FOLDERID_SAMPLEMUSIC_VALUE,
275 FOLDERID_SAMPLEPICTURES => FOLDERID_SAMPLEPICTURES_VALUE,
276 FOLDERID_SAMPLEPLAYLISTS => FOLDERID_SAMPLEPLAYLISTS_VALUE,
277 FOLDERID_SAMPLEVIDEOS => FOLDERID_SAMPLEVIDEOS_VALUE,
278 FOLDERID_SAVEDGAMES => FOLDERID_SAVEDGAMES_VALUE,
279 FOLDERID_SAVEDPICTURES => FOLDERID_SAVEDPICTURES_VALUE,
280 FOLDERID_SAVEDPICTURESLIBRARY => FOLDERID_SAVEDPICTURESLIBRARY_VALUE,
281 FOLDERID_SAVEDSEARCHES => FOLDERID_SAVEDSEARCHES_VALUE,
282 FOLDERID_SCREENSHOTS => FOLDERID_SCREENSHOTS_VALUE,
283 FOLDERID_SEARCHHISTORY => FOLDERID_SEARCHHISTORY_VALUE,
284 FOLDERID_SEARCHTEMPLATES => FOLDERID_SEARCHTEMPLATES_VALUE,
285 FOLDERID_SENDTO => FOLDERID_SENDTO_VALUE,
286 FOLDERID_SIDEBARDEFAULTPARTS => FOLDERID_SIDEBARDEFAULTPARTS_VALUE,
287 FOLDERID_SIDEBARPARTS => FOLDERID_SIDEBARPARTS_VALUE,
288 FOLDERID_SKYDRIVE => FOLDERID_SKYDRIVE_VALUE,
289 FOLDERID_SKYDRIVECAMERAROLL => FOLDERID_SKYDRIVECAMERAROLL_VALUE,
290 FOLDERID_SKYDRIVEDOCUMENTS => FOLDERID_SKYDRIVEDOCUMENTS_VALUE,
291 FOLDERID_SKYDRIVEPICTURES => FOLDERID_SKYDRIVEPICTURES_VALUE,
292 FOLDERID_STARTMENU => FOLDERID_STARTMENU_VALUE,
293 FOLDERID_STARTUP => FOLDERID_STARTUP_VALUE,
294 FOLDERID_SYSTEM => FOLDERID_SYSTEM_VALUE,
295 FOLDERID_SYSTEMX86 => FOLDERID_SYSTEMX86_VALUE,
296 FOLDERID_TEMPLATES => FOLDERID_TEMPLATES_VALUE,
297 FOLDERID_USERPINNED => FOLDERID_USERPINNED_VALUE,
298 FOLDERID_USERPROFILES => FOLDERID_USERPROFILES_VALUE,
299 FOLDERID_USERPROGRAMFILES => FOLDERID_USERPROGRAMFILES_VALUE,
300 FOLDERID_USERPROGRAMFILESCOMMON => FOLDERID_USERPROGRAMFILESCOMMON_VALUE,
301 FOLDERID_VIDEOS => FOLDERID_VIDEOS_VALUE,
302 FOLDERID_VIDEOSLIBRARY => FOLDERID_VIDEOSLIBRARY_VALUE,
303 FOLDERID_WINDOWS => FOLDERID_WINDOWS_VALUE,
304 _ => return None,
305 })
306}
307
308pub fn interpolate_csidl_path(pth : &mut str, env_vars : &UserEnvVars) -> Option<String> {
327 if !pth.starts_with('{') {
328 return Some(pth.to_string())
329 }
330 let pos = pth.as_bytes().iter().position(|&v| v == b'}')?;
331 (&mut pth[0..pos + 1]).make_ascii_uppercase();
332 let csidl = &pth[0..pos + 1];
333 let rest = &pth[pos + 1..];
334 let csidl_value = csidl_value(csidl)?;
335 let mut ret = String::with_capacity(256);
336 interpolate_env_vars(csidl_value, env_vars, &mut ret)?;
337 ret.push_str(rest);
338 Some(ret)
339}
340
341#[test]
342fn should_interpolate_complex_env_vars_with_csidl() {
343 let env_vars = {
344 let mut map = UserEnvVars::new();
345 map.insert("APPDATA".into(), "C:\\ProgramData".into());
346 map.insert("LOCALAPPDATA".into(), "%USERPROFILE%\\AppData\\Local".into());
347 map.insert("ProgramFiles".into(), "C:\\Program Files".into());
348 map.insert("USERPROFILE".into(), "C:\\Users\\tester".into());
349 map
350 };
351 let mut pth = r"{6D809377-6AF0-444B-8957-A3773F02200E}\Electronic Arts\EA Desktop\EA Desktop\EADesktop.exe".to_string();
352 let interpolated = interpolate_csidl_path(&mut pth, &env_vars).unwrap();
353 assert_eq!(r"C:\Program Files\Electronic Arts\EA Desktop\EA Desktop\EADesktop.exe", interpolated);
354 let mut pth = r"{B2C5E279-7ADD-439F-B28C-C41FE1BBF672}\Electronic Arts\EA Desktop\EA Desktop\EADesktop.exe".to_string();
355 let interpolated = interpolate_csidl_path(&mut pth, &env_vars).unwrap();
356 assert_eq!(r"C:\Users\tester\AppData\Local\Desktop\Electronic Arts\EA Desktop\EA Desktop\EADesktop.exe", interpolated);
357}