[PR #880] [CLOSED] Feat: Source Folders & Priority + Optional Alphabetical Sort #1789

Closed
opened 2026-03-03 19:08:58 +03:00 by kerem · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/PlayCover/PlayCover/pull/880
Author: @amirsaam
Created: 3/20/2023
Status: Closed

Base: developHead: SourceFolders


📝 Commits (10+)

  • 0e3d9fb Initial Creation
  • e8f9765 Added Search Back + Bug & UI Fixes
  • 24a8a5e Sort Alphabetically Toggle Option
  • 34192c7 Fix Sort Issues + Save to Defaults + .help
  • 3bca73c Backport Compatibility
  • bfb3bd4 Add Semaphore to README.md
  • b57bd4a Merge branch 'develop' into SourceFolders
  • 614728e SwiftLint
  • c8758b9 Various Fixes & Improvements
  • 05cecbb Merge branch 'develop' into SourceFolders

📊 Changes

73 files changed (+2417 additions, -3691 deletions)

View changed files

📝 .github/ISSUE_TEMPLATE/APP-SUPPORT.yml (+1 -24)
📝 .github/ISSUE_TEMPLATE/BUG-REPORT.yml (+4 -8)
📝 .github/ISSUE_TEMPLATE/GAME-SUPPORT.yml (+1 -24)
📝 .github/workflows/1.build_release.yml (+13 -24)
📝 .github/workflows/2.nightly_release.yml (+4 -18)
📝 .github/workflows/SwiftLint.yml (+3 -2)
📝 .swiftlint.yml (+0 -4)
📝 Cartfile (+1 -1)
📝 Cartfile.resolved (+1 -1)
📝 PlayCover.xcodeproj/project.pbxproj (+79 -50)
📝 PlayCover/AppInstaller/Downloader.swift (+2 -2)
📝 PlayCover/AppInstaller/Installer.swift (+11 -12)
📝 PlayCover/Model/AppContainer.swift (+27 -14)
📝 PlayCover/Model/AppInfo.swift (+0 -74)
📝 PlayCover/Model/AppSettings.swift (+15 -26)
📝 PlayCover/Model/Keymapping.swift (+3 -1)
📝 PlayCover/Model/PlayApp.swift (+43 -61)
📝 PlayCover/PlayCoverError.swift (+3 -0)
📝 PlayCover/Utils/Cacher.swift (+8 -4)
PlayCover/Utils/Extensions/PlayAppExtensions.swift (+0 -68)

...and 53 more files

📄 Description

Introduces Source Folders in IPA Library where changes the structure of Sources and adds Name and Logo URL to them and shows them as they are.
With this approach we are no longer stack all apps from all sources together so for example we can have Genshin Impact from every source in their folders.

  • Optimised StoreVM
  • Needed UI Changes
  • Working Move Source Up/Down in the Setting
  • Backport Compatibility for older Sources
  • Add Search Apps Back
  • Fix UI Issues
  • Add Alphabetical Sort Option for Source Contents
  • Adds collapsible list of source folders under IPA Library in sidebar

Note:
There is a new package Semaphore used in this PR, this package introduces AsyncSemaphore alike DispatchSemaphore but unlike that, it does not block any thread; Instead, Swift concurrency tasks are suspended "awaiting" for the semaphore.

This is a good thing to have for future uses like I have done in this PR dealing with suspension in the easiest way.
The reason I did not use try await Task.sleep is that we aren't sure when the previous item in the loop is done to start the loop again, plus we are updating UI and we need to be on main thread and DispatchSemaphore will not work and sends PlayCover to Not Responding state.

Issues:

  1. When users search apps, in meantime if they change sort option it will not change the app list until adds/removes a character from their search (just saying, I don't think it's a big deal)
  2. FIXED | Original issue:
The famous Search bar issue, if gets focused and back to root it will not get unfocused until clicked on the window but still will comeback after opening a source folder again until you switch once to App Library (I have no fix)

🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/PlayCover/PlayCover/pull/880 **Author:** [@amirsaam](https://github.com/amirsaam) **Created:** 3/20/2023 **Status:** ❌ Closed **Base:** `develop` ← **Head:** `SourceFolders` --- ### 📝 Commits (10+) - [`0e3d9fb`](https://github.com/PlayCover/PlayCover/commit/0e3d9fba811cf8c59486c5900328b3cb1229d9a6) Initial Creation - [`e8f9765`](https://github.com/PlayCover/PlayCover/commit/e8f97657ad823f3074148a7c1365b2167b5c434e) Added Search Back + Bug & UI Fixes - [`24a8a5e`](https://github.com/PlayCover/PlayCover/commit/24a8a5e91ea6f55e40675e7f61310506817ad070) Sort Alphabetically Toggle Option - [`34192c7`](https://github.com/PlayCover/PlayCover/commit/34192c7143338073548f554c86262370e8264bbe) Fix Sort Issues + Save to Defaults + `.help` - [`3bca73c`](https://github.com/PlayCover/PlayCover/commit/3bca73cb1b0759dbb24e4b5395e9945d6574323a) Backport Compatibility - [`bfb3bd4`](https://github.com/PlayCover/PlayCover/commit/bfb3bd471f136f416fbfa428e86ea50dafa08f34) Add `Semaphore` to `README.md` - [`b57bd4a`](https://github.com/PlayCover/PlayCover/commit/b57bd4a3fed2eab8e70b9b522093bafd727eb6d0) Merge branch 'develop' into SourceFolders - [`614728e`](https://github.com/PlayCover/PlayCover/commit/614728e243917c953a656193e69b89395a0f7be3) SwiftLint - [`c8758b9`](https://github.com/PlayCover/PlayCover/commit/c8758b99fe7c58c9c1bfcea276079b2c3fafa66c) Various Fixes & Improvements - [`05cecbb`](https://github.com/PlayCover/PlayCover/commit/05cecbb87d3d562fb8177d7f993f8c8be3a2cdc3) Merge branch 'develop' into SourceFolders ### 📊 Changes **73 files changed** (+2417 additions, -3691 deletions) <details> <summary>View changed files</summary> 📝 `.github/ISSUE_TEMPLATE/APP-SUPPORT.yml` (+1 -24) 📝 `.github/ISSUE_TEMPLATE/BUG-REPORT.yml` (+4 -8) 📝 `.github/ISSUE_TEMPLATE/GAME-SUPPORT.yml` (+1 -24) 📝 `.github/workflows/1.build_release.yml` (+13 -24) 📝 `.github/workflows/2.nightly_release.yml` (+4 -18) 📝 `.github/workflows/SwiftLint.yml` (+3 -2) 📝 `.swiftlint.yml` (+0 -4) 📝 `Cartfile` (+1 -1) 📝 `Cartfile.resolved` (+1 -1) 📝 `PlayCover.xcodeproj/project.pbxproj` (+79 -50) 📝 `PlayCover/AppInstaller/Downloader.swift` (+2 -2) 📝 `PlayCover/AppInstaller/Installer.swift` (+11 -12) 📝 `PlayCover/Model/AppContainer.swift` (+27 -14) 📝 `PlayCover/Model/AppInfo.swift` (+0 -74) 📝 `PlayCover/Model/AppSettings.swift` (+15 -26) 📝 `PlayCover/Model/Keymapping.swift` (+3 -1) 📝 `PlayCover/Model/PlayApp.swift` (+43 -61) 📝 `PlayCover/PlayCoverError.swift` (+3 -0) 📝 `PlayCover/Utils/Cacher.swift` (+8 -4) ➖ `PlayCover/Utils/Extensions/PlayAppExtensions.swift` (+0 -68) _...and 53 more files_ </details> ### 📄 Description Introduces Source Folders in IPA Library where changes the structure of Sources and adds Name and Logo URL to them and shows them as they are. With this approach we are no longer stack all apps from all sources together so for example we can have Genshin Impact from every source in their folders. - [x] Optimised `StoreVM` - [x] Needed UI Changes - [x] Working Move Source Up/Down in the Setting - [x] Backport Compatibility for older Sources - [x] Add Search Apps Back - [x] Fix UI Issues - [x] Add Alphabetical Sort Option for Source Contents - [x] Adds collapsible list of source folders under IPA Library in sidebar **Note**: There is a new package `Semaphore` used in this PR, this package introduces `AsyncSemaphore` alike `DispatchSemaphore` but unlike that, it does not block any thread; Instead, Swift concurrency tasks are suspended "awaiting" for the semaphore. This is a good thing to have for future uses like I have done in this PR dealing with suspension in the easiest way. The reason I did not use `try await Task.sleep` is that we aren't sure when the previous item in the loop is done to start the loop again, plus we are updating UI and we need to be on main thread and `DispatchSemaphore` will not work and sends PlayCover to Not Responding state. **Issues**: 1. When users search apps, in meantime if they change sort option it will not change the app list until adds/removes a character from their search (just saying, I don't think it's a big deal) 2. **FIXED** | Original issue: ``` The famous Search bar issue, if gets focused and back to root it will not get unfocused until clicked on the window but still will comeback after opening a source folder again until you switch once to App Library (I have no fix) ``` --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
kerem 2026-03-03 19:08:58 +03:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/PlayCover#1789
No description provided.