mirror of https://github.com/buresdv/Cork
~ Extensions → `DavidFoundation` library
This commit is contained in:
parent
0428b9f8c1
commit
c4670b6e3b
|
|
@ -7,6 +7,7 @@
|
|||
|
||||
import SwiftUI
|
||||
import UserNotifications
|
||||
import DavidFoundation
|
||||
|
||||
@main
|
||||
struct CorkApp: App
|
||||
|
|
|
|||
|
|
@ -1,18 +0,0 @@
|
|||
//
|
||||
// Array - Get Difference.swift
|
||||
// Cork
|
||||
//
|
||||
// Created by David Bureš on 03.09.2023.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
extension Array where Element: Hashable
|
||||
{
|
||||
func difference(from other: [Element]) -> [Element]
|
||||
{
|
||||
let thisSet = Set(self)
|
||||
let otherSet = Set(other)
|
||||
return Array(thisSet.symmetricDifference(otherSet))
|
||||
}
|
||||
}
|
||||
|
|
@ -1,21 +0,0 @@
|
|||
//
|
||||
// Array - Get Second to Last Element.swift
|
||||
// Cork
|
||||
//
|
||||
// Created by David Bureš on 17.03.2023.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
extension Array
|
||||
{
|
||||
func penultimate() -> Element?
|
||||
{
|
||||
if count < 2
|
||||
{
|
||||
return nil
|
||||
}
|
||||
let index = count - 2
|
||||
return self[index]
|
||||
}
|
||||
}
|
||||
|
|
@ -1,16 +0,0 @@
|
|||
//
|
||||
// Array - Prepend.swift
|
||||
// Cork
|
||||
//
|
||||
// Created by David Bureš on 03.10.2023.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
extension Array
|
||||
{
|
||||
mutating func prepend(_ element: Element)
|
||||
{
|
||||
return self.insert(element, at: 0)
|
||||
}
|
||||
}
|
||||
|
|
@ -1,16 +0,0 @@
|
|||
//
|
||||
// Binding - Reverse Bool Value.swift
|
||||
// Cork
|
||||
//
|
||||
// Created by David Bureš on 28.09.2023.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import SwiftUI
|
||||
|
||||
prefix func ! (value: Binding<Bool>) -> Binding<Bool> {
|
||||
Binding<Bool>(
|
||||
get: { !value.wrappedValue },
|
||||
set: { value.wrappedValue = !$0 }
|
||||
)
|
||||
}
|
||||
|
|
@ -1,21 +0,0 @@
|
|||
//
|
||||
// Date - Make Saveable in AppStorage.swift
|
||||
// Cork
|
||||
//
|
||||
// Created by David Bureš on 18.03.2024.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
extension Date: RawRepresentable
|
||||
{
|
||||
public var rawValue: String
|
||||
{
|
||||
timeIntervalSinceReferenceDate.description
|
||||
}
|
||||
|
||||
public init?(rawValue: String)
|
||||
{
|
||||
self = Date(timeIntervalSinceReferenceDate: Double(rawValue) ?? 0.0)
|
||||
}
|
||||
}
|
||||
|
|
@ -1,24 +0,0 @@
|
|||
//
|
||||
// Image - Load from Disk.swift
|
||||
// Cork
|
||||
//
|
||||
// Created by David Bureš on 19.10.2023.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import SwiftUI
|
||||
import AppKit
|
||||
|
||||
extension Image
|
||||
{
|
||||
init?(localURL: URL)
|
||||
{
|
||||
guard let data = try? Data(contentsOf: localURL),
|
||||
let nsImage = NSImage(data: data)
|
||||
else {
|
||||
return nil
|
||||
}
|
||||
|
||||
self.init(nsImage: nsImage)
|
||||
}
|
||||
}
|
||||
|
|
@ -1,44 +0,0 @@
|
|||
//
|
||||
// ProcessInfo - CPU Architecture.swift
|
||||
// Cork
|
||||
//
|
||||
// Created by David Bureš on 09.12.2023.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
enum CPUArchitecture
|
||||
{
|
||||
case arm, intel
|
||||
}
|
||||
|
||||
extension ProcessInfo
|
||||
{
|
||||
var CPUArchitecture: CPUArchitecture?
|
||||
{
|
||||
var sysinfo = utsname()
|
||||
let result = uname(&sysinfo)
|
||||
guard result == EXIT_SUCCESS else
|
||||
{
|
||||
return nil
|
||||
}
|
||||
|
||||
let data = Data(bytes: &sysinfo.machine, count: Int(_SYS_NAMELEN))
|
||||
|
||||
guard let identifier = String(bytes: data, encoding: .ascii) else
|
||||
{
|
||||
return nil
|
||||
}
|
||||
|
||||
let architectureString: String = identifier.trimmingCharacters(in: .controlCharacters)
|
||||
|
||||
if architectureString.starts(with: "arm")
|
||||
{
|
||||
return .arm
|
||||
}
|
||||
else
|
||||
{
|
||||
return .intel
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,22 +0,0 @@
|
|||
//
|
||||
// String - Contains Element in Array.swift
|
||||
// Cork
|
||||
//
|
||||
// Created by David Bureš on 23.02.2023.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
extension String
|
||||
{
|
||||
func containsElementFromArray(_ strings: [String]) -> Bool
|
||||
{
|
||||
strings.contains { contains($0) }
|
||||
}
|
||||
|
||||
static func localizedPluralString(_ key: String, _ number: Int) -> String
|
||||
{
|
||||
let format = NSLocalizedString(key, comment: "")
|
||||
return String.localizedStringWithFormat(format, NSNumber(value: number), number.formatted())
|
||||
}
|
||||
}
|
||||
|
|
@ -1,16 +0,0 @@
|
|||
//
|
||||
// String - Letters Only.swift
|
||||
// Cork
|
||||
//
|
||||
// Created by David Bureš on 17.05.2024.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
extension String
|
||||
{
|
||||
var onlyLetters: String
|
||||
{
|
||||
return String(unicodeScalars.filter(CharacterSet.letters.contains))
|
||||
}
|
||||
}
|
||||
|
|
@ -1,27 +0,0 @@
|
|||
//
|
||||
// String - LocalizedStringKey to String.swift
|
||||
// Cork
|
||||
//
|
||||
// Created by David Bureš on 10.03.2024.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import SwiftUI
|
||||
|
||||
extension LocalizedStringKey
|
||||
{
|
||||
var stringKey: String?
|
||||
{
|
||||
Mirror(reflecting: self).children.first(where: { $0.label == "key" })?.value as? String
|
||||
}
|
||||
|
||||
func stringValue(locale: Locale = .current) -> String?
|
||||
{
|
||||
guard let stringKey = stringKey else { return nil }
|
||||
guard let language = locale.language.languageCode?.identifier else { return stringKey }
|
||||
guard let path = Bundle.main.path(forResource: language, ofType: "lproj") else { return stringKey }
|
||||
guard let bundle = Bundle(path: path) else { return stringKey }
|
||||
let localizedString = NSLocalizedString(stringKey, bundle: bundle, comment: "")
|
||||
return localizedString
|
||||
}
|
||||
}
|
||||
|
|
@ -1,16 +0,0 @@
|
|||
//
|
||||
// String - Remove Numbers.swift
|
||||
// Cork
|
||||
//
|
||||
// Created by David Bureš on 17.05.2024.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
extension String
|
||||
{
|
||||
func numbersRemoved() -> String
|
||||
{
|
||||
return self.components(separatedBy: CharacterSet.decimalDigits).joined()
|
||||
}
|
||||
}
|
||||
|
|
@ -1,21 +0,0 @@
|
|||
//
|
||||
// URL - Creation Date.swift
|
||||
// Cork
|
||||
//
|
||||
// Created by David Bureš on 07.07.2024.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
extension URL
|
||||
{
|
||||
var creationDate: Date?
|
||||
{
|
||||
guard let attributesOfSpecifiedURL: [FileAttributeKey : Any] = try? FileManager.default.attributesOfItem(atPath: self.path) else
|
||||
{
|
||||
return nil
|
||||
}
|
||||
|
||||
return attributesOfSpecifiedURL[.creationDate] as? Date
|
||||
}
|
||||
}
|
||||
|
|
@ -1,16 +0,0 @@
|
|||
//
|
||||
// URL - Is Directory.swift
|
||||
// Cork
|
||||
//
|
||||
// Created by David Bureš on 07.07.2024.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
extension URL
|
||||
{
|
||||
var isDirectory: Bool
|
||||
{
|
||||
return (try? resourceValues(forKeys: [.isDirectoryKey]))?.isDirectory == true
|
||||
}
|
||||
}
|
||||
|
|
@ -1,50 +0,0 @@
|
|||
//
|
||||
// URL - Reveal in Finder.swift
|
||||
// Cork
|
||||
//
|
||||
// Created by David Bureš on 23.05.2024.
|
||||
//
|
||||
|
||||
import AppKit
|
||||
import Foundation
|
||||
|
||||
enum FolderOpeningType
|
||||
{
|
||||
case openTargetItself, openParentDirectoryAndHighlightTarget
|
||||
}
|
||||
|
||||
extension URL
|
||||
{
|
||||
func revealInFinder(_ folderOpeningType: FolderOpeningType)
|
||||
{
|
||||
switch folderOpeningType
|
||||
{
|
||||
case .openTargetItself:
|
||||
guard let resourceValues = try? resourceValues(forKeys: [.isDirectoryKey])
|
||||
else
|
||||
{
|
||||
NSWorkspace.shared.selectFile(self.path, inFileViewerRootedAtPath: self.deletingLastPathComponent().path)
|
||||
return
|
||||
}
|
||||
|
||||
guard let isDirectory = resourceValues.isDirectory
|
||||
else
|
||||
{
|
||||
NSWorkspace.shared.selectFile(self.path, inFileViewerRootedAtPath: self.deletingLastPathComponent().path)
|
||||
return
|
||||
}
|
||||
|
||||
if isDirectory
|
||||
{
|
||||
NSWorkspace.shared.selectFile(nil, inFileViewerRootedAtPath: self.path)
|
||||
}
|
||||
else
|
||||
{
|
||||
NSWorkspace.shared.selectFile(self.path, inFileViewerRootedAtPath: self.deletingLastPathComponent().path)
|
||||
}
|
||||
|
||||
case .openParentDirectoryAndHighlightTarget:
|
||||
NSWorkspace.shared.selectFile(self.path, inFileViewerRootedAtPath: self.deletingLastPathComponent().path)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,24 +0,0 @@
|
|||
//
|
||||
// View - Conditional Modifiers.swift
|
||||
// Cork
|
||||
//
|
||||
// Created by David Bureš on 16.02.2023.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import SwiftUI
|
||||
|
||||
extension View
|
||||
{
|
||||
@ViewBuilder func `if`<Content: View>(_ condition: Bool, transform: (Self) -> Content) -> some View
|
||||
{
|
||||
if condition
|
||||
{
|
||||
transform(self)
|
||||
}
|
||||
else
|
||||
{
|
||||
self
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,20 +0,0 @@
|
|||
//
|
||||
// View - Disable animations.swift
|
||||
// Cork
|
||||
//
|
||||
// Created by David Bureš on 08.04.2024.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import SwiftUI
|
||||
|
||||
extension View
|
||||
{
|
||||
@ViewBuilder func allAnimationsDisabled() -> some View
|
||||
{
|
||||
self
|
||||
.transaction { transaction in
|
||||
transaction.animation = nil
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,18 +0,0 @@
|
|||
//
|
||||
// View - Fill Available Space.swift
|
||||
// Cork
|
||||
//
|
||||
// Created by David Bureš on 30.03.2024.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import SwiftUI
|
||||
|
||||
extension View
|
||||
{
|
||||
@ViewBuilder func fillAvailableSpace() -> some View
|
||||
{
|
||||
self
|
||||
.frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity)
|
||||
}
|
||||
}
|
||||
|
|
@ -1,20 +0,0 @@
|
|||
//
|
||||
// View - On Window Close.swift
|
||||
// Cork
|
||||
//
|
||||
// Created by David Bureš on 20.03.2024.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import SwiftUI
|
||||
|
||||
extension View
|
||||
{
|
||||
func onWindowClose(action: @escaping () -> Void) -> some View
|
||||
{
|
||||
self
|
||||
.onReceive(NotificationCenter.default.publisher(for: NSWindow.willCloseNotification), perform: { _ in
|
||||
action()
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
@ -1,17 +0,0 @@
|
|||
//
|
||||
// View - Platform Conditional.swift
|
||||
// Cork
|
||||
//
|
||||
// Created by David Bureš on 11.03.2024.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import SwiftUI
|
||||
|
||||
extension View
|
||||
{
|
||||
func modify<T: View>(@ViewBuilder modifier: (Self) -> T) -> T
|
||||
{
|
||||
modifier(self)
|
||||
}
|
||||
}
|
||||
|
|
@ -7,6 +7,7 @@
|
|||
|
||||
import Foundation
|
||||
import AppKit
|
||||
import DavidFoundation
|
||||
|
||||
/// A representation of a Homebrew package
|
||||
struct BrewPackage: Identifiable, Equatable, Hashable
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
"location" : "https://github.com/buresdv/DavidFoundation",
|
||||
"state" : {
|
||||
"branch" : "main",
|
||||
"revision" : "e75dfc53ff6797b6daf5a5b8a96c0fd47df90194"
|
||||
"revision" : "6b09749f713c1c769a664bb49c7fdc46ee9102e0"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in New Issue