feat: skip icon download during regex edit

This commit is contained in:
relikd
2025-06-24 15:36:45 +02:00
parent 839eee7d39
commit 82e9365272

View File

@@ -62,6 +62,7 @@
@property (strong) FeedDownload *memFeed; @property (strong) FeedDownload *memFeed;
@property (weak) FaviconDownload *memIcon; @property (weak) FaviconDownload *memIcon;
@property (strong) RefreshStatisticsView *statisticsView; @property (strong) RefreshStatisticsView *statisticsView;
@property (nonatomic, assign) BOOL skipIconDownload;
@property (nonatomic, assign) BOOL openRegexAfterDownload; @property (nonatomic, assign) BOOL openRegexAfterDownload;
@property (weak) id eventMonitor; @property (weak) id eventMonitor;
@end @end
@@ -115,7 +116,8 @@
[f.meta setRefreshIfChanged:intv]; [f.meta setRefreshIfChanged:intv];
if (self.memFeed) { if (self.memFeed) {
[self.memFeed copyValuesTo:f ignoreError:YES]; [self.memFeed copyValuesTo:f ignoreError:YES];
[f setNewIcon:self.faviconFile]; // only if downloaded anything (nil deletes icon!) if (self.faviconFile) // only if downloaded anything (nil deletes icon!)
[f setNewIcon:self.faviconFile];
self.faviconFile = nil; self.faviconFile = nil;
} }
} }
@@ -134,9 +136,11 @@
- (void)downloadRSS { - (void)downloadRSS {
[self cancelDownloads]; [self cancelDownloads];
[self.modalSheet setDoneEnabled:NO]; // prevent user from closing the dialog during download [self.modalSheet setDoneEnabled:NO]; // prevent user from closing the dialog during download
[self.view.spinnerURL startAnimation:nil];
[self.view.spinnerName startAnimation:nil]; [self.view.spinnerName startAnimation:nil];
if (!self.skipIconDownload) {
[self.view.spinnerURL startAnimation:nil];
self.view.favicon.image = nil; self.view.favicon.image = nil;
}
self.view.warningButton.hidden = YES; self.view.warningButton.hidden = YES;
// User didn't change title since last fetch. Will be pre-filled with new title after download // User didn't change title since last fetch. Will be pre-filled with new title after download
if ([self.view.name.stringValue isEqualToString:self.view.name.placeholderString]) { if ([self.view.name.stringValue isEqualToString:self.view.name.placeholderString]) {
@@ -197,7 +201,7 @@
self.view.favicon.hidden = hasError; self.view.favicon.hidden = hasError;
self.view.warningButton.hidden = !hasError; self.view.warningButton.hidden = !hasError;
// Start favicon download // Start favicon download
if (hasError) if (hasError || self.skipIconDownload)
[self downloadComplete]; [self downloadComplete];
else else
self.memIcon = [[sender faviconDownload] startWithDelegate:self]; self.memIcon = [[sender faviconDownload] startWithDelegate:self];
@@ -225,6 +229,7 @@
- (void)downloadComplete { - (void)downloadComplete {
[self.view.spinnerURL stopAnimation:nil]; [self.view.spinnerURL stopAnimation:nil];
[self.modalSheet setDoneEnabled:YES]; [self.modalSheet setDoneEnabled:YES];
self.skipIconDownload = NO;
if (self.openRegexAfterDownload) { if (self.openRegexAfterDownload) {
[self openRegexConverter]; [self openRegexConverter];
@@ -237,6 +242,7 @@
- (void)openRegexConverter { - (void)openRegexConverter {
if (!self.openRegexAfterDownload) { if (!self.openRegexAfterDownload) {
self.openRegexAfterDownload = YES; self.openRegexAfterDownload = YES;
self.skipIconDownload = self.feedGroup.feed.hasIcon;
[self downloadRSS]; [self downloadRSS];
return; return;
} }
@@ -247,16 +253,18 @@
CGFloat minWidthDiff = previous.size.width - self.modalSheet.minSize.width; CGFloat minWidthDiff = previous.size.width - self.modalSheet.minSize.width;
[self.modalSheet setFrame:NSInsetRect(previous, minWidthDiff / 2.0, 0) display:NO]; [self.modalSheet setFrame:NSInsetRect(previous, minWidthDiff / 2.0, 0) display:NO];
Feed *feed = self.feedGroup.feed; RegexConverterController *c = [RegexConverterController withData:self.memFeed.rawData andConverter:self.feedGroup.feed.regex];
RegexConverterController *c = [RegexConverterController withData:self.memFeed.rawData andConverter:feed.regex];
[self.modalSheet.sheetParent beginCriticalSheet:[c getModalSheet] completionHandler:^(NSModalResponse returnCode) { [self.modalSheet.sheetParent beginCriticalSheet:[c getModalSheet] completionHandler:^(NSModalResponse returnCode) {
// reset previous size // reset previous size
[self.modalSheet setFrame:previous display:NO]; [self.modalSheet setFrame:previous display:NO];
if (returnCode == NSModalResponseOK) { if (returnCode == NSModalResponseOK) {
[c applyChanges:feed]; [c applyChanges:self.feedGroup.feed];
self.view.regexConverterButton.hidden = !feed.regex; self.skipIconDownload = self.feedGroup.feed.hasIcon;
self.view.regexConverterButton.hidden = !self.feedGroup.feed.regex;
[self downloadRSS]; [self downloadRSS];
} else {
[self populateTextFields:self.feedGroup];
} }
}]; }];
} }