Author: loonycyborg
Date: Sun Aug 7 22:17:29 2011
New Revision: 50647
URL: http://svn.gna.org/viewcvs/wesnoth?rev=50647&view=rev
Log:
Made the network transmission dialog track upload progress when uploading addons
instead of tracking the progress of downloading the server's responce.
Modified:
trunk/src/addon/manager.cpp
trunk/src/gui/dialogs/network_transmission.cpp
trunk/src/gui/dialogs/network_transmission.hpp
trunk/src/network_asio.cpp
trunk/src/network_asio.hpp
Modified: trunk/src/addon/manager.cpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/addon/manager.cpp?rev=50647&r1=50646&r2=50647&view=diff
==============================================================================
--- trunk/src/addon/manager.cpp (original)
+++ trunk/src/addon/manager.cpp Sun Aug 7 22:17:29 2011
@@ -528,7 +528,7 @@
LOG_NET << "uploading add-on...\n";
connection.transfer(request, response);
- gui2::tnetwork_transmission upload_dialog(connection,
_("Sending add-on"), "");
+ gui2::tnetwork_transmission upload_dialog(connection,
_("Sending add-on"), "", true);
result = upload_dialog.show(disp.video());
if(!result) return;
Modified: trunk/src/gui/dialogs/network_transmission.cpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/gui/dialogs/network_transmission.cpp?rev=50647&r1=50646&r2=50647&view=diff
==============================================================================
--- trunk/src/gui/dialogs/network_transmission.cpp (original)
+++ trunk/src/gui/dialogs/network_transmission.cpp Sun Aug 7 22:17:29 2011
@@ -38,9 +38,15 @@
if(connection_.done()) {
window_.get().set_retval(twindow::OK);
} else {
- if(connection_.bytes_to_read()) {
- size_t completed = connection_.bytes_read();
- size_t total = connection_.bytes_to_read();
+ size_t completed, total;
+ if(track_upload_) {
+ completed = connection_.bytes_written();
+ total = connection_.bytes_to_write();
+ } else {
+ completed = connection_.bytes_read();
+ total = connection_.bytes_to_read();
+ }
+ if(total) {
find_widget<tprogress_bar>(&(window_.get()),
"progress", false)
.set_percentage((completed*100)/total);
@@ -60,9 +66,10 @@
tnetwork_transmission::tnetwork_transmission(
network_asio::connection& connection
, const std::string& title
- , const std::string& subtitle)
+ , const std::string& subtitle
+ , bool track_upload)
: connection_(connection)
- , pump_monitor(connection)
+ , pump_monitor(connection, track_upload)
, subtitle_(subtitle)
{
register_label("title", true, title, false);
Modified: trunk/src/gui/dialogs/network_transmission.hpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/gui/dialogs/network_transmission.hpp?rev=50647&r1=50646&r2=50647&view=diff
==============================================================================
--- trunk/src/gui/dialogs/network_transmission.hpp (original)
+++ trunk/src/gui/dialogs/network_transmission.hpp Sun Aug 7 22:17:29 2011
@@ -38,10 +38,12 @@
class pump_monitor : public events::pump_monitor
{
network_asio::connection& connection_;
+ bool track_upload_;
virtual void process(events::pump_info&);
public:
- pump_monitor(network_asio::connection& connection)
+ pump_monitor(network_asio::connection& connection, bool
track_upload)
: connection_(connection)
+ , track_upload_(track_upload)
, window_()
{
}
@@ -53,7 +55,8 @@
tnetwork_transmission(
network_asio::connection& connection
, const std::string& title
- , const std::string& subtitle);
+ , const std::string& subtitle
+ , bool track_upload = false);
void set_subtitle(const std::string&);
Modified: trunk/src/network_asio.cpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/network_asio.cpp?rev=50647&r1=50646&r2=50647&view=diff
==============================================================================
--- trunk/src/network_asio.cpp (original)
+++ trunk/src/network_asio.cpp Sun Aug 7 22:17:29 2011
@@ -33,6 +33,8 @@
, write_buf_()
, read_buf_()
, handshake_response_()
+ , bytes_to_write_(0)
+ , bytes_written_(0)
, bytes_to_read_(0)
, bytes_read_(0)
{
@@ -107,13 +109,33 @@
std::ostream os(&write_buf_);
write_gz(os, request);
- std::size_t size = write_buf_.size();
- size = htonl(size);
+ bytes_to_write_ = write_buf_.size();
+ bytes_written_ = 0;
+ std::size_t size = htonl(bytes_to_write_);
boost::asio::write(socket_, boost::asio::buffer(reinterpret_cast<const
char*>(&size), 4));
- boost::asio::async_write(socket_, write_buf_,
boost::bind(&connection::handle_write, this, _1, _2));
+ boost::asio::async_write(socket_, write_buf_,
+ boost::bind(&connection::is_write_complete, this, _1, _2),
+ boost::bind(&connection::handle_write, this, _1, _2)
+ );
boost::asio::async_read(socket_, read_buf_,
boost::bind(&connection::is_read_complete, this, _1, _2),
- boost::bind(&connection::handle_read, this, _1, _2,
boost::ref(response)));
+ boost::bind(&connection::handle_read, this, _1, _2,
boost::ref(response))
+ );
+}
+
+std::size_t connection::is_write_complete(
+ const boost::system::error_code& ec,
+ std::size_t bytes_transferred
+ )
+{
+ if(ec)
+ throw system_error(ec);
+ bytes_written_ = bytes_transferred;
+#if BOOST_VERSION >= 103700
+ return bytes_to_write_ - bytes_transferred;
+#else
+ return bytes_to_write_ == bytes_transferred;
+#endif
}
void connection::handle_write(
@@ -159,6 +181,7 @@
{
std::cout << "Read " << bytes_transferred << " bytes.\n";
bytes_to_read_ = 0;
+ bytes_to_write_ = 0;
done_ = true;
if(ec && ec != boost::asio::error::eof)
throw system_error(ec);
Modified: trunk/src/network_asio.hpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/network_asio.hpp?rev=50647&r1=50646&r2=50647&view=diff
==============================================================================
--- trunk/src/network_asio.hpp (original)
+++ trunk/src/network_asio.hpp Sun Aug 7 22:17:29 2011
@@ -65,6 +65,10 @@
boost::uint32_t num;
} handshake_response_;
+ std::size_t is_write_complete(
+ const boost::system::error_code& error,
+ std::size_t bytes_transferred
+ );
void handle_write(
const boost::system::error_code& ec,
std::size_t bytes_transferred
@@ -78,6 +82,8 @@
std::size_t bytes_transferred,
config& response
);
+ std::size_t bytes_to_write_;
+ std::size_t bytes_written_;
std::size_t bytes_to_read_;
std::size_t bytes_read_;
@@ -115,6 +121,14 @@
/** True if connected and no high-level operation is in progress */
bool done() const { return done_; }
+ std::size_t bytes_to_write() const
+ {
+ return bytes_to_write_;
+ }
+ std::size_t bytes_written() const
+ {
+ return bytes_written_;
+ }
std::size_t bytes_to_read() const
{
return bytes_to_read_;
_______________________________________________
Wesnoth-commits mailing list
[email protected]
https://mail.gna.org/listinfo/wesnoth-commits