Changeset 693


Ignore:
Timestamp:
01/21/09 11:27:29 (11 years ago)
Author:
kavika
Message:

Support the libtorrent error state.

Location:
trunk/src
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/halSession.cpp

    r690 r693  
    507507                get(a.handle)->signals().torrent_paused(); 
    508508 
    509                 get(a.handle)->locked_process_event(ev_paused_alert()); 
     509                wstring err = get(a.handle)->check_error(); 
     510 
     511                if (err == L"") 
     512                        get(a.handle)->locked_process_event(ev_paused_alert()); 
     513                else 
     514                        get(a.handle)->locked_process_event(ev_error_alert(err)); 
     515 
    510516        } 
    511517         
  • trunk/src/halTorrent.cpp

    r690 r693  
    2020#include "halSession.hpp" 
    2121#include "halConfig.hpp" 
    22 //#include "halSessionAlert.hpp" 
    2322 
    2423namespace hal  
     
    3534        return t; 
    3635} 
    37  
    38  
    3936 
    4037bool file_details::less(const file_details& r, size_t index) const 
     
    124121} 
    125122 
    126 /*bool nameLess(const torrent_details_ptr& left, const torrent_details_ptr& right) 
    127 { 
    128         return left->state() < right->state(); 
    129 } 
    130 */ 
    131123bool torrent_details::less(const torrent_details& r, size_t index) const 
    132124{ 
  • trunk/src/halTorrent.hpp

    r662 r693  
    229229                torrent_stopped, 
    230230                torrent_pausing, 
    231                 torrent_stopping 
     231                torrent_stopping, 
     232                torrent_in_error 
    232233        }; 
    233234 
  • trunk/src/halTorrentIntEvents.hpp

    r691 r693  
    4444}; 
    4545 
     46struct ev_error_alert : sc::event<ev_error_alert> 
     47{ 
     48public: 
     49    ev_error_alert(wstring& e) : 
     50                err_(e) 
     51    {} 
     52    
     53    const wstring& error() const { return err_; } 
     54 
     55private: 
     56    wstring err_; 
     57}; 
     58 
    4659struct ev_pause : sc::event< ev_pause > {}; 
    4760struct ev_paused_alert : sc::event<ev_paused_alert> {}; 
  • trunk/src/halTorrentIntStates.cpp

    r691 r693  
    165165} 
    166166 
     167in_error::in_error(base_type::my_context ctx) : 
     168        base_type::my_base(ctx) 
     169{ 
     170        torrent_internal& t_i = context<torrent_internal>(); 
     171 
     172        TORRENT_STATE_LOG(hal::wform(L"Entering in_error()() - %1%") % t_i.check_error()); 
     173 
     174        t_i.state(torrent_details::torrent_in_error); 
     175} 
     176 
     177in_error::~in_error() 
     178{ 
     179        TORRENT_STATE_LOG(L"Exiting ~in_error()"); 
     180} 
     181 
    167182stopping::stopping(base_type::my_context ctx) : 
    168183        base_type::my_base(ctx) 
  • trunk/src/halTorrentIntStates.hpp

    r691 r693  
    4040struct pausing; 
    4141struct paused; 
     42struct in_error; 
    4243struct stopping; 
    4344struct resume_data_waiting; 
     
    8384                sc::transition< ev_pause, pausing >, 
    8485                sc::custom_reaction< ev_force_recheck >, 
    85                 sc::transition< ev_paused_alert, paused > 
     86                sc::transition< ev_paused_alert, paused >, 
     87                sc::transition< ev_error_alert, in_error > 
    8688        > reactions; 
    8789 
     
    98100        typedef sc::state<pausing, in_the_session::orthogonal< 1 > > base_type; 
    99101 
    100         typedef sc::transition< ev_paused_alert, paused > reactions; 
     102        typedef mpl::list< 
     103                sc::transition< ev_paused_alert, paused >, 
     104                sc::transition< ev_error_alert, in_error > 
     105        > reactions; 
    101106 
    102107        pausing(base_type::my_context ctx); 
     
    112117                sc::custom_reaction< ev_resume >, 
    113118                sc::custom_reaction< ev_force_recheck >, 
    114                 sc::transition< ev_resumed_alert, active > 
     119                sc::transition< ev_resumed_alert, active >, 
     120                sc::transition< ev_error_alert, in_error > 
    115121        > reactions; 
    116122 
     
    123129}; 
    124130 
     131struct in_error : sc::state<in_error, in_the_session::orthogonal< 1 > > 
     132{ 
     133        typedef sc::state<in_error, in_the_session::orthogonal< 1 > > base_type; 
     134 
     135        typedef mpl::list< 
     136                sc::transition< ev_stop, stopped >, 
     137                sc::transition< ev_resumed_alert, active > 
     138        > reactions; 
     139 
     140        in_error(base_type::my_context ctx); 
     141        ~in_error(); 
     142}; 
     143 
    125144struct stopping : sc::state<stopping, in_the_session::orthogonal< 1 > > 
    126145{ 
     
    130149                sc::custom_reaction< ev_paused_alert >, 
    131150                sc::transition< ev_resume_data_alert, stopped >, 
    132                 sc::transition< ev_resume_data_failed_alert, stopped > 
     151                sc::transition< ev_resume_data_failed_alert, stopped >, 
     152                sc::transition< ev_error_alert, in_error > 
    133153        > reactions; 
    134154 
  • trunk/src/halTorrentInternal.hpp

    r691 r693  
    305305        friend struct stopping; 
    306306        friend struct stopped; 
     307        friend struct in_error; 
    307308        friend struct resume_data_waiting; 
    308309        friend struct resume_data_idling; 
     
    403404                case torrent_details::torrent_stopping: 
    404405                        state_str = app().res_wstr(HAL_TORRENT_STOPPING); 
     406                        break; 
     407                         
     408                case torrent_details::torrent_in_error: 
     409                        state_str = L"In Error!"; 
    405410                        break; 
    406411                         
     
    11291134        } 
    11301135 
     1136        wstring check_error()  
     1137        {                
     1138                if (in_session()) 
     1139                { 
     1140                        status_memory_ = handle_.status(); 
     1141                        return from_utf8(status_memory_.error); 
     1142                } 
     1143                else 
     1144                        return L""; 
     1145        } 
     1146 
    11311147        bool awaiting_resume_data() { return awaiting_resume_data_; } 
    11321148 
     
    12471263                        HAL_DEV_MSG(hal::wform(L"Applying Resolve Countries %1%") % resolve_countries_); 
    12481264                } 
    1249         } 
    1250          
    1251 /*      bool completed_pause() 
    1252         { 
    1253                 mutex_t::scoped_lock l(mutex_); 
    1254                 assert(in_session()); 
    1255 //              assert(handle_.is_paused());     
    1256  
    1257                 HAL_DEV_MSG(L"completed_pause()"); 
    1258  
    1259                 save_resume_data();                              
    1260                 state(torrent_details::torrent_paused); 
    1261  
    1262                 return true; 
    1263         } 
    1264  
    1265         bool completed_stop() 
    1266         { 
    1267                 mutex_t::scoped_lock l(mutex_); 
    1268                 assert(in_session()); 
    1269 //              assert(handle_.is_paused());                     
    1270                  
    1271                 if (remove_from_session()) 
    1272                 { 
    1273                         assert(!in_session()); 
    1274                         HAL_DEV_MSG(L"completed_stop()"); 
    1275                 } 
    1276  
    1277                 state(torrent_details::torrent_stopped); 
    1278  
    1279                 return true; 
    1280         } 
    1281 */ 
    1282         void handle_recheck() 
    1283         { 
    1284                 mutex_t::scoped_lock l(mutex_); 
    1285                 state(torrent_details::torrent_stopped); 
    1286  
    1287                 remove_from_session(false); 
    1288                 assert(!in_session()); 
    1289  
    1290                 clear_resume_data(); 
    1291  
    1292                 resume(); 
    1293                 assert(in_session()); 
    1294  
    1295                 HAL_DEV_MSG(L"handle_recheck()"); 
    12961265        } 
    12971266 
Note: See TracChangeset for help on using the changeset viewer.