2025-06-17 09:43:09 -05:00
|
|
|
import SwiftUI
|
|
|
|
import WidgetKit
|
|
|
|
|
2025-07-15 21:17:24 -05:00
|
|
|
extension Image {
|
|
|
|
@ViewBuilder
|
|
|
|
func tintedWidgetImageModifier() -> some View {
|
|
|
|
if #available(iOS 18.0, *) {
|
|
|
|
self
|
|
|
|
.widgetAccentedRenderingMode(.accentedDesaturated)
|
|
|
|
} else {
|
|
|
|
self
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2025-06-17 09:43:09 -05:00
|
|
|
struct ImmichWidgetView: View {
|
|
|
|
var entry: ImageEntry
|
|
|
|
|
|
|
|
var body: some View {
|
|
|
|
if entry.image == nil {
|
|
|
|
VStack {
|
|
|
|
Image("LaunchImage")
|
2025-07-15 21:17:24 -05:00
|
|
|
.tintedWidgetImageModifier()
|
2025-07-09 13:59:54 -05:00
|
|
|
Text(entry.metadata.error?.errorDescription ?? "")
|
2025-06-17 09:43:09 -05:00
|
|
|
.minimumScaleFactor(0.25)
|
|
|
|
.multilineTextAlignment(.center)
|
|
|
|
.foregroundStyle(.secondary)
|
|
|
|
}
|
|
|
|
.padding(16)
|
|
|
|
} else {
|
|
|
|
ZStack(alignment: .leading) {
|
|
|
|
Color.clear.overlay(
|
|
|
|
Image(uiImage: entry.image!)
|
|
|
|
.resizable()
|
2025-07-15 21:17:24 -05:00
|
|
|
.tintedWidgetImageModifier()
|
2025-06-17 09:43:09 -05:00
|
|
|
.scaledToFill()
|
2025-07-15 21:17:24 -05:00
|
|
|
|
2025-06-17 09:43:09 -05:00
|
|
|
)
|
|
|
|
VStack {
|
|
|
|
Spacer()
|
2025-07-09 13:59:54 -05:00
|
|
|
if let subtitle = entry.metadata.subtitle {
|
2025-06-17 09:43:09 -05:00
|
|
|
Text(subtitle)
|
|
|
|
.foregroundColor(.white)
|
|
|
|
.padding(8)
|
|
|
|
.background(Color.black.opacity(0.6))
|
|
|
|
.cornerRadius(8)
|
|
|
|
.font(.system(size: 16))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
.padding(16)
|
|
|
|
}
|
2025-07-09 13:59:54 -05:00
|
|
|
.widgetURL(entry.metadata.deepLink)
|
2025-06-17 09:43:09 -05:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
#Preview(
|
|
|
|
as: .systemMedium,
|
|
|
|
widget: {
|
|
|
|
ImmichRandomWidget()
|
|
|
|
},
|
|
|
|
timeline: {
|
|
|
|
let date = Date()
|
|
|
|
ImageEntry(
|
|
|
|
date: date,
|
|
|
|
image: UIImage(named: "ImmichLogo"),
|
2025-07-09 13:59:54 -05:00
|
|
|
metadata: EntryMetadata(
|
|
|
|
subtitle: "1 year ago"
|
|
|
|
)
|
2025-06-17 09:43:09 -05:00
|
|
|
)
|
|
|
|
}
|
|
|
|
)
|