From de272def02d8173013290d532b82a54bf3454923 Mon Sep 17 00:00:00 2001 From: Jas Singh Date: Sat, 14 Jun 2025 13:12:37 -0700 Subject: [PATCH] Fix: blocking HTTP requests that would freeze the panel. (#1007) --- src/lib/httpClient/index.ts | 20 +++++++++++++++++--- src/services/weather/index.ts | 3 ++- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/lib/httpClient/index.ts b/src/lib/httpClient/index.ts index 8f789cc..ccc79ee 100644 --- a/src/lib/httpClient/index.ts +++ b/src/lib/httpClient/index.ts @@ -161,16 +161,30 @@ class HttpClient { * @param message - Prepared Soup message to send * @param options - Request configuration options */ - private _sendRequest( + private async _sendRequest( resolve: (value: RestResponse | PromiseLike) => void, reject: (reason?: unknown) => void, message: Soup.Message, options: RequestOptions, - ): void { + ): Promise { const cancellable = options.signal ?? null; try { - const bytes = this._session.send_and_read(message, cancellable); + const bytes = await new Promise((resolveAsync, rejectAsync) => { + this._session.send_and_read_async( + message, + GLib.PRIORITY_DEFAULT, + cancellable, + (_, result) => { + try { + const bytes = this._session.send_and_read_finish(result); + resolveAsync(bytes); + } catch (error) { + rejectAsync(error); + } + }, + ); + }); const { response: responseText, diff --git a/src/services/weather/index.ts b/src/services/weather/index.ts index 68f3dfd..fb78145 100644 --- a/src/services/weather/index.ts +++ b/src/services/weather/index.ts @@ -293,7 +293,8 @@ export default class WeatherService { `${provider.baseUrl}?location=${formattedLocation}&key=${weatherKey}`; try { - const response = await httpClient.get(url); + const WEATHER_FETCH_TIMEOUT_MS = 10000; + const response = await httpClient.get(url, { timeout: WEATHER_FETCH_TIMEOUT_MS }); if (response.data && provider.adapter) { const transformedData = provider.adapter.toStandardFormat(response.data);