Working Skelleton
This commit is contained in:
parent
661f8c7dca
commit
b5f062e4b6
@ -15,6 +15,7 @@
|
||||
EC13306F24DD687F008063CF /* YapsFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC13306E24DD687F008063CF /* YapsFile.swift */; };
|
||||
EC13307124DDB3F4008063CF /* FinderHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC13307024DDB3F4008063CF /* FinderHelper.swift */; };
|
||||
EC13307424DF2B2D008063CF /* YapsFileCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC13307324DF2B2D008063CF /* YapsFileCell.swift */; };
|
||||
ECF5A75824E070710010A11D /* RawFileExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECF5A75724E070710010A11D /* RawFileExtensions.swift */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
@ -29,6 +30,7 @@
|
||||
EC13306E24DD687F008063CF /* YapsFile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YapsFile.swift; sourceTree = "<group>"; };
|
||||
EC13307024DDB3F4008063CF /* FinderHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FinderHelper.swift; sourceTree = "<group>"; };
|
||||
EC13307324DF2B2D008063CF /* YapsFileCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YapsFileCell.swift; sourceTree = "<group>"; };
|
||||
ECF5A75724E070710010A11D /* RawFileExtensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RawFileExtensions.swift; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
@ -95,6 +97,7 @@
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
EC13307324DF2B2D008063CF /* YapsFileCell.swift */,
|
||||
ECF5A75724E070710010A11D /* RawFileExtensions.swift */,
|
||||
);
|
||||
path = Struct;
|
||||
sourceTree = "<group>";
|
||||
@ -172,6 +175,7 @@
|
||||
files = (
|
||||
EC13305D24DAE92D008063CF /* ContentView.swift in Sources */,
|
||||
EC13307124DDB3F4008063CF /* FinderHelper.swift in Sources */,
|
||||
ECF5A75824E070710010A11D /* RawFileExtensions.swift in Sources */,
|
||||
EC13306F24DD687F008063CF /* YapsFile.swift in Sources */,
|
||||
EC13307424DF2B2D008063CF /* YapsFileCell.swift in Sources */,
|
||||
EC13305B24DAE92D008063CF /* AppDelegate.swift in Sources */,
|
||||
|
||||
@ -17,7 +17,7 @@ class AppDelegate: NSObject, NSApplicationDelegate {
|
||||
|
||||
func applicationDidFinishLaunching(_ aNotification: Notification) {
|
||||
// Create the SwiftUI view that provides the window contents.
|
||||
let contentView = ContentView(finderHelper: FinderHelper())
|
||||
let contentView = ContentView()
|
||||
|
||||
// Create the window and set the content view.
|
||||
window = NSWindow(
|
||||
|
||||
@ -10,16 +10,21 @@ import SwiftUI
|
||||
|
||||
struct ContentView: View {
|
||||
@State var fileList = [YapsFile]()
|
||||
@State var tabbedFile: YapsFile = YapsFile(name: "EMPTY", file: .init(fileURLWithPath: "Y"))
|
||||
@State var previewImg = Image("placeholder-image")
|
||||
@State var destinationDefined: Bool = false
|
||||
@State var destinationURL: URL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
|
||||
|
||||
let finderHelper: FinderHelper = FinderHelper()
|
||||
|
||||
var finderHelper: FinderHelper
|
||||
|
||||
var body: some View {
|
||||
VStack {
|
||||
HStack {
|
||||
VStack(alignment: .leading) {
|
||||
HStack {
|
||||
Button(action: {
|
||||
let files = self.finderHelper.selectFolder()
|
||||
let files = self.finderHelper.askForFolderAndGetFiles()
|
||||
|
||||
if files.count > 0 {
|
||||
self.fileList.removeAll()
|
||||
@ -28,12 +33,25 @@ struct ContentView: View {
|
||||
}) {
|
||||
Text("Select Folder")
|
||||
}
|
||||
|
||||
Button(action: {
|
||||
if !self.destinationDefined {
|
||||
self.destinationURL = self.finderHelper.selectFolder(modalTitle: "Choose destination folder.")
|
||||
self.destinationDefined = true
|
||||
}
|
||||
self.finderHelper.iLikeThisImage(yapsFile: self.tabbedFile, destination: self.destinationURL)
|
||||
}) {
|
||||
Text("Get It!")
|
||||
}
|
||||
}
|
||||
|
||||
List {
|
||||
ForEach(self.fileList, id: \.self) { yapsFile in
|
||||
YapsFileCell(yapsFile: yapsFile)
|
||||
.focusable()
|
||||
.focusable(true, onFocusChange: { (focusChanged) in
|
||||
//self.focused = focusChanged
|
||||
print("focus changed \(focusChanged)")
|
||||
})
|
||||
.onTapGesture(perform: {
|
||||
let selectedImageURL: URL = yapsFile.file
|
||||
|
||||
@ -41,14 +59,17 @@ struct ContentView: View {
|
||||
|
||||
self.previewImg = FinderHelper().getImageByURL(source: selectedImageURL)
|
||||
.resizable()
|
||||
|
||||
self.tabbedFile = yapsFile
|
||||
})
|
||||
.onMoveCommand { (direction) in
|
||||
print("direction: \(direction)")
|
||||
}
|
||||
}
|
||||
}
|
||||
.listStyle(SidebarListStyle())
|
||||
}
|
||||
.frame(width: 150.0)
|
||||
.frame(width: 200.0)
|
||||
|
||||
GeometryReader { geo in
|
||||
self.previewImg.self
|
||||
@ -57,11 +78,16 @@ struct ContentView: View {
|
||||
.frame(width: geo.size.width)
|
||||
}
|
||||
}
|
||||
|
||||
Text("\(self.tabbedFile.file.absoluteString)")
|
||||
.multilineTextAlignment(.leading)
|
||||
.lineLimit(1)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct ContentView_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
ContentView(finderHelper: FinderHelper())
|
||||
ContentView()
|
||||
}
|
||||
}
|
||||
|
||||
@ -11,11 +11,11 @@ import SwiftUI
|
||||
|
||||
class FinderHelper {
|
||||
|
||||
func selectFolder() -> [YapsFile] {
|
||||
func selectFolder(modalTitle: String) -> URL {
|
||||
let dialog = NSOpenPanel();
|
||||
var fileList = [YapsFile]()
|
||||
var selectedFolder: URL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
|
||||
|
||||
dialog.title = "Select folder of images"
|
||||
dialog.title = modalTitle
|
||||
dialog.showsResizeIndicator = true
|
||||
dialog.showsHiddenFiles = false
|
||||
dialog.allowsMultipleSelection = false
|
||||
@ -26,15 +26,19 @@ class FinderHelper {
|
||||
let result = dialog.url
|
||||
|
||||
if(result != nil) {
|
||||
let path: String = result!.path
|
||||
print("Use \(path)")
|
||||
fileList.append(contentsOf: getFilesList(path: result!))
|
||||
selectedFolder = result!
|
||||
}
|
||||
} else {
|
||||
// User clicked on "Cancel"
|
||||
}
|
||||
|
||||
return fileList
|
||||
return selectedFolder
|
||||
}
|
||||
|
||||
func askForFolderAndGetFiles() -> [YapsFile] {
|
||||
let sourceFolder = selectFolder(modalTitle: "Select image folder")
|
||||
|
||||
return getFilesList(path: sourceFolder)
|
||||
}
|
||||
|
||||
func getFilesList(path: URL) -> [YapsFile] {
|
||||
@ -77,4 +81,67 @@ class FinderHelper {
|
||||
|
||||
return Image(nsImage: image)
|
||||
}
|
||||
|
||||
func iLikeThisImage(yapsFile: YapsFile, destination: URL) {
|
||||
var srcURL = yapsFile.file
|
||||
|
||||
if isRAWavailable(yapsFile: yapsFile) {
|
||||
let raw = getRAW(yapsFile: yapsFile)
|
||||
srcURL = raw
|
||||
//print("i would like to copy \(raw.absoluteString)")
|
||||
} else {
|
||||
//print("no raw file, copy JPG instead")
|
||||
}
|
||||
|
||||
let dstURL = destination.appendingPathComponent(srcURL.lastPathComponent)
|
||||
|
||||
print("to \(dstURL.absoluteString)")
|
||||
|
||||
do {
|
||||
try FileManager.default.copyItem(at: srcURL, to: dstURL)
|
||||
} catch (let error) {
|
||||
print("Cannot copy item at \(srcURL) to \(dstURL): \(error)")
|
||||
}
|
||||
}
|
||||
|
||||
func isRAWavailable(yapsFile: YapsFile) -> Bool {
|
||||
let fullPathJPG = yapsFile.file.path
|
||||
var fileFound: Bool = false
|
||||
|
||||
for extensionEntry in RawFileExtensions.allCases {
|
||||
let fileToCheckFullPath = fullPathJPG.replacingOccurrences(of: yapsFile.file.pathExtension, with: "\(extensionEntry)")
|
||||
//let fileToCheckURL = URL(fileURLWithPath: fileToCheckFullPath)
|
||||
let fileManager = FileManager.default
|
||||
var isDir: ObjCBool = false
|
||||
|
||||
if fileManager.fileExists(atPath: fileToCheckFullPath, isDirectory:&isDir) {
|
||||
if isDir.boolValue {
|
||||
// file exists and is a directory
|
||||
} else {
|
||||
// file exists and is not a directory
|
||||
fileFound = true
|
||||
}
|
||||
} else {
|
||||
// file does not exist
|
||||
}
|
||||
}
|
||||
|
||||
return fileFound
|
||||
}
|
||||
|
||||
func getRAW(yapsFile: YapsFile) -> URL {
|
||||
let fullPathJPG = yapsFile.file.path
|
||||
var fullPathRAW: String = ""
|
||||
|
||||
for extensionEntry in RawFileExtensions.allCases {
|
||||
let fileToCheck = fullPathJPG.replacingOccurrences(of: yapsFile.file.pathExtension, with: "\(extensionEntry)")
|
||||
let fileToCheckURL = URL(fileURLWithPath: fileToCheck)
|
||||
|
||||
if FileManager.default.fileExists(atPath: fileToCheckURL.path) {
|
||||
fullPathRAW = fileToCheck
|
||||
}
|
||||
}
|
||||
|
||||
return URL(fileURLWithPath: fullPathRAW)
|
||||
}
|
||||
}
|
||||
|
||||
55
YAPS/YAPS/Struct/RawFileExtensions.swift
Normal file
55
YAPS/YAPS/Struct/RawFileExtensions.swift
Normal file
@ -0,0 +1,55 @@
|
||||
//
|
||||
// RawFileExtensionscase swift
|
||||
// YAPS
|
||||
//
|
||||
// Created by Gerrit Linnemann on 09case 08case 20case
|
||||
// Copyright © 2020 Adawim UG (haftungsbeschränkt)case All rights reservedcase
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
enum RawFileExtensions: CaseIterable {
|
||||
//case 3fr
|
||||
case ari
|
||||
case arw
|
||||
case bay
|
||||
case braw
|
||||
case crw
|
||||
case cr2
|
||||
case cr3
|
||||
case cap
|
||||
case data
|
||||
case dcs
|
||||
case dcr
|
||||
case dng
|
||||
case drf
|
||||
case eip
|
||||
case erf
|
||||
case fff
|
||||
case gpr
|
||||
case iiq
|
||||
case k25
|
||||
case kdc
|
||||
case mdc
|
||||
case mef
|
||||
case mos
|
||||
case mrw
|
||||
case nef
|
||||
case nrw
|
||||
case obm
|
||||
case orf
|
||||
case pef
|
||||
case ptx
|
||||
case pxn
|
||||
case r3d
|
||||
case raf
|
||||
case raw
|
||||
case rwl
|
||||
case rw2
|
||||
case rwz
|
||||
case sr2
|
||||
case srf
|
||||
case srw
|
||||
case tif
|
||||
case x3f
|
||||
}
|
||||
@ -22,11 +22,7 @@ struct YapsFileCell: View {
|
||||
|
||||
// Text
|
||||
Text(yapsFile.name)
|
||||
.foregroundColor(self.focused ? .red : .green)
|
||||
}
|
||||
.focusable(true, onFocusChange: { (focusChanged) in
|
||||
self.focused = focusChanged
|
||||
print("focus changed \(focusChanged)")
|
||||
})
|
||||
.foregroundColor(self.focused ? .blue : .gray)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -4,7 +4,9 @@
|
||||
<dict>
|
||||
<key>com.apple.security.app-sandbox</key>
|
||||
<true/>
|
||||
<key>com.apple.security.files.user-selected.read-only</key>
|
||||
<key>com.apple.security.device.usb</key>
|
||||
<true/>
|
||||
<key>com.apple.security.files.user-selected.read-write</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</plist>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user