diff --git a/Cork/ContentView.swift b/Cork/ContentView.swift index 6f2169e4..4dcad6bb 100644 --- a/Cork/ContentView.swift +++ b/Cork/ContentView.swift @@ -238,12 +238,10 @@ struct ContentView: View, Sendable async let availableFormulae = await loadUpPackages(whatToLoad: .formula, appState: appState) async let availableCasks = await loadUpPackages(whatToLoad: .cask, appState: appState) - async let availableTaps = await loadUpTappedTaps() - brewData.installedFormulae = await availableFormulae brewData.installedCasks = await availableCasks - - tapData.addedTaps = await availableTaps + + await tapData.loadAddedTaps() appState.assignPackageTypeToCachedDownloads(brewData: brewData) diff --git a/Cork/Logic/Load up Added Taps.swift b/Cork/Logic/Load up Added Taps.swift new file mode 100644 index 00000000..61255caf --- /dev/null +++ b/Cork/Logic/Load up Added Taps.swift @@ -0,0 +1,113 @@ +// +// Load up Tapped Taps.swift +// Cork +// +// Created by David Bureš on 10.02.2023. +// + +import Foundation + +extension AvailableTaps +{ + /// Load the added taps from disk + func loadAddedTaps() async + { + var finalAvailableTaps: [BrewTap] = .init() + + let contentsOfTapFolder: [URL] = getContentsOfFolder(targetFolder: AppConstants.tapPath, options: .skipsHiddenFiles) + + AppConstants.logger.debug("Contents of tap folder: \(contentsOfTapFolder)") + + for tapRepoParentURL in contentsOfTapFolder + { + AppConstants.logger.debug("Tap repo: \(tapRepoParentURL)") + + let contentsOfTapRepoParent: [URL] = getContentsOfFolder(targetFolder: tapRepoParentURL, options: .skipsHiddenFiles) + + for repoURL in contentsOfTapRepoParent + { + let repoParentComponents: [String] = repoURL.pathComponents + + let repoParentName: String = repoParentComponents.penultimate()! + + let repoNameRaw: String = repoParentComponents.last! + let repoName = String(repoNameRaw.dropFirst(9)) + + let fullTapName = "\(repoParentName)/\(repoName)" + + AppConstants.logger.info("Full tap name: \(fullTapName)") + + finalAvailableTaps.append(BrewTap(name: fullTapName)) + } + } + + let nonLocalBasicTaps = await withTaskGroup(of: BrewTap?.self) + { taskGroup in + if finalAvailableTaps.filter({ $0.name == "homebrew/core" }).isEmpty + { + AppConstants.logger.warning("Couldn't find homebrew/core in local taps") + taskGroup.addTask + { + let isCoreAdded = await checkIfTapIsAdded(tapToCheck: "homebrew/core") + if isCoreAdded + { + AppConstants.logger.info("homebrew/core is added, but not in local taps") + return BrewTap(name: "homebrew/core") + } + else + { + AppConstants.logger.warning("homebrew/core is not added and not in local taps") + return nil + } + } + } + else + { + AppConstants.logger.info("Found homebrew/core in local taps") + } + + if finalAvailableTaps.filter({ $0.name == "homebrew/cask" }).isEmpty + { + AppConstants.logger.warning("Couldn't find homebrew/cask in local taps") + taskGroup.addTask + { + let isCaskAdded = await checkIfTapIsAdded(tapToCheck: "homebrew/cask") + if isCaskAdded + { + return BrewTap(name: "homebrew/cask") + } + else + { + AppConstants.logger.warning("homebrew/cask is not added and not in local taps") + return nil + } + } + } + else + { + AppConstants.logger.info("Found homebrew/cask in local taps") + } + + var nonLocalBasicTapsInternal: [BrewTap] = .init() + + for await tap in taskGroup + { + if let tap = tap + { + nonLocalBasicTapsInternal.append(tap) + } + } + + return nonLocalBasicTapsInternal + } + + finalAvailableTaps.append(contentsOf: nonLocalBasicTaps) + + return self.addedTaps = finalAvailableTaps + } +} + +private func checkIfTapIsAdded(tapToCheck: String) async -> Bool +{ + return true +} diff --git a/Cork/Logic/Load up Tapped Taps.swift b/Cork/Logic/Load up Tapped Taps.swift deleted file mode 100644 index 85df7eea..00000000 --- a/Cork/Logic/Load up Tapped Taps.swift +++ /dev/null @@ -1,112 +0,0 @@ -// -// Load up Tapped Taps.swift -// Cork -// -// Created by David Bureš on 10.02.2023. -// - -import Foundation - -@MainActor -func loadUpTappedTaps() async -> [BrewTap] -{ - var finalAvailableTaps: [BrewTap] = .init() - - let contentsOfTapFolder: [URL] = getContentsOfFolder(targetFolder: AppConstants.tapPath, options: .skipsHiddenFiles) - - AppConstants.logger.debug("Contents of tap folder: \(contentsOfTapFolder)") - - for tapRepoParentURL in contentsOfTapFolder - { - AppConstants.logger.debug("Tap repo: \(tapRepoParentURL)") - - let contentsOfTapRepoParent: [URL] = getContentsOfFolder(targetFolder: tapRepoParentURL, options: .skipsHiddenFiles) - - for repoURL in contentsOfTapRepoParent - { - let repoParentComponents: [String] = repoURL.pathComponents - - let repoParentName: String = repoParentComponents.penultimate()! - - let repoNameRaw: String = repoParentComponents.last! - let repoName = String(repoNameRaw.dropFirst(9)) - - let fullTapName = "\(repoParentName)/\(repoName)" - - AppConstants.logger.info("Full tap name: \(fullTapName)") - - finalAvailableTaps.append(BrewTap(name: fullTapName)) - } - } - - // var nonLocalBasicTaps: [BrewTap] = .init() - - let nonLocalBasicTaps = await withTaskGroup(of: BrewTap?.self) - { taskGroup in - if finalAvailableTaps.filter({ $0.name == "homebrew/core" }).isEmpty - { - AppConstants.logger.warning("Couldn't find homebrew/core in local taps") - taskGroup.addTask - { - let isCoreAdded = await checkIfTapIsAdded(tapToCheck: "homebrew/core") - if isCoreAdded - { - AppConstants.logger.info("homebrew/core is added, but not in local taps") - return BrewTap(name: "homebrew/core") - } - else - { - AppConstants.logger.warning("homebrew/core is not added and not in local taps") - return nil - } - } - } - else - { - AppConstants.logger.info("Found homebrew/core in local taps") - } - - if finalAvailableTaps.filter({ $0.name == "homebrew/cask" }).isEmpty - { - AppConstants.logger.warning("Couldn't find homebrew/cask in local taps") - taskGroup.addTask - { - let isCaskAdded = await checkIfTapIsAdded(tapToCheck: "homebrew/cask") - if isCaskAdded - { - return BrewTap(name: "homebrew/cask") - } - else - { - AppConstants.logger.warning("homebrew/cask is not added and not in local taps") - return nil - } - } - } - else - { - AppConstants.logger.info("Found homebrew/cask in local taps") - } - - var nonLocalBasicTapsInternal: [BrewTap] = .init() - - for await tap in taskGroup - { - if let tap = tap - { - nonLocalBasicTapsInternal.append(tap) - } - } - - return nonLocalBasicTapsInternal - } - - finalAvailableTaps.append(contentsOf: nonLocalBasicTaps) - - return finalAvailableTaps -} - -private func checkIfTapIsAdded(tapToCheck: String) async -> Bool -{ - return true -}