diff --git a/Userland/Applications/Browser/DownloadWidget.cpp b/Userland/Applications/Browser/DownloadWidget.cpp index 162e2255fc..56d7e029e0 100644 --- a/Userland/Applications/Browser/DownloadWidget.cpp +++ b/Userland/Applications/Browser/DownloadWidget.cpp @@ -43,7 +43,7 @@ DownloadWidget::DownloadWidget(const URL& url) m_elapsed_timer.start(); m_download = Web::ResourceLoader::the().connector().start_request("GET", url); VERIFY(m_download); - m_download->on_progress = [this](Optional total_size, u32 downloaded_size) { + m_download->on_progress = [this](Optional total_size, u64 downloaded_size) { did_progress(total_size.value(), downloaded_size); }; @@ -78,6 +78,8 @@ DownloadWidget::DownloadWidget(const URL& url) m_progressbar = add(); m_progressbar->set_fixed_height(20); + m_progressbar->set_max(0); + m_progressbar->set_max(100); m_progress_label = add(); m_progress_label->set_text_alignment(Gfx::TextAlignment::CenterLeft); @@ -117,17 +119,14 @@ DownloadWidget::DownloadWidget(const URL& url) }; } -void DownloadWidget::did_progress(Optional total_size, u32 downloaded_size) +void DownloadWidget::did_progress(Optional total_size, u64 downloaded_size) { - m_progressbar->set_min(0); + int percent = 0; if (total_size.has_value()) { - int percent = roundf(((float)downloaded_size / (float)total_size.value()) * 100.0f); + percent = downloaded_size * 100 / total_size.value(); window()->set_progress(percent); - m_progressbar->set_max(total_size.value()); - } else { - m_progressbar->set_max(0); + m_progressbar->set_value(percent); } - m_progressbar->set_value(downloaded_size); { StringBuilder builder; @@ -140,7 +139,6 @@ void DownloadWidget::did_progress(Optional total_size, u32 downloaded_size) { StringBuilder builder; if (total_size.has_value()) { - int percent = roundf(((float)downloaded_size / (float)total_size.value()) * 100); builder.appendff("{}%", percent); } else { builder.append(human_readable_size(downloaded_size)); diff --git a/Userland/Applications/Browser/DownloadWidget.h b/Userland/Applications/Browser/DownloadWidget.h index 28b4536d58..3e131476dd 100644 --- a/Userland/Applications/Browser/DownloadWidget.h +++ b/Userland/Applications/Browser/DownloadWidget.h @@ -25,7 +25,7 @@ public: private: explicit DownloadWidget(const URL&); - void did_progress(Optional total_size, u32 downloaded_size); + void did_progress(Optional total_size, u64 downloaded_size); void did_finish(bool success); URL m_url; diff --git a/Userland/Libraries/LibCore/NetworkJob.cpp b/Userland/Libraries/LibCore/NetworkJob.cpp index ac6ea63183..98d5ecb077 100644 --- a/Userland/Libraries/LibCore/NetworkJob.cpp +++ b/Userland/Libraries/LibCore/NetworkJob.cpp @@ -56,7 +56,7 @@ void NetworkJob::did_fail(Error error) shutdown(ShutdownMode::DetachFromSocket); } -void NetworkJob::did_progress(Optional total_size, u32 downloaded) +void NetworkJob::did_progress(Optional total_size, u64 downloaded) { if (is_cancelled()) return; diff --git a/Userland/Libraries/LibCore/NetworkJob.h b/Userland/Libraries/LibCore/NetworkJob.h index a7c10de959..529201f97b 100644 --- a/Userland/Libraries/LibCore/NetworkJob.h +++ b/Userland/Libraries/LibCore/NetworkJob.h @@ -29,7 +29,7 @@ public: // Could fire twice, after Headers and after Trailers! Function const& response_headers, Optional response_code)> on_headers_received; Function on_finish; - Function, u32)> on_progress; + Function, u64)> on_progress; bool is_cancelled() const { return m_error == Error::Cancelled; } bool has_error() const { return m_error != Error::None; } @@ -55,7 +55,7 @@ protected: NetworkJob(Stream&); void did_finish(NonnullRefPtr&&); void did_fail(Error); - void did_progress(Optional total_size, u32 downloaded); + void did_progress(Optional total_size, u64 downloaded); ErrorOr do_write(ReadonlyBytes bytes) { return m_output_stream.write_some(bytes); } diff --git a/Userland/Libraries/LibHTTP/Job.cpp b/Userland/Libraries/LibHTTP/Job.cpp index 6a6b979bf4..a66fe7a781 100644 --- a/Userland/Libraries/LibHTTP/Job.cpp +++ b/Userland/Libraries/LibHTTP/Job.cpp @@ -380,7 +380,7 @@ void Job::on_socket_connected() dbgln_if(JOB_DEBUG, "Content-Encoding {} detected, cannot stream output :(", value); m_can_stream_response = false; } else if (name.equals_ignoring_ascii_case("Content-Length"sv)) { - auto length = value.to_uint(); + auto length = value.to_uint(); if (length.has_value()) m_content_length = length.value(); } diff --git a/Userland/Libraries/LibHTTP/Job.h b/Userland/Libraries/LibHTTP/Job.h index 9891b7d643..4eff55567d 100644 --- a/Userland/Libraries/LibHTTP/Job.h +++ b/Userland/Libraries/LibHTTP/Job.h @@ -74,7 +74,7 @@ protected: size_t m_buffered_size { 0 }; size_t m_received_size { 0 }; - Optional m_content_length; + Optional m_content_length; Optional m_current_chunk_remaining_size; Optional m_current_chunk_total_size; bool m_can_stream_response { true }; diff --git a/Userland/Libraries/LibProtocol/Request.cpp b/Userland/Libraries/LibProtocol/Request.cpp index ce31c9a3e2..5260ba8f54 100644 --- a/Userland/Libraries/LibProtocol/Request.cpp +++ b/Userland/Libraries/LibProtocol/Request.cpp @@ -88,7 +88,7 @@ void Request::set_should_buffer_all_input(bool value) m_internal_buffered_data->response_code = move(response_code); }; - on_finish = [this](auto success, u32 total_size) { + on_finish = [this](auto success, auto total_size) { auto output_buffer = ByteBuffer::create_uninitialized(m_internal_buffered_data->payload_stream.used_buffer_size()).release_value_but_fixme_should_propagate_errors(); m_internal_buffered_data->payload_stream.read_until_filled(output_buffer).release_value_but_fixme_should_propagate_errors(); on_buffered_request_finish( @@ -102,7 +102,7 @@ void Request::set_should_buffer_all_input(bool value) stream_into(m_internal_buffered_data->payload_stream); } -void Request::did_finish(Badge, bool success, u32 total_size) +void Request::did_finish(Badge, bool success, u64 total_size) { if (!on_finish) return; @@ -110,7 +110,7 @@ void Request::did_finish(Badge, bool success, u32 total_size) on_finish(success, total_size); } -void Request::did_progress(Badge, Optional total_size, u32 downloaded_size) +void Request::did_progress(Badge, Optional total_size, u64 downloaded_size) { if (on_progress) on_progress(total_size, downloaded_size); diff --git a/Userland/Libraries/LibProtocol/Request.h b/Userland/Libraries/LibProtocol/Request.h index 1dd1d0b140..83e59d157d 100644 --- a/Userland/Libraries/LibProtocol/Request.h +++ b/Userland/Libraries/LibProtocol/Request.h @@ -43,14 +43,14 @@ public: void set_should_buffer_all_input(bool); /// Note: Must be set before `set_should_buffer_all_input(true)`. - Function const& response_headers, Optional response_code, ReadonlyBytes payload)> on_buffered_request_finish; - Function on_finish; - Function total_size, u32 downloaded_size)> on_progress; + Function const& response_headers, Optional response_code, ReadonlyBytes payload)> on_buffered_request_finish; + Function on_finish; + Function total_size, u64 downloaded_size)> on_progress; Function const& response_headers, Optional response_code)> on_headers_received; Function on_certificate_requested; - void did_finish(Badge, bool success, u32 total_size); - void did_progress(Badge, Optional total_size, u32 downloaded_size); + void did_finish(Badge, bool success, u64 total_size); + void did_progress(Badge, Optional total_size, u64 downloaded_size); void did_receive_headers(Badge, HashMap const& response_headers, Optional response_code); void did_request_certificates(Badge); diff --git a/Userland/Libraries/LibProtocol/RequestClient.cpp b/Userland/Libraries/LibProtocol/RequestClient.cpp index c5d6a41742..c4ba73f1a2 100644 --- a/Userland/Libraries/LibProtocol/RequestClient.cpp +++ b/Userland/Libraries/LibProtocol/RequestClient.cpp @@ -54,7 +54,7 @@ bool RequestClient::set_certificate(Badge, Request& request, Deprecated return IPCProxy::set_certificate(request.id(), move(certificate), move(key)); } -void RequestClient::request_finished(i32 request_id, bool success, u32 total_size) +void RequestClient::request_finished(i32 request_id, bool success, u64 total_size) { RefPtr request; if ((request = m_requests.get(request_id).value_or(nullptr))) { @@ -63,7 +63,7 @@ void RequestClient::request_finished(i32 request_id, bool success, u32 total_siz m_requests.remove(request_id); } -void RequestClient::request_progress(i32 request_id, Optional const& total_size, u32 downloaded_size) +void RequestClient::request_progress(i32 request_id, Optional const& total_size, u64 downloaded_size) { if (auto request = const_cast(m_requests.get(request_id).value_or(nullptr))) { request->did_progress({}, total_size, downloaded_size); diff --git a/Userland/Libraries/LibProtocol/RequestClient.h b/Userland/Libraries/LibProtocol/RequestClient.h index ee00ac20aa..7d17a43091 100644 --- a/Userland/Libraries/LibProtocol/RequestClient.h +++ b/Userland/Libraries/LibProtocol/RequestClient.h @@ -32,8 +32,8 @@ public: private: RequestClient(NonnullOwnPtr); - virtual void request_progress(i32, Optional const&, u32) override; - virtual void request_finished(i32, bool, u32) override; + virtual void request_progress(i32, Optional const&, u64) override; + virtual void request_finished(i32, bool, u64) override; virtual void certificate_requested(i32) override; virtual void headers_became_available(i32, HashMap const&, Optional const&) override; diff --git a/Userland/Libraries/LibWeb/Loader/ResourceLoader.h b/Userland/Libraries/LibWeb/Loader/ResourceLoader.h index fe59236d14..751001321d 100644 --- a/Userland/Libraries/LibWeb/Loader/ResourceLoader.h +++ b/Userland/Libraries/LibWeb/Loader/ResourceLoader.h @@ -65,9 +65,9 @@ public: virtual void stream_into(Stream&) = 0; - Function const& response_headers, Optional response_code, ReadonlyBytes payload)> on_buffered_request_finish; - Function on_finish; - Function total_size, u32 downloaded_size)> on_progress; + Function const& response_headers, Optional response_code, ReadonlyBytes payload)> on_buffered_request_finish; + Function on_finish; + Function total_size, u64 downloaded_size)> on_progress; Function on_certificate_requested; protected: diff --git a/Userland/Libraries/LibWebView/RequestServerAdapter.cpp b/Userland/Libraries/LibWebView/RequestServerAdapter.cpp index a403c6c7e0..db654cb7fb 100644 --- a/Userland/Libraries/LibWebView/RequestServerAdapter.cpp +++ b/Userland/Libraries/LibWebView/RequestServerAdapter.cpp @@ -24,13 +24,13 @@ RequestServerRequestAdapter::RequestServerRequestAdapter(NonnullRefPtron_buffered_request_finish(success, total_size, response_headers, response_code, move(payload)); }; - request->on_finish = [weak_this = make_weak_ptr()](bool success, u32 total_size) { + request->on_finish = [weak_this = make_weak_ptr()](bool success, u64 total_size) { if (auto strong_this = weak_this.strong_ref()) if (strong_this->on_finish) strong_this->on_finish(success, total_size); }; - request->on_progress = [weak_this = make_weak_ptr()](Optional total_size, u32 downloaded_size) { + request->on_progress = [weak_this = make_weak_ptr()](Optional total_size, u64 downloaded_size) { if (auto strong_this = weak_this.strong_ref()) if (strong_this->on_progress) strong_this->on_progress(total_size, downloaded_size); diff --git a/Userland/Services/RequestServer/GeminiRequest.cpp b/Userland/Services/RequestServer/GeminiRequest.cpp index 962480f13b..f1a16575da 100644 --- a/Userland/Services/RequestServer/GeminiRequest.cpp +++ b/Userland/Services/RequestServer/GeminiRequest.cpp @@ -41,7 +41,7 @@ GeminiRequest::GeminiRequest(ConnectionFromClient& client, NonnullRefPtron_progress = [this](Optional total, u32 current) { + m_job->on_progress = [this](Optional total, u64 current) { did_progress(move(total), current); }; } diff --git a/Userland/Services/RequestServer/HttpCommon.h b/Userland/Services/RequestServer/HttpCommon.h index 97ff021ded..e5fdd6fa49 100644 --- a/Userland/Services/RequestServer/HttpCommon.h +++ b/Userland/Services/RequestServer/HttpCommon.h @@ -46,7 +46,7 @@ void init(TSelf* self, TJob job) self->did_finish(success); }; - job->on_progress = [self](Optional total, u32 current) { + job->on_progress = [self](Optional total, u64 current) { self->did_progress(total, current); }; if constexpr (requires { job->on_certificate_requested; }) { diff --git a/Userland/Services/RequestServer/Request.cpp b/Userland/Services/RequestServer/Request.cpp index d766bd8508..70824b1497 100644 --- a/Userland/Services/RequestServer/Request.cpp +++ b/Userland/Services/RequestServer/Request.cpp @@ -39,7 +39,7 @@ void Request::did_finish(bool success) m_client.did_finish_request({}, *this, success); } -void Request::did_progress(Optional total_size, u32 downloaded_size) +void Request::did_progress(Optional total_size, u64 downloaded_size) { m_total_size = total_size; m_downloaded_size = downloaded_size; diff --git a/Userland/Services/RequestServer/Request.h b/Userland/Services/RequestServer/Request.h index 7633032e07..ef86e42e69 100644 --- a/Userland/Services/RequestServer/Request.h +++ b/Userland/Services/RequestServer/Request.h @@ -23,7 +23,7 @@ public: virtual URL url() const = 0; Optional status_code() const { return m_status_code; } - Optional total_size() const { return m_total_size; } + Optional total_size() const { return m_total_size; } size_t downloaded_size() const { return m_downloaded_size; } HashMap const& response_headers() const { return m_response_headers; } @@ -35,7 +35,7 @@ public: int request_fd() const { return m_request_fd; } void did_finish(bool success); - void did_progress(Optional total_size, u32 downloaded_size); + void did_progress(Optional total_size, u64 downloaded_size); void set_status_code(u32 status_code) { m_status_code = status_code; } void did_request_certificates(); void set_response_headers(HashMap const&); @@ -50,7 +50,7 @@ private: i32 m_id { 0 }; int m_request_fd { -1 }; // Passed to client. Optional m_status_code; - Optional m_total_size {}; + Optional m_total_size {}; size_t m_downloaded_size { 0 }; NonnullOwnPtr m_output_stream; HashMap m_response_headers; diff --git a/Userland/Services/RequestServer/RequestClient.ipc b/Userland/Services/RequestServer/RequestClient.ipc index 5aa5b105b6..a170af465c 100644 --- a/Userland/Services/RequestServer/RequestClient.ipc +++ b/Userland/Services/RequestServer/RequestClient.ipc @@ -2,8 +2,8 @@ endpoint RequestClient { - request_progress(i32 request_id, Optional total_size, u32 downloaded_size) =| - request_finished(i32 request_id, bool success, u32 total_size) =| + request_progress(i32 request_id, Optional total_size, u64 downloaded_size) =| + request_finished(i32 request_id, bool success, u64 total_size) =| headers_became_available(i32 request_id, HashMap response_headers, Optional status_code) =| // Certificate requests diff --git a/Userland/Utilities/pro.cpp b/Userland/Utilities/pro.cpp index 05314e08e0..7e973b056b 100644 --- a/Userland/Utilities/pro.cpp +++ b/Userland/Utilities/pro.cpp @@ -232,7 +232,7 @@ ErrorOr serenity_main(Main::Arguments arguments) bool should_save_stream_data = false; bool following_url = false; - u32 previous_downloaded_size = 0; + u64 previous_downloaded_size = 0; u32 const report_time_in_ms = 100; u32 const speed_update_time_in_ms = 4000; @@ -274,7 +274,7 @@ ErrorOr serenity_main(Main::Arguments arguments) } } - request->on_progress = [&](Optional maybe_total_size, u32 downloaded_size) { + request->on_progress = [&](Optional maybe_total_size, u64 downloaded_size) { gettimeofday(¤t_time, nullptr); timersub(¤t_time, &previous_time, &time_diff); auto time_diff_ms = time_diff.tv_sec * 1000 + time_diff.tv_usec / 1000;