You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
151 lines
7.3 KiB
151 lines
7.3 KiB
//
|
|
// Created by Marco Schmickler on 26.06.22.
|
|
// Copyright (c) 2022 Marco Schmickler. All rights reserved.
|
|
//
|
|
|
|
import Foundation
|
|
import SwiftUI
|
|
|
|
struct SPhotoAlbumView: View {
|
|
var completionHandler: ((Bool) -> Void)?
|
|
@ObservedObject
|
|
var model: SPhotoModel
|
|
|
|
@State var single = true
|
|
@State var more = false
|
|
@State var edit = false
|
|
@State var embedded = false
|
|
@State var embDown = false
|
|
@State var faceResultImage: UIImage? = nil
|
|
|
|
init(completionHandler: ((Bool) -> ())?, model: SPhotoModel) {
|
|
self.completionHandler = completionHandler
|
|
self.model = model
|
|
}
|
|
|
|
var body: some View {
|
|
let v = VStack {
|
|
HStack {
|
|
Group {
|
|
VStack {
|
|
HStack {
|
|
Button(action: {
|
|
cleanup()
|
|
completionHandler!(true)
|
|
}, label: {
|
|
//Text("cancel")
|
|
Text("X").frame(width: 30)
|
|
})//.foregroundColor(update ? Color.yellow : Color.blue)
|
|
.buttonStyle(BorderlessButtonStyle())
|
|
Button(action: {
|
|
more.toggle()
|
|
}, label: {
|
|
Text("\(model.index)(\(model.folderIndex))").frame(width: 70)
|
|
})
|
|
.foregroundColor(model.scale > model.maxScale ? Color.yellow : Color.blue)
|
|
.buttonStyle(BorderlessButtonStyle())
|
|
Button(action: {
|
|
model.favorite.toggle()
|
|
model.dirty = true
|
|
let kitem = DatabaseManager.sharedInstance.getKItem(model.selectedItem)
|
|
kitem.favorite = model.favorite
|
|
DatabaseManager.sharedInstance.save()
|
|
}, label: {
|
|
Image(systemName: "heart.fill")
|
|
})
|
|
.foregroundColor(model.favorite ? Color.yellow : Color.blue).buttonStyle(BorderlessButtonStyle())
|
|
KToggleButton(text: "embd", binding: $embedded)
|
|
KToggleButton(text: "go", binding: $model.go)
|
|
}
|
|
Text("\(model.selectedItem.name)").foregroundColor(model.preloading > 0 ? Color.yellow : Color.blue)
|
|
}
|
|
Spacer()
|
|
SPhotoScrubber(model: model)
|
|
}
|
|
}
|
|
.frame(height: 50)
|
|
SPhotoView(model: model)
|
|
}.task() {
|
|
model.preload()
|
|
}
|
|
if embedded && !more {
|
|
v.overlay(SEmbeddedVideo(embedded: $embedded, down: $embDown).offset(y: embDown ? 0: 70), alignment: embDown ? .bottomLeading : .topLeading)
|
|
} else if more {
|
|
v.overlay(VStack (spacing: 15 ) {
|
|
KToggleButton(text: "single", binding: $single).frame(height: 30)
|
|
KToggleButton(text: "spring", binding: $model.spring).frame(height: 30)
|
|
Button(action: {
|
|
saveSelectedItem()
|
|
}, label: {
|
|
Text("save")
|
|
})
|
|
.buttonStyle(BorderlessButtonStyle())
|
|
Button(action: {
|
|
if let img = model.selectedItem.thumbImage {
|
|
UIPasteboard.general.image = img
|
|
}
|
|
else if let img = model.selectedItem.image {
|
|
UIPasteboard.general.image = img.scaleDown(1200)
|
|
}
|
|
}, label: {
|
|
Text("copy")
|
|
})
|
|
.buttonStyle(BorderlessButtonStyle())
|
|
Button(action: {faceSelectedItem("sarah"); more=false; }, label: {Text("sarah")}).buttonStyle(BorderlessButtonStyle())
|
|
Button(action: {faceSelectedItem("claudia"); more=false; }, label: {Text("claudia")}).buttonStyle(BorderlessButtonStyle())
|
|
Button(action: {faceSelectedItem("jessica"); more=false; }, label: {Text("jessica")}).buttonStyle(BorderlessButtonStyle())
|
|
Button(action: {faceSelectedItem("marleen"); more=false; }, label: {Text("marleen")}).buttonStyle(BorderlessButtonStyle())
|
|
Button(action: {faceSelectedItem("renate"); more=false; }, label: {Text("renate")}).buttonStyle(BorderlessButtonStyle())
|
|
Button(action: {faceSelectedItem("birgit"); more=false; }, label: {Text("birgit")}).buttonStyle(BorderlessButtonStyle())
|
|
Button(action: {faceSelectedItem("barbara"); more=false; }, label: {Text("barbara")}).buttonStyle(BorderlessButtonStyle())
|
|
Button(action: {faceSelectedItem("nina"); more=false; }, label: {Text("nina")}).buttonStyle(BorderlessButtonStyle())
|
|
Button(action: {faceSelectedItem("nicki"); more=false; }, label: {Text("nina")}).buttonStyle(BorderlessButtonStyle())
|
|
Button(action: {faceSelectedItem("mitra"); more=false; }, label: {Text("nina")}).buttonStyle(BorderlessButtonStyle())
|
|
Button(action: {faceSelectedItem("amruta"); more=false; }, label: {Text("amruta")}).buttonStyle(BorderlessButtonStyle())
|
|
}
|
|
.frame(width: 80, alignment: .top).offset(x: 0, y: 70), alignment: .topLeading)
|
|
.overlay(TagEditor(item: model.allItems[model.index], completionHandler: DatabaseManager.sharedInstance.saveItemMetaData)
|
|
.frame(width: 60, alignment: .top).offset(x: 0, y: 70),
|
|
alignment: .topTrailing)
|
|
} else {
|
|
v
|
|
}
|
|
|
|
}
|
|
|
|
func saveSelectedItem() {
|
|
let item = model.selectedItem
|
|
|
|
DatabaseManager.sharedInstance.saveItemMetaData(item)
|
|
}
|
|
|
|
func faceSelectedItem(_ name: String) {
|
|
let item = model.selectedItem
|
|
let path = item.fullPath.replacing("/srv/samba/ren", with: "z:")
|
|
let dirname = (path as NSString).lastPathComponent
|
|
let outpath1 = path.replacing("/", with: "")
|
|
let outpath = outpath1.replacing("z:", with: "z:/cut/images/"+name+"/"+dirname + "/")
|
|
|
|
print(path)
|
|
print(outpath1)
|
|
print(outpath)
|
|
|
|
Task {
|
|
if !single {
|
|
try await FaceManager.sharedInstance.processFolder(inputFolderPath: path, sourceFacePath: "benchmark/" + name + ".jpg", outputFolderPath: outpath)
|
|
}
|
|
else {
|
|
try! await FaceManager.sharedInstance.processImage(inputImagePath: "input", sourceFacePath: "benchmark/" + name + ".jpg")
|
|
}
|
|
//try! await FaceManager.sharedInstance.processImage(inputImagePath: "input", sourceFacePath: "benchmark/Renate.jpg")
|
|
}
|
|
}
|
|
|
|
func cleanup() {
|
|
for i in model.allItems {
|
|
i.thumbImage = nil
|
|
i.image = nil
|
|
}
|
|
}
|
|
}
|
|
|