diff --git a/NearFuture.xcodeproj/project.pbxproj b/NearFuture.xcodeproj/project.pbxproj index 361116c..402ded8 100644 --- a/NearFuture.xcodeproj/project.pbxproj +++ b/NearFuture.xcodeproj/project.pbxproj @@ -580,7 +580,7 @@ ); SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 6.0; + SWIFT_VERSION = 5.0; }; name = Debug; }; @@ -639,7 +639,7 @@ MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_VERSION = 6.0; + SWIFT_VERSION = 5.0; }; name = Release; }; diff --git a/NearFuture/Info.plist b/NearFuture/Info.plist index 0c67376..dfce773 100644 --- a/NearFuture/Info.plist +++ b/NearFuture/Info.plist @@ -1,5 +1,10 @@ - + + AppIntents + + com.neon443.NearFuture.CompleteEvent + + diff --git a/NearFuture/Item.swift b/NearFuture/Item.swift index 445b838..19b2d99 100644 --- a/NearFuture/Item.swift +++ b/NearFuture/Item.swift @@ -10,6 +10,7 @@ import SwiftData import SwiftUI import WidgetKit import UserNotifications +import AppIntents //@Model //final class Item { @@ -590,3 +591,58 @@ func getDevice() -> (sf: String, label: String) { } return (sf: "iphone", label: "iPhone") } + +extension Event: AppEntity { + static let defaultQuery = EventQuery() + + static var typeDisplayRepresentation: TypeDisplayRepresentation { + TypeDisplayRepresentation("skdfj") + } + + var displayRepresentation: DisplayRepresentation { + DisplayRepresentation("eventsss") + } +} + +struct EventQuery: EntityQuery, DynamicOptionsProvider { + typealias Entity = Event + @Dependency var vm: EventViewModel + func results() async throws -> some ResultsCollection { + return vm.events + } + // func defaultResult() async -> DefaultValue? { + // return vm.events[0] + // } + func entities(for identifiers: [Entity.ID]) async throws -> [Entity] { + return vm.events + } + func suggestedEntities() async throws -> some ResultsCollection { + return vm.events //lol cba + } +} + +struct CompleteEvent: AppIntent { + static var title: LocalizedStringResource = "Complete An Event" + static var description = IntentDescription("Mark an Event as complete.") + + @Parameter(title: "Event ID") + var eventID: String + + func perform() async throws -> some IntentResult { + print("s") + var viewModel = EventViewModel() + var eventss = viewModel.events + print("hip") + guard let eventUUID = UUID(uuidString: eventID) else { + print(":sdklfajk") + return .result() + } + print("hii") + if let eventToModify = viewModel.events.firstIndex(where: { $0.id == eventUUID }) { + print("hiii") + viewModel.events[eventToModify].complete = true + viewModel.saveEvents() + } + return .result() + } +} diff --git a/NearFuture/Views/Home/HomeView.swift b/NearFuture/Views/Home/HomeView.swift index a97915a..bee4fd1 100644 --- a/NearFuture/Views/Home/HomeView.swift +++ b/NearFuture/Views/Home/HomeView.swift @@ -5,7 +5,7 @@ // Created by neon443 on 12/05/2025. // -import SwiftUI +import SwiftUI;import AppIntents struct HomeView: View { @ObservedObject var viewModel: EventViewModel @@ -72,9 +72,13 @@ struct HomeView: View { } else { ScrollView { ForEach(filteredEvents) { event in + if #available(iOS 17, *) { + Completebutton(event: event) + } EventListView(viewModel: viewModel, event: event) .transition(.moveAndFade) .id(event.complete) + Divider() } .padding(.horizontal) if filteredEvents.isEmpty { @@ -127,3 +131,17 @@ struct HomeView: View { settingsModel: dummySettingsViewModel() ) } + +@available(iOS 17.0, *) +struct Completebutton: View { + @State var event: Event + var body: some View { + Button(intent: CompleteEvent(eventID: IntentParameter( + title: LocalizedStringResource( + stringLiteral: event.id.uuidString + ) + ))) { + Text(event.name) + } + } +} diff --git a/NearFutureWidgets/NearFutureWidgets.swift b/NearFutureWidgets/NearFutureWidgets.swift index 7129e33..1f9f41d 100644 --- a/NearFutureWidgets/NearFutureWidgets.swift +++ b/NearFutureWidgets/NearFutureWidgets.swift @@ -7,6 +7,7 @@ import WidgetKit import SwiftUI +import AppIntents // Timeline Entry for Widget struct EventWidgetEntry: TimelineEntry { @@ -46,6 +47,24 @@ struct EventWidgetProvider: TimelineProvider { } } + + + + + + + + + + + + + + + + + + // Event Widget View struct EventWidgetView: View { var entry: EventWidgetEntry @@ -135,6 +154,25 @@ struct EventWidgetView: View { .foregroundColor(event.date < Date() ? .red : .primary) .padding(.trailing, -12) } else { + Button( + intent: CompleteEvent( + eventID: IntentParameter( + title: LocalizedStringResource( + stringLiteral: event.id.uuidString + ) + ) + ) + ) { + if event.complete { + Circle() + .frame(width: 10) + .foregroundStyle(.green) + } else { + Circle() + .frame(width: 10) + .foregroundStyle(.gray) + } + } Text(daysUntilEvent(event.date).long) .font(.caption) .multilineTextAlignment(.trailing)