Ignore:
Timestamp:
04/03/09 21:17:30 (11 years ago)
Author:
Eoin
Message:

Cleaning up torrent removal code.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/halTorrentInternal.hpp

    r723 r739  
    6161class TorrentInternalOld; 
    6262class torrent_internal; 
     63class torrent_manager; 
    6364} 
    6465 
     
    331332        { 
    332333                state(torrent_details::torrent_stopped); 
    333                 TORRENT_STATE_LOG(L"Torrent state machine initiate"); 
    334                 initiate(); 
    335         } 
    336          
     334        } 
     335 
     336private: 
    337337        torrent_internal(wpath filename, wpath saveDirectory, bit::allocations alloc, wpath move_to_directory=L"") : 
    338338                TORRENT_INTERNALS_DEFAULTS, 
     
    342342        { 
    343343                state(torrent_details::torrent_stopped); 
    344                 assert(the_session_);    
    345                  
    346                 TORRENT_STATE_LOG(L"Torrent state machine initiate"); 
    347                 initiate(); 
     344                assert(the_session_); 
    348345 
    349346                prepare(filename); 
     
    352349        #undef TORRENT_INTERNALS_DEFAULTS 
    353350 
     351public: 
    354352        void locked_process_event(const sc::event_base & e) 
    355353        { 
     
    500498        void clear_resume_data() 
    501499        { 
    502                 wpath resume_file = hal::app().get_working_directory()/L"resume"/filename_; 
     500                wpath resume_file = hal::app().get_working_directory() / L"resume" / (name_ + L".fastresume"); 
    503501                 
    504502                if (exists(resume_file)) 
    505503                        remove(resume_file); 
     504        } 
     505 
     506        void delete_torrent_file() 
     507        {                
     508                wpath torrent_file = hal::app().get_working_directory() / L"torrents" / filename_; 
     509                 
     510                if (exists(torrent_file)) 
     511                        remove(torrent_file); 
    506512        } 
    507513 
     
    754760 
    755761        void get_file_details(file_details_vec& files); 
     762        file_details_vec get_file_details(); 
    756763         
    757764        void prepare(wpath filename); 
     
    852859 
    853860        static libt::session* the_session_;      
     861 
     862        friend class torrent_manager; 
    854863 
    855864private: 
     
    864873        void state(unsigned s); 
    865874 
     875        void initialize_state_machine(torrent_internal_ptr p) 
     876        { 
     877                own_weak_ptr_ = boost::weak_ptr<torrent_internal>(p); 
     878 
     879                TORRENT_STATE_LOG(L"Torrent state machine initiate"); 
     880                initiate(); 
     881        } 
     882 
    866883        mutable mutex_t mutex_; 
    867884        signalers signals_; 
     885 
     886        boost::weak_ptr<torrent_internal> own_weak_ptr_; 
    868887         
    869888        std::pair<float, float> transfer_limit_; 
     
    915934}; 
    916935 
    917 typedef std::map<std::string, TorrentInternalOld> TorrentMap; 
    918 typedef std::pair<std::string, TorrentInternalOld> TorrentPair; 
     936//typedef std::map<std::string, TorrentInternalOld> TorrentMap; 
     937//typedef std::pair<std::string, TorrentInternalOld> TorrentPair; 
    919938 
    920939class torrent_manager :  
     
    936955                explicit torrent_holder(torrent_internal_ptr t) : 
    937956                        torrent(t), filename(torrent->filename()), name(torrent->name()) 
    938                 {} 
    939                                                  
     957                {}                               
     958 
    940959                friend class boost::serialization::access; 
    941960                template<class Archive> 
    942                 void serialize(Archive& ar, const unsigned int version) 
     961                void load(Archive& ar, const unsigned int version) 
    943962                { 
    944963                        using boost::serialization::make_nvp; 
     
    947966                        ar & make_nvp("filename", filename); 
    948967                        ar & make_nvp("name", name); 
    949                 } 
     968 
     969                        torrent->initialize_state_machine(torrent); 
     970                } 
     971 
     972                template<class Archive> 
     973                void save(Archive& ar, const unsigned int version) const 
     974                { 
     975                        using boost::serialization::make_nvp; 
     976 
     977                        ar & make_nvp("torrent", torrent); 
     978                        ar & make_nvp("filename", filename); 
     979                        ar & make_nvp("name", name); 
     980                } 
     981 
     982                BOOST_SERIALIZATION_SPLIT_MEMBER() 
    950983        }; 
    951984         
     
    9761009                iniClass("bittorrent", "torrent_manager", ini) 
    9771010        {} 
     1011         
     1012/*      std::pair<torrent_by_name::iterator, bool> insert(torrent_internal_ptr t) 
     1013        { 
     1014                return insert(torrent_holder(t)); 
     1015        } 
     1016*/ 
     1017 
     1018        torrent_internal_ptr create_torrent(wpath filename, wpath saveDirectory, bit::allocations alloc, wpath move_to_directory=L"") 
     1019        { 
     1020                torrent_internal_ptr t = torrent_internal_ptr(new torrent_internal(filename, saveDirectory, alloc, move_to_directory)); 
     1021 
     1022                std::pair<torrent_by_name::iterator, bool> p = insert(torrent_holder(t)); 
     1023 
     1024                if (!p.second) t.reset(); 
     1025 
     1026                return t;                        
     1027        } 
    9781028 
    9791029        std::pair<torrent_by_name::iterator, bool> insert(const torrent_holder& h) 
    9801030        { 
     1031        //      torrent->initialize_state_machine(torrent); 
     1032 
    9811033                return torrents_.get<by_name>().insert(h); 
    9821034        } 
    983          
    984         std::pair<torrent_by_name::iterator, bool> insert(torrent_internal_ptr t) 
    985         { 
    986                 return insert(torrent_holder(t)); 
    987         } 
    9881035 
    9891036        torrent_internal_ptr get_by_file(const wstring& filename) 
     
    10231070        size_t erase(const wstring& name) 
    10241071        { 
     1072                torrent_by_name::iterator it = torrents_.get<by_name>().find(name); 
     1073                 
     1074                if (it != torrents_.get<by_name>().end()) 
     1075                        (*it).torrent->stop(); 
     1076 
    10251077                return torrents_.get<by_name>().erase(name); 
    10261078        } 
Note: See TracChangeset for help on using the changeset viewer.