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

Reply via email to