Compare commits
10 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fb8f5be289 | ||
|
|
51e1f07531 | ||
|
|
b21cc20746 | ||
|
|
be600b6c5f | ||
|
|
a9c3ccc1f7 | ||
|
|
c4c5559d2d | ||
|
|
68b25d10dd | ||
|
|
24c785662a | ||
|
|
2a589f51a8 | ||
|
|
30527d50e6 |
20
CHANGELOG.md
20
CHANGELOG.md
@@ -8,6 +8,21 @@ and this project does adhere to [Semantic Versioning](https://semver.org/spec/v2
|
|||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
|
||||||
|
|
||||||
|
## [1.2.2] – 2023-06-18
|
||||||
|
### Fixed
|
||||||
|
- Feed menu sporadically not opening
|
||||||
|
|
||||||
|
|
||||||
|
## [1.2.1] – 2023-06-17
|
||||||
|
### Added
|
||||||
|
- Universal binary (Intel+AppleSilicon)
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- Autoresize issues of UI elements in macOS Ventura
|
||||||
|
- Flexible width TabBarItem
|
||||||
|
- Updated About page (removed dead link)
|
||||||
|
|
||||||
|
|
||||||
## [1.2.0] – 2022-10-01
|
## [1.2.0] – 2022-10-01
|
||||||
### Added
|
### Added
|
||||||
- *UI*: Add option to hide read articles (show only unread)
|
- *UI*: Add option to hide read articles (show only unread)
|
||||||
@@ -158,7 +173,10 @@ and this project does adhere to [Semantic Versioning](https://semver.org/spec/v2
|
|||||||
Initial release
|
Initial release
|
||||||
|
|
||||||
|
|
||||||
[Unreleased]: https://github.com/relikd/baRSS/compare/v1.1.3...HEAD
|
[Unreleased]: https://github.com/relikd/baRSS/compare/v1.2.2...HEAD
|
||||||
|
[1.2.2]: https://github.com/relikd/baRSS/compare/v1.2.1...v1.2.2
|
||||||
|
[1.2.1]: https://github.com/relikd/baRSS/compare/v1.2.0...v1.2.1
|
||||||
|
[1.2.0]: https://github.com/relikd/baRSS/compare/v1.1.3...v1.2.0
|
||||||
[1.1.3]: https://github.com/relikd/baRSS/compare/v1.1.2...v1.1.3
|
[1.1.3]: https://github.com/relikd/baRSS/compare/v1.1.2...v1.1.3
|
||||||
[1.1.2]: https://github.com/relikd/baRSS/compare/v1.1.1...v1.1.2
|
[1.1.2]: https://github.com/relikd/baRSS/compare/v1.1.1...v1.1.2
|
||||||
[1.1.1]: https://github.com/relikd/baRSS/compare/v1.1.0...v1.1.1
|
[1.1.1]: https://github.com/relikd/baRSS/compare/v1.1.0...v1.1.1
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
github "relikd/RSXML2" "v2.0.1"
|
|
||||||
18
README.md
18
README.md
@@ -42,18 +42,20 @@ Go to [releases](https://github.com/relikd/baRSS/releases) and downloaded the la
|
|||||||
Searching for the App Store release? Read this [notice](#app-store-notice).
|
Searching for the App Store release? Read this [notice](#app-store-notice).
|
||||||
|
|
||||||
### Build from source
|
### Build from source
|
||||||
You'll need Xcode and [Carthage](https://github.com/Carthage/Carthage#installing-carthage).
|
You'll need Xcode, [RSXML2] \(required), and [QLOPML] \(optional).
|
||||||
The latter is optional, you can build the [RSXML2] library from source instead.
|
|
||||||
Carthage just makes it more convenient.
|
```sh
|
||||||
Download and unzip this project, navigate to the root folder and run `carthage bootstrap --platform macOS`.
|
git clone https://github.com/relikd/baRSS
|
||||||
|
git clone https://github.com/relikd/RSXML2
|
||||||
|
git clone https://github.com/relikd/QLOPML
|
||||||
|
```
|
||||||
|
|
||||||
Next, you need to clone [QLOPML](https://github.com/relikd/QLOPML) in the same folder where this project is.
|
|
||||||
Alternatively, you can simply delete the `QLOPML` project reference without much harm.
|
Alternatively, you can simply delete the `QLOPML` project reference without much harm.
|
||||||
`QLOPML` is a Quick Look plugin for `.opml` files.
|
`QLOPML` is a Quick Look plugin for `.opml` files.
|
||||||
It will display the file contents whenever you hit spacebar.
|
It will display the file contents whenever you hit spacebar.
|
||||||
|
|
||||||
That's it.
|
That's it.
|
||||||
Open Xcode and build the project.
|
Open `baRSS/baRSS.xcodeproj` and build the project.
|
||||||
Note, there are some compiler flags that append 'beta' to the development release.
|
Note, there are some compiler flags that append 'beta' to the development release.
|
||||||
If you prefer the optimized release version go to `Product > Archive`.
|
If you prefer the optimized release version go to `Product > Archive`.
|
||||||
|
|
||||||
@@ -165,7 +167,7 @@ But on the other hand, now it is macOS 10.12 compatible.
|
|||||||
|
|
||||||
### 3rd Party Libraries
|
### 3rd Party Libraries
|
||||||
|
|
||||||
This project uses a modified version of Brent Simmons' [RSXML](https://github.com/brentsimmons/RSXML) for feed parsing.
|
This project uses a modified version of Brent Simmons' [RSXML] for feed parsing.
|
||||||
[RSXML2] is licensed under a MIT license (same as this project).
|
[RSXML2] is licensed under a MIT license (same as this project).
|
||||||
|
|
||||||
|
|
||||||
@@ -176,4 +178,6 @@ This project uses a modified version of Brent Simmons' [RSXML](https://github.co
|
|||||||
- First prototype used __feedparser python__ library
|
- First prototype used __feedparser python__ library
|
||||||
|
|
||||||
|
|
||||||
|
[QLOPML]: https://github.com/relikd/QLOPML
|
||||||
[RSXML2]: https://github.com/relikd/RSXML2
|
[RSXML2]: https://github.com/relikd/RSXML2
|
||||||
|
[RSXML]: https://github.com/brentsimmons/RSXML
|
||||||
|
|||||||
@@ -14,9 +14,6 @@
|
|||||||
54209E942117325100F3B5EF /* DrawImage.m in Sources */ = {isa = PBXBuildFile; fileRef = 54209E932117325100F3B5EF /* DrawImage.m */; };
|
54209E942117325100F3B5EF /* DrawImage.m in Sources */ = {isa = PBXBuildFile; fileRef = 54209E932117325100F3B5EF /* DrawImage.m */; };
|
||||||
544B011A2114B41200386E5C /* ModalSheet.m in Sources */ = {isa = PBXBuildFile; fileRef = 544B01192114B41200386E5C /* ModalSheet.m */; };
|
544B011A2114B41200386E5C /* ModalSheet.m in Sources */ = {isa = PBXBuildFile; fileRef = 544B01192114B41200386E5C /* ModalSheet.m */; };
|
||||||
544B011D2114EE9100386E5C /* AppHook.m in Sources */ = {isa = PBXBuildFile; fileRef = 544B011C2114EE9100386E5C /* AppHook.m */; };
|
544B011D2114EE9100386E5C /* AppHook.m in Sources */ = {isa = PBXBuildFile; fileRef = 544B011C2114EE9100386E5C /* AppHook.m */; };
|
||||||
544DCCB9212A2B4D002DBC46 /* RSXML2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 544DCCB8212A2B4D002DBC46 /* RSXML2.framework */; };
|
|
||||||
544DCCBA212A2B4D002DBC46 /* RSXML2.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 544DCCB8212A2B4D002DBC46 /* RSXML2.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
|
||||||
544DCCBE212A2B6F002DBC46 /* RSXML2.framework.dSYM in CopyFiles */ = {isa = PBXBuildFile; fileRef = 544DCCBD212A2B6F002DBC46 /* RSXML2.framework.dSYM */; };
|
|
||||||
54501010230E9C8600F0B165 /* FeedDownload.m in Sources */ = {isa = PBXBuildFile; fileRef = 5450100F230E9C8600F0B165 /* FeedDownload.m */; };
|
54501010230E9C8600F0B165 /* FeedDownload.m in Sources */ = {isa = PBXBuildFile; fileRef = 5450100F230E9C8600F0B165 /* FeedDownload.m */; };
|
||||||
546A6A2922C583390034E806 /* SettingsGeneralView.m in Sources */ = {isa = PBXBuildFile; fileRef = 54D857D122802309001BA1C8 /* SettingsGeneralView.m */; };
|
546A6A2922C583390034E806 /* SettingsGeneralView.m in Sources */ = {isa = PBXBuildFile; fileRef = 54D857D122802309001BA1C8 /* SettingsGeneralView.m */; };
|
||||||
546A6A2C22C584AF0034E806 /* SettingsAppearanceView.m in Sources */ = {isa = PBXBuildFile; fileRef = 546A6A2A22C584AF0034E806 /* SettingsAppearanceView.m */; };
|
546A6A2C22C584AF0034E806 /* SettingsAppearanceView.m in Sources */ = {isa = PBXBuildFile; fileRef = 546A6A2A22C584AF0034E806 /* SettingsAppearanceView.m */; };
|
||||||
@@ -25,6 +22,8 @@
|
|||||||
546FC44321189975007CC3A3 /* SettingsGeneral.m in Sources */ = {isa = PBXBuildFile; fileRef = 546FC44121189975007CC3A3 /* SettingsGeneral.m */; };
|
546FC44321189975007CC3A3 /* SettingsGeneral.m in Sources */ = {isa = PBXBuildFile; fileRef = 546FC44121189975007CC3A3 /* SettingsGeneral.m */; };
|
||||||
5477D34E21233C62002BA27F /* FeedGroup+Ext.m in Sources */ = {isa = PBXBuildFile; fileRef = 5477D34D21233C62002BA27F /* FeedGroup+Ext.m */; };
|
5477D34E21233C62002BA27F /* FeedGroup+Ext.m in Sources */ = {isa = PBXBuildFile; fileRef = 5477D34D21233C62002BA27F /* FeedGroup+Ext.m */; };
|
||||||
5478DF04225A7AE200D30C64 /* SettingsFeedsView.m in Sources */ = {isa = PBXBuildFile; fileRef = 5478DF03225A7AE200D30C64 /* SettingsFeedsView.m */; };
|
5478DF04225A7AE200D30C64 /* SettingsFeedsView.m in Sources */ = {isa = PBXBuildFile; fileRef = 5478DF03225A7AE200D30C64 /* SettingsFeedsView.m */; };
|
||||||
|
5483296C2A3CDC38000688B9 /* RSXML2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 548329652A3CDB22000688B9 /* RSXML2.framework */; };
|
||||||
|
5483296D2A3CDC38000688B9 /* RSXML2.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 548329652A3CDB22000688B9 /* RSXML2.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
||||||
548C6D0A230C33DE003A1AAF /* NSURL+Ext.m in Sources */ = {isa = PBXBuildFile; fileRef = 548C6D09230C33DE003A1AAF /* NSURL+Ext.m */; };
|
548C6D0A230C33DE003A1AAF /* NSURL+Ext.m in Sources */ = {isa = PBXBuildFile; fileRef = 548C6D09230C33DE003A1AAF /* NSURL+Ext.m */; };
|
||||||
5491005D2331435E00858AE2 /* Download3rdParty.m in Sources */ = {isa = PBXBuildFile; fileRef = 5491005C2331435E00858AE2 /* Download3rdParty.m */; };
|
5491005D2331435E00858AE2 /* Download3rdParty.m in Sources */ = {isa = PBXBuildFile; fileRef = 5491005C2331435E00858AE2 /* Download3rdParty.m */; };
|
||||||
54910067233A4D4000858AE2 /* URLScheme.m in Sources */ = {isa = PBXBuildFile; fileRef = 54910066233A4D4000858AE2 /* URLScheme.m */; };
|
54910067233A4D4000858AE2 /* URLScheme.m in Sources */ = {isa = PBXBuildFile; fileRef = 54910066233A4D4000858AE2 /* URLScheme.m */; };
|
||||||
@@ -59,6 +58,20 @@
|
|||||||
/* End PBXBuildFile section */
|
/* End PBXBuildFile section */
|
||||||
|
|
||||||
/* Begin PBXContainerItemProxy section */
|
/* Begin PBXContainerItemProxy section */
|
||||||
|
548329642A3CDB22000688B9 /* PBXContainerItemProxy */ = {
|
||||||
|
isa = PBXContainerItemProxy;
|
||||||
|
containerPortal = 5483295E2A3CDB22000688B9 /* RSXML2.xcodeproj */;
|
||||||
|
proxyType = 2;
|
||||||
|
remoteGlobalIDString = 84F22C0D1B52DDEA000060CE;
|
||||||
|
remoteInfo = RSXML2;
|
||||||
|
};
|
||||||
|
548329662A3CDB22000688B9 /* PBXContainerItemProxy */ = {
|
||||||
|
isa = PBXContainerItemProxy;
|
||||||
|
containerPortal = 5483295E2A3CDB22000688B9 /* RSXML2.xcodeproj */;
|
||||||
|
proxyType = 2;
|
||||||
|
remoteGlobalIDString = 84F22C171B52DDEA000060CE;
|
||||||
|
remoteInfo = RSXML2Tests;
|
||||||
|
};
|
||||||
54A2D63722EF8193007C61F3 /* PBXContainerItemProxy */ = {
|
54A2D63722EF8193007C61F3 /* PBXContainerItemProxy */ = {
|
||||||
isa = PBXContainerItemProxy;
|
isa = PBXContainerItemProxy;
|
||||||
containerPortal = 54A2D62E22EF8183007C61F3 /* QLOPML.xcodeproj */;
|
containerPortal = 54A2D62E22EF8183007C61F3 /* QLOPML.xcodeproj */;
|
||||||
@@ -75,7 +88,7 @@
|
|||||||
dstPath = "";
|
dstPath = "";
|
||||||
dstSubfolderSpec = 10;
|
dstSubfolderSpec = 10;
|
||||||
files = (
|
files = (
|
||||||
544DCCBA212A2B4D002DBC46 /* RSXML2.framework in Embed Frameworks */,
|
5483296D2A3CDC38000688B9 /* RSXML2.framework in Embed Frameworks */,
|
||||||
);
|
);
|
||||||
name = "Embed Frameworks";
|
name = "Embed Frameworks";
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
@@ -86,7 +99,6 @@
|
|||||||
dstPath = "";
|
dstPath = "";
|
||||||
dstSubfolderSpec = 16;
|
dstSubfolderSpec = 16;
|
||||||
files = (
|
files = (
|
||||||
544DCCBE212A2B6F002DBC46 /* RSXML2.framework.dSYM in CopyFiles */,
|
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
@@ -119,8 +131,6 @@
|
|||||||
544B01192114B41200386E5C /* ModalSheet.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ModalSheet.m; sourceTree = "<group>"; };
|
544B01192114B41200386E5C /* ModalSheet.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ModalSheet.m; sourceTree = "<group>"; };
|
||||||
544B011B2114EE9100386E5C /* AppHook.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppHook.h; sourceTree = "<group>"; };
|
544B011B2114EE9100386E5C /* AppHook.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppHook.h; sourceTree = "<group>"; };
|
||||||
544B011C2114EE9100386E5C /* AppHook.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppHook.m; sourceTree = "<group>"; };
|
544B011C2114EE9100386E5C /* AppHook.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppHook.m; sourceTree = "<group>"; };
|
||||||
544DCCB8212A2B4D002DBC46 /* RSXML2.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = RSXML2.framework; path = Carthage/Build/Mac/RSXML2.framework; sourceTree = "<group>"; };
|
|
||||||
544DCCBD212A2B6F002DBC46 /* RSXML2.framework.dSYM */ = {isa = PBXFileReference; lastKnownFileType = wrapper.dsym; name = RSXML2.framework.dSYM; path = Carthage/Build/Mac/RSXML2.framework.dSYM; sourceTree = "<group>"; };
|
|
||||||
5450100E230E9C8600F0B165 /* FeedDownload.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FeedDownload.h; sourceTree = "<group>"; };
|
5450100E230E9C8600F0B165 /* FeedDownload.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FeedDownload.h; sourceTree = "<group>"; };
|
||||||
5450100F230E9C8600F0B165 /* FeedDownload.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FeedDownload.m; sourceTree = "<group>"; };
|
5450100F230E9C8600F0B165 /* FeedDownload.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FeedDownload.m; sourceTree = "<group>"; };
|
||||||
546A6A2A22C584AF0034E806 /* SettingsAppearanceView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SettingsAppearanceView.m; sourceTree = "<group>"; };
|
546A6A2A22C584AF0034E806 /* SettingsAppearanceView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SettingsAppearanceView.m; sourceTree = "<group>"; };
|
||||||
@@ -135,6 +145,7 @@
|
|||||||
5477D34D21233C62002BA27F /* FeedGroup+Ext.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "FeedGroup+Ext.m"; sourceTree = "<group>"; };
|
5477D34D21233C62002BA27F /* FeedGroup+Ext.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "FeedGroup+Ext.m"; sourceTree = "<group>"; };
|
||||||
5478DF02225A7AE200D30C64 /* SettingsFeedsView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SettingsFeedsView.h; sourceTree = "<group>"; };
|
5478DF02225A7AE200D30C64 /* SettingsFeedsView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SettingsFeedsView.h; sourceTree = "<group>"; };
|
||||||
5478DF03225A7AE200D30C64 /* SettingsFeedsView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SettingsFeedsView.m; sourceTree = "<group>"; };
|
5478DF03225A7AE200D30C64 /* SettingsFeedsView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SettingsFeedsView.m; sourceTree = "<group>"; };
|
||||||
|
5483295E2A3CDB22000688B9 /* RSXML2.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RSXML2.xcodeproj; path = ../RSXML2/RSXML2.xcodeproj; sourceTree = "<group>"; };
|
||||||
54892F1D2235285700271CBA /* CHANGELOG.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = CHANGELOG.md; sourceTree = "<group>"; };
|
54892F1D2235285700271CBA /* CHANGELOG.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = CHANGELOG.md; sourceTree = "<group>"; };
|
||||||
548C6D08230C33DE003A1AAF /* NSURL+Ext.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSURL+Ext.h"; sourceTree = "<group>"; };
|
548C6D08230C33DE003A1AAF /* NSURL+Ext.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSURL+Ext.h"; sourceTree = "<group>"; };
|
||||||
548C6D09230C33DE003A1AAF /* NSURL+Ext.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSURL+Ext.m"; sourceTree = "<group>"; };
|
548C6D09230C33DE003A1AAF /* NSURL+Ext.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSURL+Ext.m"; sourceTree = "<group>"; };
|
||||||
@@ -204,7 +215,7 @@
|
|||||||
isa = PBXFrameworksBuildPhase;
|
isa = PBXFrameworksBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
544DCCB9212A2B4D002DBC46 /* RSXML2.framework in Frameworks */,
|
5483296C2A3CDC38000688B9 /* RSXML2.framework in Frameworks */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
@@ -247,15 +258,6 @@
|
|||||||
path = NSCategories;
|
path = NSCategories;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
544FBD4321064AEB008A260C /* Frameworks */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
544DCCB8212A2B4D002DBC46 /* RSXML2.framework */,
|
|
||||||
544DCCBD212A2B6F002DBC46 /* RSXML2.framework.dSYM */,
|
|
||||||
);
|
|
||||||
name = Frameworks;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
546FC44D2118B357007CC3A3 /* Preferences */ = {
|
546FC44D2118B357007CC3A3 /* Preferences */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
@@ -271,6 +273,15 @@
|
|||||||
path = Preferences;
|
path = Preferences;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
|
5483295F2A3CDB22000688B9 /* Products */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
548329652A3CDB22000688B9 /* RSXML2.framework */,
|
||||||
|
548329672A3CDB22000688B9 /* RSXML2Tests.xctest */,
|
||||||
|
);
|
||||||
|
name = Products;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
54A07A8322105E0800082C51 /* Core Data */ = {
|
54A07A8322105E0800082C51 /* Core Data */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
@@ -305,8 +316,8 @@
|
|||||||
54892F1D2235285700271CBA /* CHANGELOG.md */,
|
54892F1D2235285700271CBA /* CHANGELOG.md */,
|
||||||
54ACC27E21061B3B0020715F /* baRSS */,
|
54ACC27E21061B3B0020715F /* baRSS */,
|
||||||
54A2D62E22EF8183007C61F3 /* QLOPML.xcodeproj */,
|
54A2D62E22EF8183007C61F3 /* QLOPML.xcodeproj */,
|
||||||
|
5483295E2A3CDB22000688B9 /* RSXML2.xcodeproj */,
|
||||||
54ACC27D21061B3B0020715F /* Products */,
|
54ACC27D21061B3B0020715F /* Products */,
|
||||||
544FBD4321064AEB008A260C /* Frameworks */,
|
|
||||||
);
|
);
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
@@ -498,6 +509,10 @@
|
|||||||
ProductGroup = 54A2D63422EF8193007C61F3 /* Products */;
|
ProductGroup = 54A2D63422EF8193007C61F3 /* Products */;
|
||||||
ProjectRef = 54A2D62E22EF8183007C61F3 /* QLOPML.xcodeproj */;
|
ProjectRef = 54A2D62E22EF8183007C61F3 /* QLOPML.xcodeproj */;
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
ProductGroup = 5483295F2A3CDB22000688B9 /* Products */;
|
||||||
|
ProjectRef = 5483295E2A3CDB22000688B9 /* RSXML2.xcodeproj */;
|
||||||
|
},
|
||||||
);
|
);
|
||||||
projectRoot = "";
|
projectRoot = "";
|
||||||
targets = (
|
targets = (
|
||||||
@@ -507,6 +522,20 @@
|
|||||||
/* End PBXProject section */
|
/* End PBXProject section */
|
||||||
|
|
||||||
/* Begin PBXReferenceProxy section */
|
/* Begin PBXReferenceProxy section */
|
||||||
|
548329652A3CDB22000688B9 /* RSXML2.framework */ = {
|
||||||
|
isa = PBXReferenceProxy;
|
||||||
|
fileType = wrapper.framework;
|
||||||
|
path = RSXML2.framework;
|
||||||
|
remoteRef = 548329642A3CDB22000688B9 /* PBXContainerItemProxy */;
|
||||||
|
sourceTree = BUILT_PRODUCTS_DIR;
|
||||||
|
};
|
||||||
|
548329672A3CDB22000688B9 /* RSXML2Tests.xctest */ = {
|
||||||
|
isa = PBXReferenceProxy;
|
||||||
|
fileType = wrapper.cfbundle;
|
||||||
|
path = RSXML2Tests.xctest;
|
||||||
|
remoteRef = 548329662A3CDB22000688B9 /* PBXContainerItemProxy */;
|
||||||
|
sourceTree = BUILT_PRODUCTS_DIR;
|
||||||
|
};
|
||||||
54A2D63822EF8193007C61F3 /* QLOPML.qlgenerator */ = {
|
54A2D63822EF8193007C61F3 /* QLOPML.qlgenerator */ = {
|
||||||
isa = PBXReferenceProxy;
|
isa = PBXReferenceProxy;
|
||||||
fileType = wrapper.cfbundle;
|
fileType = wrapper.cfbundle;
|
||||||
@@ -754,7 +783,6 @@
|
|||||||
FRAMEWORK_SEARCH_PATHS = (
|
FRAMEWORK_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"$(PROJECT_DIR)",
|
"$(PROJECT_DIR)",
|
||||||
"$(PROJECT_DIR)/Carthage/Build/Mac",
|
|
||||||
);
|
);
|
||||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||||
"APP_NAME=\"\\@\\\"$(PRODUCT_NAME)\\\"\"",
|
"APP_NAME=\"\\@\\\"$(PRODUCT_NAME)\\\"\"",
|
||||||
@@ -809,7 +837,6 @@
|
|||||||
FRAMEWORK_SEARCH_PATHS = (
|
FRAMEWORK_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"$(PROJECT_DIR)",
|
"$(PROJECT_DIR)",
|
||||||
"$(PROJECT_DIR)/Carthage/Build/Mac",
|
|
||||||
);
|
);
|
||||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||||
"APP_NAME=\"\\@\\\"$(PRODUCT_NAME)\\\"\"",
|
"APP_NAME=\"\\@\\\"$(PRODUCT_NAME)\\\"\"",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<Scheme
|
<Scheme
|
||||||
LastUpgradeVersion = "1200"
|
LastUpgradeVersion = "1240"
|
||||||
version = "1.3">
|
version = "1.3">
|
||||||
<BuildAction
|
<BuildAction
|
||||||
parallelizeBuildables = "YES"
|
parallelizeBuildables = "YES"
|
||||||
|
|||||||
@@ -28,7 +28,13 @@
|
|||||||
- (NSMenuItem*)newMenuItem {
|
- (NSMenuItem*)newMenuItem {
|
||||||
NSMenuItem *item = [NSMenuItem new];
|
NSMenuItem *item = [NSMenuItem new];
|
||||||
item.title = self.group.anyName;
|
item.title = self.group.anyName;
|
||||||
item.toolTip = self.subtitle;
|
// Tooltip disabled (feed-group only) because it causes issues on macOS Ventura.
|
||||||
|
// Menu opens invisibly (OrderNSWindow: unsupported window ordering op -1)
|
||||||
|
// steps to reproduce:
|
||||||
|
// 1. hover over a feed-group menu item until tooltip pops up
|
||||||
|
// 2. hover over another feed with tooltip
|
||||||
|
// 3. go back to previous feed.
|
||||||
|
// item.toolTip = self.subtitle;
|
||||||
item.enabled = (self.articles.count > 0);
|
item.enabled = (self.articles.count > 0);
|
||||||
item.image = self.iconImage16;
|
item.image = self.iconImage16;
|
||||||
item.representedObject = self.indexPath;
|
item.representedObject = self.indexPath;
|
||||||
|
|||||||
@@ -45,7 +45,7 @@
|
|||||||
<key>CFBundlePackageType</key>
|
<key>CFBundlePackageType</key>
|
||||||
<string>APPL</string>
|
<string>APPL</string>
|
||||||
<key>CFBundleShortVersionString</key>
|
<key>CFBundleShortVersionString</key>
|
||||||
<string>1.2.0</string>
|
<string>1.2.2</string>
|
||||||
<key>CFBundleURLTypes</key>
|
<key>CFBundleURLTypes</key>
|
||||||
<array>
|
<array>
|
||||||
<dict>
|
<dict>
|
||||||
@@ -70,7 +70,7 @@
|
|||||||
</dict>
|
</dict>
|
||||||
</array>
|
</array>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
<string>14698</string>
|
<string>14866</string>
|
||||||
<key>LSApplicationCategoryType</key>
|
<key>LSApplicationCategoryType</key>
|
||||||
<string>public.app-category.news</string>
|
<string>public.app-category.news</string>
|
||||||
<key>LSMinimumSystemVersion</key>
|
<key>LSMinimumSystemVersion</key>
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
@implementation SettingsAboutView
|
@implementation SettingsAboutView
|
||||||
|
|
||||||
- (instancetype)init {
|
- (instancetype)init {
|
||||||
self = [super initWithFrame: NSZeroRect];
|
self = [super initWithFrame:NSMakeRect(0, 0, 320, 327)];
|
||||||
NSDictionary *info = [[NSBundle mainBundle] infoDictionary];
|
NSDictionary *info = [[NSBundle mainBundle] infoDictionary];
|
||||||
NSString *version = [NSString stringWithFormat:NSLocalizedString(@"Version %@", nil), info[@"CFBundleShortVersionString"]];
|
NSString *version = [NSString stringWithFormat:NSLocalizedString(@"Version %@", nil), info[@"CFBundleShortVersionString"]];
|
||||||
#if DEBUG // append build number, e.g., '0.9.4 (9906)'
|
#if DEBUG // append build number, e.g., '0.9.4 (9906)'
|
||||||
@@ -33,16 +33,16 @@
|
|||||||
NSMutableAttributedString *mas = [NSMutableAttributedString new];
|
NSMutableAttributedString *mas = [NSMutableAttributedString new];
|
||||||
[mas beginEditing];
|
[mas beginEditing];
|
||||||
[self str:mas add:@"Programming\n" bold:YES];
|
[self str:mas add:@"Programming\n" bold:YES];
|
||||||
[self str:mas add:@"Oleg Geier\n\n" bold:NO];
|
[self str:mas add:@"Oleg Geier\n" bold:NO];
|
||||||
[self str:mas add:@"Source Code Available\n" bold:YES];
|
[self str:mas add:@"\nSource Code Available\n" bold:YES];
|
||||||
[self str:mas add:@"github.com" link:@"https://github.com/relikd/baRSS"];
|
[self str:mas add:@"github.com" link:@"https://github.com/relikd/baRSS"];
|
||||||
[self str:mas add:@" (MIT License)\nor " bold:NO];
|
[self str:mas add:@" (MIT License)\n" bold:NO];
|
||||||
[self str:mas add:@"gitlab.com" link:@"https://gitlab.com/relikd/baRSS"];
|
[self str:mas add:@"\nLibraries\n" bold:YES];
|
||||||
[self str:mas add:@" (MIT License)\n\n" bold:NO];
|
|
||||||
[self str:mas add:@"3rd-Party Libraries\n" bold:YES];
|
|
||||||
[self str:mas add:@"RSXML2" link:@"https://github.com/relikd/RSXML2"];
|
[self str:mas add:@"RSXML2" link:@"https://github.com/relikd/RSXML2"];
|
||||||
[self str:mas add:@" (MIT License)" bold:NO];
|
[self str:mas add:@" (MIT License)\n" bold:NO];
|
||||||
[self str:mas add:@"\n\n\n\nOptions\n" bold:YES];
|
[self str:mas add:@"QLOPML" link:@"https://github.com/relikd/QLOPML"];
|
||||||
|
[self str:mas add:@" (MIT License)\n" bold:NO];
|
||||||
|
[self str:mas add:@"\n\n\nOptions\n" bold:YES];
|
||||||
[self str:mas add:@"Fix Cache\n" link:@"barss:config/fixcache"];
|
[self str:mas add:@"Fix Cache\n" link:@"barss:config/fixcache"];
|
||||||
[self str:mas add:@"Backup now\n" link:@"barss:backup/show"];
|
[self str:mas add:@"Backup now\n" link:@"barss:backup/show"];
|
||||||
[mas endEditing];
|
[mas endEditing];
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
@implementation SettingsAppearanceView
|
@implementation SettingsAppearanceView
|
||||||
|
|
||||||
- (instancetype)init {
|
- (instancetype)init {
|
||||||
self = [super initWithFrame: NSZeroRect];
|
self = [super initWithFrame:NSMakeRect(0, 0, 320, 327)];
|
||||||
// Insert matrix header (icons above checkbox matrix)
|
// Insert matrix header (icons above checkbox matrix)
|
||||||
ColumnIcon(self, X__, RSSImageSettingsGlobal, NSLocalizedString(@"Show in menu bar", nil));
|
ColumnIcon(self, X__, RSSImageSettingsGlobal, NSLocalizedString(@"Show in menu bar", nil));
|
||||||
ColumnIcon(self, _X_, RSSImageSettingsGroup, NSLocalizedString(@"Show in group menu", nil));
|
ColumnIcon(self, _X_, RSSImageSettingsGroup, NSLocalizedString(@"Show in group menu", nil));
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
NSView *labels = [NSView labelColumn:lbls rowHeight:HEIGHT_INPUTFIELD padding:PAD_S];
|
NSView *labels = [NSView labelColumn:lbls rowHeight:HEIGHT_INPUTFIELD padding:PAD_S];
|
||||||
|
|
||||||
|
|
||||||
self = [super initWithFrame:NSMakeRect(0, 0, 0, NSHeight(labels.frame))];
|
self = [super initWithFrame:NSMakeRect(0, 0, 320, NSHeight(labels.frame))];
|
||||||
self.autoresizingMask = NSViewWidthSizable | NSViewHeightSizable;
|
self.autoresizingMask = NSViewWidthSizable | NSViewHeightSizable;
|
||||||
|
|
||||||
CGFloat x = NSWidth(labels.frame) + PAD_S;
|
CGFloat x = NSWidth(labels.frame) + PAD_S;
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
@return Centered view without autoresizing.
|
@return Centered view without autoresizing.
|
||||||
*/
|
*/
|
||||||
- (instancetype)initWithRefreshInterval:(NSDictionary*)info articleCount:(NSUInteger)count callback:(nullable id<RefreshIntervalButtonDelegate>)callback {
|
- (instancetype)initWithRefreshInterval:(NSDictionary*)info articleCount:(NSUInteger)count callback:(nullable id<RefreshIntervalButtonDelegate>)callback {
|
||||||
self = [super initWithFrame:NSZeroRect];
|
self = [super initWithFrame:NSMakeRect(0, 0, 320, 327)];
|
||||||
self.autoresizesSubviews = NO;
|
self.autoresizesSubviews = NO;
|
||||||
|
|
||||||
NSTextField *dateView = [self viewForArticlesCount:count latest:info];
|
NSTextField *dateView = [self viewForArticlesCount:count latest:info];
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
@implementation SettingsFeedsView
|
@implementation SettingsFeedsView
|
||||||
|
|
||||||
- (instancetype)initWithController:(SettingsFeeds*)delegate {
|
- (instancetype)initWithController:(SettingsFeeds*)delegate {
|
||||||
self = [super initWithFrame:NSZeroRect];
|
self = [super initWithFrame:NSMakeRect(0, 0, 201, 327)];
|
||||||
if (self) {
|
if (self) {
|
||||||
self.controller = delegate; // make sure its first
|
self.controller = delegate; // make sure its first
|
||||||
self.outline = [self generateOutlineView]; // uses self.controller
|
self.outline = [self generateOutlineView]; // uses self.controller
|
||||||
@@ -60,7 +60,7 @@
|
|||||||
- (void)setOutlineColumns:(NSOutlineView*)outline {
|
- (void)setOutlineColumns:(NSOutlineView*)outline {
|
||||||
NSTableColumn *colName = [[NSTableColumn alloc] initWithIdentifier:CustomCellName];
|
NSTableColumn *colName = [[NSTableColumn alloc] initWithIdentifier:CustomCellName];
|
||||||
colName.title = NSLocalizedString(@"Name", nil);
|
colName.title = NSLocalizedString(@"Name", nil);
|
||||||
colName.width = 10000;
|
colName.width = 201;
|
||||||
colName.maxWidth = 10000;
|
colName.maxWidth = 10000;
|
||||||
colName.resizingMask = NSTableColumnAutoresizingMask;
|
colName.resizingMask = NSTableColumnAutoresizingMask;
|
||||||
[outline addTableColumn:colName];
|
[outline addTableColumn:colName];
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
@implementation SettingsGeneralView
|
@implementation SettingsGeneralView
|
||||||
|
|
||||||
- (instancetype)initWithController:(SettingsGeneral*)controller {
|
- (instancetype)initWithController:(SettingsGeneral*)controller {
|
||||||
self = [super initWithFrame:NSZeroRect];
|
self = [super initWithFrame:NSMakeRect(0, 0, 320, 327)];
|
||||||
// Change default feed reader application
|
// Change default feed reader application
|
||||||
NSTextField *l1 = [[NSView label:NSLocalizedString(@"Default feed reader:", nil)] placeIn:self x:PAD_WIN yTop:PAD_WIN + 3];
|
NSTextField *l1 = [[NSView label:NSLocalizedString(@"Default feed reader:", nil)] placeIn:self x:PAD_WIN yTop:PAD_WIN + 3];
|
||||||
NSButton *help = [[[NSView helpButton] action:@selector(clickHowToDefaults:) target:controller] placeIn:self xRight:PAD_WIN yTop:PAD_WIN];
|
NSButton *help = [[[NSView helpButton] action:@selector(clickHowToDefaults:) target:controller] placeIn:self xRight:PAD_WIN yTop:PAD_WIN];
|
||||||
|
|||||||
@@ -16,18 +16,13 @@
|
|||||||
if (self) {
|
if (self) {
|
||||||
self.tabStyle = NSTabViewControllerTabStyleToolbar;
|
self.tabStyle = NSTabViewControllerTabStyleToolbar;
|
||||||
self.transitionOptions = NSViewControllerTransitionNone;
|
self.transitionOptions = NSViewControllerTransitionNone;
|
||||||
|
|
||||||
NSTabViewItem *flexibleWidth = [[NSTabViewItem alloc] initWithIdentifier:NSToolbarFlexibleSpaceItemIdentifier];
|
|
||||||
flexibleWidth.viewController = [NSViewController new];
|
|
||||||
|
|
||||||
self.tabViewItems = @[
|
self.tabViewItems = @[
|
||||||
TabItem(NSImageNamePreferencesGeneral, NSLocalizedString(@"General", nil), [SettingsGeneral class]),
|
TabItem(NSImageNamePreferencesGeneral, NSLocalizedString(@"General", nil), [SettingsGeneral class]),
|
||||||
TabItem(NSImageNameUserAccounts, NSLocalizedString(@"Feeds", nil), [SettingsFeeds class]),
|
TabItem(NSImageNameUserAccounts, NSLocalizedString(@"Feeds", nil), [SettingsFeeds class]),
|
||||||
TabItem(NSImageNameFontPanel, NSLocalizedString(@"Appearance", nil), [SettingsAppearance class]),
|
TabItem(NSImageNameFontPanel, NSLocalizedString(@"Appearance", nil), [SettingsAppearance class]),
|
||||||
flexibleWidth,
|
|
||||||
TabItem(NSImageNameInfo, NSLocalizedString(@"About", nil), [SettingsAbout class]),
|
TabItem(NSImageNameInfo, NSLocalizedString(@"About", nil), [SettingsAbout class]),
|
||||||
];
|
];
|
||||||
[self switchToTab: UserPrefsUInt(Pref_prefSelectedTab)];
|
self.selectedTabViewItemIndex = -1;
|
||||||
}
|
}
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
@@ -43,19 +38,16 @@ static inline NSTabViewItem* TabItem(NSImageName imageName, NSString *text, Clas
|
|||||||
/// Safely set selected index without out of bounds exception
|
/// Safely set selected index without out of bounds exception
|
||||||
- (__kindof NSViewController*)switchToTab:(NSUInteger)index {
|
- (__kindof NSViewController*)switchToTab:(NSUInteger)index {
|
||||||
if (index < 0 || index >= self.tabViewItems.count)
|
if (index < 0 || index >= self.tabViewItems.count)
|
||||||
return nil;
|
index = 0;
|
||||||
NSTabViewItem *tab = self.tabViewItems[index];
|
|
||||||
if (tab.identifier == NSToolbarFlexibleSpaceItemIdentifier)
|
|
||||||
return nil;
|
|
||||||
self.selectedTabViewItemIndex = (NSInteger)index;
|
self.selectedTabViewItemIndex = (NSInteger)index;
|
||||||
return [tab viewController];
|
return [self.tabViewItems[index] viewController];
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Delegate method, store last selected tab to user preferences
|
/// Delegate method, store last selected tab to user preferences
|
||||||
- (void)tabView:(NSTabView*)tabView didSelectTabViewItem:(nullable NSTabViewItem*)tabViewItem {
|
- (void)tabView:(NSTabView*)tabView didSelectTabViewItem:(nullable NSTabViewItem*)tabViewItem {
|
||||||
[super tabView:tabView didSelectTabViewItem:tabViewItem];
|
[super tabView:tabView didSelectTabViewItem:tabViewItem];
|
||||||
NSInteger newIndex = self.selectedTabViewItemIndex;
|
NSInteger newIndex = self.selectedTabViewItemIndex;
|
||||||
if (UserPrefsInt(Pref_prefSelectedTab) != newIndex)
|
if (newIndex != -1 && UserPrefsInt(Pref_prefSelectedTab) != newIndex)
|
||||||
UserPrefsSetInt(Pref_prefSelectedTab, newIndex);
|
UserPrefsSetInt(Pref_prefSelectedTab, newIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -70,7 +62,10 @@ static inline NSTabViewItem* TabItem(NSImageName imageName, NSString *text, Clas
|
|||||||
w.contentMinSize = NSMakeSize(320, 327);
|
w.contentMinSize = NSMakeSize(320, 327);
|
||||||
w.windowController.shouldCascadeWindows = YES;
|
w.windowController.shouldCascadeWindows = YES;
|
||||||
w.title = [NSString stringWithFormat:NSLocalizedString(@"%@ Preferences", nil), NSProcessInfo.processInfo.processName];
|
w.title = [NSString stringWithFormat:NSLocalizedString(@"%@ Preferences", nil), NSProcessInfo.processInfo.processName];
|
||||||
w.contentViewController = [PrefTabs new];
|
PrefTabs *tabController = [PrefTabs new];
|
||||||
|
w.contentViewController = tabController;
|
||||||
|
[w.toolbar insertItemWithItemIdentifier:NSToolbarSpaceItemIdentifier atIndex:3];
|
||||||
|
[w.toolbar insertItemWithItemIdentifier:NSToolbarFlexibleSpaceItemIdentifier atIndex:4];
|
||||||
w.delegate = w;
|
w.delegate = w;
|
||||||
NSWindowPersistableFrameDescriptor prevFrame = UserPrefsString(Pref_prefWindowFrame);
|
NSWindowPersistableFrameDescriptor prevFrame = UserPrefsString(Pref_prefWindowFrame);
|
||||||
if (!prevFrame) {
|
if (!prevFrame) {
|
||||||
@@ -79,6 +74,7 @@ static inline NSTabViewItem* TabItem(NSImageName imageName, NSString *text, Clas
|
|||||||
} else {
|
} else {
|
||||||
[w setFrameFromString:prevFrame];
|
[w setFrameFromString:prevFrame];
|
||||||
}
|
}
|
||||||
|
[tabController switchToTab:UserPrefsUInt(Pref_prefSelectedTab)];
|
||||||
return w;
|
return w;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user