diff --git a/src/interface/desktop/chat.html b/src/interface/desktop/chat.html index cd47dae5..a6ae9a15 100644 --- a/src/interface/desktop/chat.html +++ b/src/interface/desktop/chat.html @@ -61,7 +61,7 @@ let city = null; let countryName = null; let countryCode = null; - let timezone = null; + let timezone = Intl.DateTimeFormat().resolvedOptions().timeZone; let chatMessageState = { newResponseTextEl: null, newResponseEl: null, diff --git a/src/interface/desktop/shortcut.html b/src/interface/desktop/shortcut.html index 4b07b8ea..9c760019 100644 --- a/src/interface/desktop/shortcut.html +++ b/src/interface/desktop/shortcut.html @@ -312,7 +312,7 @@ let city = null; let countryName = null; let countryCode = null; - let timezone = null; + let timezone = Intl.DateTimeFormat().resolvedOptions().timeZone; fetch("https://ipapi.co/json") .then(response => response.json()) diff --git a/src/interface/obsidian/src/chat_view.ts b/src/interface/obsidian/src/chat_view.ts index f27098ca..ed23bff0 100644 --- a/src/interface/obsidian/src/chat_view.ts +++ b/src/interface/obsidian/src/chat_view.ts @@ -33,10 +33,10 @@ interface ChatMessageState { } interface Location { - region: string; - city: string; - countryName: string; - countryCode: string; + region?: string; + city?: string; + countryName?: string; + countryCode?: string; timezone: string; } @@ -44,7 +44,7 @@ export class KhojChatView extends KhojPaneView { result: string; setting: KhojSetting; waitingForLocation: boolean; - location: Location; + location: Location = { timezone: Intl.DateTimeFormat().resolvedOptions().timeZone }; keyPressTimeout: NodeJS.Timeout | null = null; userMessages: string[] = []; // Store user sent messages for input history cycling currentMessageIndex: number = -1; // Track current message index in userMessages array @@ -1058,13 +1058,11 @@ export class KhojChatView extends KhojPaneView { n: this.setting.resultsCount, stream: true, ...(!!conversationId && { conversation_id: conversationId }), - ...(!!this.location && { - city: this.location.city, - region: this.location.region, - country: this.location.countryName, - country_code: this.location.countryCode, - timezone: this.location.timezone, - }), + ...(!!this.location && this.location.city && { city: this.location.city }), + ...(!!this.location && this.location.region && { region: this.location.region }), + ...(!!this.location && this.location.countryName && { country: this.location.countryName }), + ...(!!this.location && this.location.countryCode && { country_code: this.location.countryCode }), + ...(!!this.location && this.location.timezone && { timezone: this.location.timezone }), }; let newResponseEl = this.createKhojResponseDiv(); diff --git a/src/interface/web/app/automations/page.tsx b/src/interface/web/app/automations/page.tsx index 06a828d8..f2d06c23 100644 --- a/src/interface/web/app/automations/page.tsx +++ b/src/interface/web/app/automations/page.tsx @@ -518,12 +518,14 @@ function EditCard(props: EditCardProps) { updateQueryUrl += `&subject=${encodeURIComponent(values.subject)}`; } updateQueryUrl += `&crontime=${encodeURIComponent(cronFrequency)}`; - if (props.locationData) { + if (props.locationData && props.locationData.city) updateQueryUrl += `&city=${encodeURIComponent(props.locationData.city)}`; + if (props.locationData && props.locationData.region) updateQueryUrl += `®ion=${encodeURIComponent(props.locationData.region)}`; + if (props.locationData && props.locationData.country) updateQueryUrl += `&country=${encodeURIComponent(props.locationData.country)}`; + if (props.locationData && props.locationData.timezone) updateQueryUrl += `&timezone=${encodeURIComponent(props.locationData.timezone)}`; - } let method = props.createNew ? "POST" : "PUT"; diff --git a/src/interface/web/app/chat/page.tsx b/src/interface/web/app/chat/page.tsx index 37a894e9..7d87fd81 100644 --- a/src/interface/web/app/chat/page.tsx +++ b/src/interface/web/app/chat/page.tsx @@ -136,7 +136,9 @@ export default function Chat() { const [uploadedFiles, setUploadedFiles] = useState([]); const [image64, setImage64] = useState(""); - const locationData = useIPLocationData(); + const locationData = useIPLocationData() || { + timezone: Intl.DateTimeFormat().resolvedOptions().timeZone, + }; const authenticatedData = useAuthenticatedData(); const isMobileWidth = useIsMobileWidth(); diff --git a/src/interface/web/app/common/utils.ts b/src/interface/web/app/common/utils.ts index b5dbfec8..1e7337b8 100644 --- a/src/interface/web/app/common/utils.ts +++ b/src/interface/web/app/common/utils.ts @@ -2,14 +2,10 @@ import { useEffect, useState } from "react"; import useSWR from "swr"; export interface LocationData { - ip: string; - city: string; - region: string; - country: string; - countryCode: string; - postal: string; - latitude: number; - longitude: number; + city?: string; + region?: string; + country?: string; + countryCode?: string; timezone: string; } @@ -51,9 +47,7 @@ export function useIPLocationData() { { revalidateOnFocus: false }, ); - if (locationDataError) return null; - if (!locationData) return null; - + if (locationDataError || !locationData) return; return locationData; } diff --git a/src/interface/web/app/share/chat/page.tsx b/src/interface/web/app/share/chat/page.tsx index 116a7f7c..9bc5f12d 100644 --- a/src/interface/web/app/share/chat/page.tsx +++ b/src/interface/web/app/share/chat/page.tsx @@ -111,7 +111,9 @@ export default function SharedChat() { const [paramSlug, setParamSlug] = useState(undefined); const [image64, setImage64] = useState(""); - const locationData = useIPLocationData(); + const locationData = useIPLocationData() || { + timezone: Intl.DateTimeFormat().resolvedOptions().timeZone, + }; const authenticatedData = useAuthenticatedData(); const isMobileWidth = useIsMobileWidth();