@@ -159,47 +159,45 @@ private async Task SetAsOpenFileDialogAsync()
159159
160160 private async Task ImportSettingsAsync()
161161 {
162- FileOpenPicker filePicker = InitializeWithWindow ( new FileOpenPicker ( ) ) ;
163- filePicker . FileTypeFilter . Add ( ".zip" ) ;
162+ string [ ] extensions = [ "ZipFileCapitalized" . GetLocalizedResource ( ) , "*.zip" ] ;
163+ CommonDialogService . Open_FileOpenDialog ( MainWindow . Instance . WindowHandle , false , extensions , Environment . SpecialFolder . Desktop , out var filePath ) ;
164164
165- StorageFile file = await filePicker . PickSingleFileAsync ( ) ;
166- if ( file is not null )
165+ try
167166 {
168- try
169- {
170- var zipFolder = await ZipStorageFolder . FromStorageFileAsync ( file ) ;
171- if ( zipFolder is null )
172- return;
173-
174- var localFolderPath = ApplicationData. Current. LocalFolder. Path;
175- var settingsFolder = await StorageFolder . GetFolderFromPathAsync ( Path . Combine ( localFolderPath , Constants . LocalSettings . SettingsFolderName ) ) ;
176-
177- // Import user settings
178- var userSettingsFile = await zipFolder . GetFileAsync ( Constants . LocalSettings . UserSettingsFileName ) ;
179- string importSettings = await userSettingsFile . ReadTextAsync ( ) ;
180- UserSettingsService . ImportSettings ( importSettings ) ;
181-
182- // Import file tags list and DB
183- var fileTagsList = await zipFolder . GetFileAsync ( Constants . LocalSettings . FileTagSettingsFileName ) ;
184- string importTags = await fileTagsList . ReadTextAsync ( ) ;
185- fileTagsSettingsService . ImportSettings ( importTags ) ;
186- var fileTagsDB = await zipFolder . GetFileAsync ( Constants . LocalSettings . FileTagSettingsDatabaseFileName ) ;
187- string importTagsDB = await fileTagsDB . ReadTextAsync ( ) ;
188- var tagDbInstance = FileTagsHelper. GetDbInstance( ) ;
189- tagDbInstance . Import ( importTagsDB ) ;
190-
191- // Import layout preferences and DB
192- var layoutPrefsDB = await zipFolder . GetFileAsync ( Constants . LocalSettings . UserSettingsDatabaseFileName ) ;
193- string importPrefsDB = await layoutPrefsDB . ReadTextAsync ( ) ;
194- var layoutDbInstance = LayoutPreferencesManager. GetDatabaseManagerInstance( ) ;
195- layoutDbInstance . Import ( importPrefsDB ) ;
196- }
197- catch ( Exception ex )
198- {
199- App . Logger . LogWarning ( ex , "Error importing settings" ) ;
200- UIHelpers. CloseAllDialogs ( ) ;
201- await DialogDisplayHelper. ShowDialogAsync ( "SettingsImportErrorTitle" . GetLocalizedResource ( ) , "SettingsImportErrorDescription" . GetLocalizedResource ( ) ) ;
202- }
167+ var file = await StorageHelpers . ToStorageItem < BaseStorageFile > ( filePath ) ;
168+
169+ var zipFolder = await ZipStorageFolder . FromStorageFileAsync ( file ) ;
170+ if ( zipFolder is null )
171+ return;
172+
173+ var localFolderPath = ApplicationData. Current. LocalFolder. Path;
174+ var settingsFolder = await StorageFolder . GetFolderFromPathAsync ( Path . Combine ( localFolderPath , Constants . LocalSettings . SettingsFolderName ) ) ;
175+
176+ // Import user settings
177+ var userSettingsFile = await zipFolder . GetFileAsync ( Constants . LocalSettings . UserSettingsFileName ) ;
178+ string importSettings = await userSettingsFile . ReadTextAsync ( ) ;
179+ UserSettingsService. ImportSettings ( importSettings ) ;
180+
181+ // Import file tags list and DB
182+ var fileTagsList = await zipFolder . GetFileAsync ( Constants . LocalSettings . FileTagSettingsFileName ) ;
183+ string importTags = await fileTagsList . ReadTextAsync ( ) ;
184+ fileTagsSettingsService. ImportSettings ( importTags ) ;
185+ var fileTagsDB = await zipFolder . GetFileAsync ( Constants . LocalSettings . FileTagSettingsDatabaseFileName ) ;
186+ string importTagsDB = await fileTagsDB . ReadTextAsync ( ) ;
187+ var tagDbInstance = FileTagsHelper. GetDbInstance( ) ;
188+ tagDbInstance . Import ( importTagsDB ) ;
189+
190+ // Import layout preferences and DB
191+ var layoutPrefsDB = await zipFolder . GetFileAsync ( Constants . LocalSettings . UserSettingsDatabaseFileName ) ;
192+ string importPrefsDB = await layoutPrefsDB . ReadTextAsync ( ) ;
193+ var layoutDbInstance = LayoutPreferencesManager. GetDatabaseManagerInstance( ) ;
194+ layoutDbInstance . Import ( importPrefsDB ) ;
195+ }
196+ catch ( Exception ex )
197+ {
198+ App . Logger . LogWarning ( ex , "Error importing settings" ) ;
199+ UIHelpers. CloseAllDialogs ( ) ;
200+ await DialogDisplayHelper. ShowDialogAsync ( "SettingsImportErrorTitle" . GetLocalizedResource ( ) , "SettingsImportErrorDescription" . GetLocalizedResource ( ) ) ;
203201 }
204202 }
205203
@@ -208,39 +206,48 @@ private async Task ExportSettingsAsync()
208206 string [ ] extensions = [ "ZipFileCapitalized" . GetLocalizedResource ( ) , "*.zip" ] ;
209207 CommonDialogService . Open_FileSaveDialog ( MainWindow . Instance . WindowHandle , false , extensions , Environment . SpecialFolder . Desktop , out var filePath ) ;
210208
211- var file = await StorageHelpers. ToStorageItem < StorageFile > ( filePath ) ;
212- if ( file is not null )
209+ try
213210 {
214- try
215- {
216- await ZipStorageFolder. InitArchive ( file , OutArchiveFormat . Zip ) ;
211+ var handle = Win32PInvoke. CreateFileFromAppW(
212+ filePath ,
213+ Win32PInvoke . GENERIC_READ | Win32PInvoke . GENERIC_WRITE ,
214+ Win32PInvoke . FILE_SHARE_READ | Win32PInvoke . FILE_SHARE_WRITE ,
215+ nint . Zero ,
216+ Win32PInvoke . CREATE_NEW ,
217+ 0 ,
218+ nint . Zero ) ;
217219
218- var zipFolder = ( ZipStorageFolder ) await ZipStorageFolder. FromStorageFileAsync ( file ) ;
219- if ( zipFolder is null )
220- return;
220+ Win32PInvoke . CloseHandle ( handle ) ;
221221
222- var localFolderPath = ApplicationData . Current . LocalFolder . Path ;
222+ var file = await StorageHelpers . ToStorageItem < BaseStorageFile > ( filePath ) ;
223223
224- // Export user settings
225- var exportSettings = UTF8Encoding . UTF8 . GetBytes ( ( string ) UserSettingsService . ExportSettings ( ) ) ;
226- await zipFolder. CreateFileAsync ( new MemoryStream ( exportSettings ) , Constants . LocalSettings . UserSettingsFileName , CreationCollisionOption . ReplaceExisting ) ;
224+ await ZipStorageFolder . InitArchive ( file , OutArchiveFormat . Zip ) ;
227225
228- // Export file tags list and DB
229- var exportTags = UTF8Encoding. UTF8 . GetBytes ( ( string ) fileTagsSettingsService . ExportSettings ( ) ) ;
230- await zipFolder. CreateFileAsync ( new MemoryStream ( exportTags ) , Constants . LocalSettings . FileTagSettingsFileName , CreationCollisionOption . ReplaceExisting ) ;
231- var tagDbInstance = FileTagsHelper. GetDbInstance ( ) ;
232- byte [ ] exportTagsDB = UTF8Encoding . UTF8 . GetBytes ( tagDbInstance . Export ( ) ) ;
233- await zipFolder . CreateFileAsync ( new MemoryStream ( exportTagsDB ) , Constants . LocalSettings . FileTagSettingsDatabaseFileName , CreationCollisionOption . ReplaceExisting ) ;
226+ var zipFolder = ( ZipStorageFolder ) await ZipStorageFolder . FromStorageFileAsync ( file ) ;
227+ if ( zipFolder is null )
228+ return;
234229
235- // Export layout preferences DB
236- var layoutDbInstance = LayoutPreferencesManager. GetDatabaseManagerInstance( ) ;
237- byte [ ] exportPrefsDB = UTF8Encoding . UTF8 . GetBytes ( layoutDbInstance . Export ( ) ) ;
238- await zipFolder . CreateFileAsync ( new MemoryStream ( exportPrefsDB ) , Constants . LocalSettings . UserSettingsDatabaseFileName , CreationCollisionOption . ReplaceExisting ) ;
239- }
240- catch ( Exception ex )
241- {
242- App. Logger . LogWarning ( ex , "Error exporting settings" ) ;
243- }
230+ var localFolderPath = ApplicationData. Current . LocalFolder . Path ;
231+
232+ // Export user settings
233+ var exportSettings = UTF8Encoding . UTF8 . GetBytes ( ( string ) UserSettingsService . ExportSettings ( ) ) ;
234+ await zipFolder. CreateFileAsync ( new MemoryStream ( exportSettings ) , Constants . LocalSettings . UserSettingsFileName , CreationCollisionOption . ReplaceExisting ) ;
235+
236+ // Export file tags list and DB
237+ var exportTags = UTF8Encoding . UTF8 . GetBytes ( ( string ) fileTagsSettingsService . ExportSettings ( ) ) ;
238+ await zipFolder. CreateFileAsync ( new MemoryStream ( exportTags ) , Constants . LocalSettings . FileTagSettingsFileName , CreationCollisionOption . ReplaceExisting ) ;
239+ var tagDbInstance = FileTagsHelper. GetDbInstance ( ) ;
240+ byte [ ] exportTagsDB = UTF8Encoding . UTF8 . GetBytes ( tagDbInstance . Export ( ) ) ;
241+ await zipFolder . CreateFileAsync ( new MemoryStream ( exportTagsDB ) , Constants . LocalSettings . FileTagSettingsDatabaseFileName , CreationCollisionOption . ReplaceExisting ) ;
242+
243+ // Export layout preferences DB
244+ var layoutDbInstance = LayoutPreferencesManager . GetDatabaseManagerInstance ( ) ;
245+ byte [ ] exportPrefsDB = UTF8Encoding . UTF8 . GetBytes ( layoutDbInstance . Export ( ) ) ;
246+ await zipFolder. CreateFileAsync ( new MemoryStream ( exportPrefsDB ) , Constants . LocalSettings . UserSettingsDatabaseFileName , CreationCollisionOption . ReplaceExisting ) ;
247+ }
248+ catch ( Exception ex )
249+ {
250+ App. Logger . LogWarning ( ex , "Error exporting settings" ) ;
244251 }
245252 }
246253
0 commit comments