Skip to content

Commit

Permalink
Fix/gh actions (#1250)
Browse files Browse the repository at this point in the history
* fix: sidebar button

* Add toggle for scroll wheel  (#1215)

* Add

* Add i18n string

* fix: missing semi-colon in en localisation

* Use Application ID when storing apps (#1100)

* feat: init of using app id

* fix: discord rpc

* add and move alias function

* update bundleid cache

* fix cache prune

* fix merge

* fix removing wrong file

* move create-dmg to brew

---------

Co-authored-by: Xyct <87l46110@gmail.com>
Co-authored-by: ytai <653297351@qq.com>
  • Loading branch information
3 people committed Dec 9, 2023
1 parent fd82939 commit d2b46c1
Show file tree
Hide file tree
Showing 11 changed files with 178 additions and 79 deletions.
3 changes: 1 addition & 2 deletions .github/workflows/1.build_release.yml
Expand Up @@ -19,9 +19,8 @@ jobs:
- name: Install dependencies
shell: bash
run: |
brew install graphicsmagick imagemagick
brew install graphicsmagick imagemagick create-dmg
bundle install
npm install --global create-dmg
- name: Fastlane Release
shell: bash
Expand Down
3 changes: 1 addition & 2 deletions .github/workflows/2.nightly_release.yml
Expand Up @@ -15,9 +15,8 @@ jobs:
- name: Install dependencies
shell: bash
run: |
brew install graphicsmagick imagemagick
brew install graphicsmagick imagemagick create-dmg
bundle install
npm install --global create-dmg
- name: Set build number
shell: bash
Expand Down
4 changes: 2 additions & 2 deletions PlayCover/AppInstaller/Installer.swift
Expand Up @@ -207,8 +207,8 @@ class Installer {
let info = AppInfo(contentsOf: baseApp.url
.appendingPathComponent("Info")
.appendingPathExtension("plist"))
let location = PlayTools.playCoverContainer
.appendingEscapedPathComponent(info.displayName)
let location = AppsVM.appDirectory
.appendingEscapedPathComponent(info.bundleIdentifier)
.appendingPathExtension("app")
if FileManager.default.fileExists(atPath: location.path) {
try FileManager.default.removeItem(at: location)
Expand Down
2 changes: 2 additions & 0 deletions PlayCover/Model/AppSettings.swift
Expand Up @@ -40,6 +40,7 @@ struct AppSettingsData: Codable {
var injectIntrospection = false
var rootWorkDir = true
var noKMOnInput = true
var enableScrollWheel = true

init() {}

Expand Down Expand Up @@ -69,6 +70,7 @@ struct AppSettingsData: Codable {
injectIntrospection = try container.decodeIfPresent(Bool.self, forKey: .injectIntrospection) ?? false
rootWorkDir = try container.decodeIfPresent(Bool.self, forKey: .rootWorkDir) ?? true
noKMOnInput = try container.decodeIfPresent(Bool.self, forKey: .noKMOnInput) ?? true
enableScrollWheel = try container.decodeIfPresent(Bool.self, forKey: .enableScrollWheel) ?? true
}
}

Expand Down
47 changes: 19 additions & 28 deletions PlayCover/Model/PlayApp.swift
Expand Up @@ -8,18 +8,29 @@ import Foundation
import IOKit.pwr_mgt

class PlayApp: BaseApp {
public static let bundleIDCacheURL = PlayTools.playCoverContainer.appendingPathComponent("CACHE")
var displaySleepAssertionID: IOPMAssertionID?
public var isStarting = false

var searchText: String {
info.displayName.lowercased().appending(" ").appending(info.bundleName).lowercased()
public static var bundleIDCache: [String] {
get throws {
(try String(contentsOf: bundleIDCacheURL)).split(whereSeparator: \.isNewline).map({ String($0) })
}
}
var sessionDisableKeychain: Bool = false

override init(appUrl: URL) {
super.init(appUrl: appUrl)
self.loadDiscordIPC()

removeAlias()
createAlias()

loadDiscordIPC()
}

var searchText: String {
info.displayName.lowercased().appending(" ").appending(info.bundleName).lowercased()
}
var sessionDisableKeychain: Bool = false

func launch() async {
do {
Expand Down Expand Up @@ -71,7 +82,7 @@ class PlayApp: BaseApp {
let config = NSWorkspace.OpenConfiguration()

NSWorkspace.shared.openApplication(
at: url,
at: aliasURL,
configuration: config,
completionHandler: { runningApp, error in
guard error == nil else { return }
Expand Down Expand Up @@ -183,7 +194,7 @@ class PlayApp: BaseApp {

static let playChainDirectory = PlayTools.playCoverContainer.appendingPathComponent("PlayChain")

lazy var aliasURL = PlayApp.aliasDirectory.appendingPathComponent(name)
lazy var aliasURL = PlayApp.aliasDirectory.appendingPathComponent(name).appendingPathExtension("app")

lazy var playChainURL = PlayApp.playChainDirectory.appendingPathComponent(info.bundleIdentifier)

Expand Down Expand Up @@ -254,41 +265,21 @@ class PlayApp: BaseApp {
FileManager.default.delete(at: playChainURL.appendingPathExtension("keyCover"))
}

func createAlias() {
do {
try FileManager.default.createDirectory(atPath: PlayApp.aliasDirectory.path,
withIntermediateDirectories: true,
attributes: nil)
let data = try url.bookmarkData(options: .suitableForBookmarkFile,
includingResourceValuesForKeys: nil, relativeTo: nil)
try URL.writeBookmarkData(data, to: aliasURL)
} catch {
Log.shared.log(error.localizedDescription)
}
}

func removeAlias() {
FileManager.default.delete(at: aliasURL)
}

func deleteApp() {
FileManager.default.delete(at: URL(fileURLWithPath: url.path))
AppsVM.shared.fetchApps()
}

func sign() {
do {
let tmpDir = try FileManager.default.url(for: .itemReplacementDirectory,
in: .userDomainMask,
appropriateFor: URL(fileURLWithPath: "/Users"),
create: true)
let tmpDir = FileManager.default.temporaryDirectory
let tmpEnts = tmpDir
.appendingEscapedPathComponent(ProcessInfo().globallyUniqueString)
.appendingPathExtension("plist")
let conf = try Entitlements.composeEntitlements(self)
try conf.store(tmpEnts)
try Shell.signAppWith(executable, entitlements: tmpEnts)
try FileManager.default.removeItem(at: tmpDir)
try FileManager.default.removeItem(at: tmpEnts)
} catch {
print(error)
Log.shared.error(error)
Expand Down
19 changes: 19 additions & 0 deletions PlayCover/Utils/Extensions/PlayAppExtensions.swift
Expand Up @@ -46,4 +46,23 @@ extension PlayApp {
print("Unable to link discordipc for \(self.info.bundleIdentifier)")
}
}

func createAlias() {
do {
try FileManager.default.createDirectory(atPath: aliasURL.path,
withIntermediateDirectories: true,
attributes: nil)
url.enumerateContents(options: [.skipsSubdirectoryDescendants]) { ctxUrl, _ in
try FileManager.default.createSymbolicLink(
at: self.aliasURL.appendingPathComponent(ctxUrl.lastPathComponent),
withDestinationURL: ctxUrl)
}
} catch {
Log.shared.log(error.localizedDescription)
}
}

func removeAlias() {
FileManager.default.delete(at: aliasURL)
}
}
70 changes: 67 additions & 3 deletions PlayCover/ViewModel/AppsVM.swift
Expand Up @@ -7,9 +7,16 @@ import Foundation

class AppsVM: ObservableObject {

public static let versionsFile = PlayTools.playCoverContainer.appendingPathComponent("VERSION")
public static var currentVersion: String {
(try? String(contentsOf: AppsVM.versionsFile)) ?? "2"
}
public static let appDirectory = PlayTools.playCoverContainer.appendingPathComponent("Applications")

static let shared = AppsVM()

private init() {
checkForUpdate()
PlayTools.installOnSystem()
fetchApps()
}
Expand All @@ -19,6 +26,44 @@ class AppsVM: ObservableObject {
@Published var searchText: String = ""
@Published var updatingApps = true

func checkForUpdate() {
do {
switch AppsVM.currentVersion {
case "2":
try updateFromV2ToV3()
default:
return
}
} catch {
Log.shared.error(error)
}
}

private func updateFromV2ToV3() throws {
try FileManager.default.createDirectory(at: AppsVM.appDirectory, withIntermediateDirectories: true)

let directoryContents = try FileManager.default
.contentsOfDirectory(at: PlayTools.playCoverContainer, includingPropertiesForKeys: nil, options: [])

let subdirs = directoryContents.filter { $0.hasDirectoryPath }

for sub in subdirs {
if sub.pathExtension.contains("app") &&
FileManager.default.fileExists(atPath: sub.appendingPathComponent("Info")
.appendingPathExtension("plist")
.path) {
let app = PlayApp(appUrl: sub)
app.removeAlias()
try FileManager.default.moveItem(at: app.url,
to: AppsVM.appDirectory
.appendingPathComponent(app.info.bundleIdentifier)
.appendingPathExtension("app"))
}
}

try "3".write(to: AppsVM.versionsFile, atomically: false, encoding: .utf8)
}

func fetchApps() {
Task { @MainActor in
updatingApps = true
Expand All @@ -28,7 +73,7 @@ class AppsVM: ObservableObject {

do {
let directoryContents = try FileManager.default
.contentsOfDirectory(at: PlayTools.playCoverContainer, includingPropertiesForKeys: nil, options: [])
.contentsOfDirectory(at: AppsVM.appDirectory, includingPropertiesForKeys: nil, options: [])

let subdirs = directoryContents.filter { $0.hasDirectoryPath }

Expand All @@ -46,13 +91,32 @@ class AppsVM: ObservableObject {
}
}
}

} catch let error as NSError {
} catch {
print(error)
}

filteredApps.sort(by: { $0.name.lowercased() < $1.name.lowercased() })

do {
if !FileManager.default.fileExists(atPath: PlayApp.bundleIDCacheURL.path),
let firstBundleID = apps.first?.info.bundleIdentifier {
try "\(firstBundleID)\n"
.write(to: PlayApp.bundleIDCacheURL, atomically: false, encoding: .utf8)
}

for bundleId in apps.map({ $0.info.bundleIdentifier })
where !(try PlayApp.bundleIDCache).contains(bundleId) {
if let bundleID = "\(bundleId)\n".data(using: .utf8) {
let cacheFile = try FileHandle(forUpdating: PlayApp.bundleIDCacheURL)
try cacheFile.seekToEnd()
try cacheFile.write(contentsOf: bundleID)
try cacheFile.close()
}
}
} catch {
Log.shared.error(error)
}

updatingApps = false
}
}
Expand Down
20 changes: 10 additions & 10 deletions PlayCover/Views/AppSettingsView.swift
Expand Up @@ -156,6 +156,11 @@ struct KeymappingView: View {
Toggle("settings.toggle.autoKM", isOn: $settings.settings.noKMOnInput)
.help("settings.toggle.autoKM.help")
}
HStack {
Toggle("settings.toggle.enableScrollWheel", isOn: $settings.settings.keymapping)
.help("settings.toggle.enableScrollWheel.help")
Spacer()
}
HStack {
Text(String(
format: NSLocalizedString("settings.slider.mouseSensitivity", comment: ""),
Expand Down Expand Up @@ -603,16 +608,6 @@ struct MiscView: View {
}
}
Spacer()
Button((hasAlias ?? true) ? "settings.removeFromLaunchpad" : "settings.addToLaunchpad") {
closeView.toggle()
if !(hasAlias ?? true) {
app.createAlias()
hasAlias = true
} else {
app.removeAlias()
hasAlias = false
}
}
}
Spacer()
.frame(height: 20)
Expand Down Expand Up @@ -689,6 +684,11 @@ struct InfoView: View {
Spacer()
Text("\(info.url.relativePath)")
}
HStack {
Text("settings.info.alias")
Spacer()
Text("\(PlayApp.aliasDirectory.appendingPathComponent(info.bundleIdentifier))")
}
}
.listStyle(.bordered(alternatesRowBackgrounds: true))
.padding()
Expand Down
14 changes: 7 additions & 7 deletions PlayCover/Views/MainView.swift
Expand Up @@ -44,6 +44,13 @@ struct MainView: View {
Label("sidebar.ipaLibrary", systemImage: "arrow.down.circle")
}
}
.toolbar {
ToolbarItem { // Sits on the left by default
Button(action: toggleSidebar, label: {
Image(systemName: "sidebar.leading")
})
}
}
.onChange(of: sidebarGeom.size) { newSize in
navWidth = newSize.width
}
Expand Down Expand Up @@ -88,13 +95,6 @@ struct MainView: View {
.onAppear {
self.selectedView = URLObserved.type == .source ? 2 : 1
}
.toolbar {
ToolbarItem { // Sits on the left by default
Button(action: toggleSidebar, label: {
Image(systemName: "sidebar.leading")
})
}
}
.overlay {
HStack {
if !collapsed {
Expand Down

0 comments on commit d2b46c1

Please sign in to comment.