From 406d7b60bbb85dbe6c5575bcd67cf5d776786fea Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Fri, 9 Feb 2024 16:24:14 +0300 Subject: [PATCH] [macos] fix bug 65972 --- .../Common/ASCCommonViewController.mm | 5 +++-- .../Controllers/Common/ASCEventsController.mm | 9 ++++++++- .../Controls/ASCSavePanelWithFormatController.h | 1 + .../Controls/ASCSavePanelWithFormatController.m | 17 +++++++++++++++++ 4 files changed, 29 insertions(+), 3 deletions(-) diff --git a/macos/ONLYOFFICE/Code/Controllers/Common/ASCCommonViewController.mm b/macos/ONLYOFFICE/Code/Controllers/Common/ASCCommonViewController.mm index fdbc3b9f1..9133e96d0 100644 --- a/macos/ONLYOFFICE/Code/Controllers/Common/ASCCommonViewController.mm +++ b/macos/ONLYOFFICE/Code/Controllers/Common/ASCCommonViewController.mm @@ -583,14 +583,15 @@ [self.tabsControl selectTab:tab]; - __block NSInteger fileType = [params[@"fileType"] intValue]; +// __block NSInteger fileType = [params[@"fileType"] intValue]; __block ASCSavePanelWithFormatController * saveController = [ASCSavePanelWithFormatController new]; NSSavePanel * savePanel = [saveController savePanel]; saveController.filters = formats; - saveController.filterType = fileType; + saveController.original = params[@"original"]; +// saveController.filterType = fileType; if (!path || path.length < 1) { path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject]; diff --git a/macos/ONLYOFFICE/Code/Controllers/Common/ASCEventsController.mm b/macos/ONLYOFFICE/Code/Controllers/Common/ASCEventsController.mm index f557b627e..39beae553 100644 --- a/macos/ONLYOFFICE/Code/Controllers/Common/ASCEventsController.mm +++ b/macos/ONLYOFFICE/Code/Controllers/Common/ASCEventsController.mm @@ -330,11 +330,18 @@ public: // End hotfix ODP presentation + NSDictionary * formatInfo = [ASCConstants ascFormatsInfo][@(pData->get_FileType())]; + NSDictionary * originalFileInfo = @{ + @"type" : @(pData->get_FileType()), + @"typeInfo" : formatInfo ? formatInfo : @{} + }; + [[NSNotificationCenter defaultCenter] postNotificationName:CEFEventNameSaveLocal object:nil userInfo:@{ @"path" : [NSString stringWithstdwstring:pData->get_Path()], - @"fileType": @(pData->get_FileType()), +// @"fileType": @(pData->get_FileType()), + @"original": originalFileInfo, @"supportedFormats" : supportFormats, @"viewId" : [NSString stringWithFormat:@"%d", pData->get_Id()] }]; diff --git a/macos/ONLYOFFICE/Code/Controls/ASCSavePanelWithFormatController.h b/macos/ONLYOFFICE/Code/Controls/ASCSavePanelWithFormatController.h index aac9e8801..a4e831ce9 100644 --- a/macos/ONLYOFFICE/Code/Controls/ASCSavePanelWithFormatController.h +++ b/macos/ONLYOFFICE/Code/Controls/ASCSavePanelWithFormatController.h @@ -44,4 +44,5 @@ @property (nonatomic) NSSavePanel *savePanel; @property (nonatomic) NSArray * filters; @property (nonatomic) NSInteger filterType; +@property (nonatomic) NSDictionary * original; @end diff --git a/macos/ONLYOFFICE/Code/Controls/ASCSavePanelWithFormatController.m b/macos/ONLYOFFICE/Code/Controls/ASCSavePanelWithFormatController.m index e655f5e95..c597e2591 100644 --- a/macos/ONLYOFFICE/Code/Controls/ASCSavePanelWithFormatController.m +++ b/macos/ONLYOFFICE/Code/Controls/ASCSavePanelWithFormatController.m @@ -109,6 +109,18 @@ }]; if (NSNotFound == index) { + if ( _original ) { + NSString * postfix = _original[@"typeInfo"][@"extension"]; + if ( postfix ) { + predicate = [NSPredicate predicateWithFormat:@"self.extension == %@", postfix]; + index = [_filters indexOfObjectPassingTest:^BOOL(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { + return [predicate evaluateWithObject:obj]; + }]; + } + } + } + + if ( NSNotFound == index ) { NSInteger selectIndex = MAX([_popupFormats indexOfSelectedItem], 0); _filterType = [_filters[selectIndex][@"type"] intValue]; } else { @@ -117,4 +129,9 @@ } } +- (void)setOriginal:(NSDictionary *)original { + _original = original; + [self setFilterType:[original[@"type"] intValue]]; +} + @end