Changeset 344


Ignore:
Timestamp:
12/02/07 11:03:47 (12 years ago)
Author:
Eoin
Message:

Deletes files correctly for stopped torrents

Files:
5 edited

Legend:

Unmodified
Added
Removed
  • 7z Halite Source.bat

    r340 r344  
    1 "D:\Program Files\7-Zip\7zG.exe" a -r -t7z Halite.src.7z -mx=7 ../Halite/* -x!test -x!bin -x!.svn -x!tools -x!*.7z -x!*.suo -x!*.ncb -x!*x64 -x!debug -x!Debug -x!release -x!Release 
     1"C:\Program Files\7-Zip\7zG.exe" a -r -t7z Halite.src.7z -mx=7 ../Halite/* -x!test -x!bin -x!.svn -x!tools -x!*.7z -x!*.suo -x!*.ncb -x!*x64 -x!debug -x!Debug -x!release -x!Release 
  • res/Halite.rc

    r341 r344  
    462462    IDS_SAVEPROMPT                "Select a directory to save the files to or cancel to not download torrent at all." 
    463463    IDS_NA                        "N/A" 
    464     HAL_INF                       "" 
     464    HAL_INF                       "" 
    465465    HAL_COMPLETED_SUMMARY         "%1$.2fMB of %2$.2fMB" 
    466466    HAL_DOWNLOAD_SUMMARY          "This Session Downloaded %1$.2fMB, Uploaded %2$.2fMB, Ratio %3$.2f." 
  • src/advtabs/Files.hpp

    r331 r344  
    4040                order_(f.order()) 
    4141        { 
    42                 hal::event().post(shared_ptr<hal::EventDetail>( 
    43                         new hal::EventMsg(wformat(L"Con -> %1% - %2%.") % filename % order())));        } 
     42//              hal::event().post(shared_ptr<hal::EventDetail>( 
     43//                      new hal::EventMsg(wformat(L"Con -> %1% - %2%.") % filename % order())));         
     44        } 
    4445         
    4546        bool operator==(const FileLink& f) const 
  • src/halTorrent.cpp

    r343 r344  
    66 
    77 
    8 #define HALITE_VERSION                                  0,2,9,339 
    9 #define HALITE_VERSION_STRING                   "v 0.2.9 dev 339" 
     8#define HALITE_VERSION                                  0,2,9,341 
     9#define HALITE_VERSION_STRING                   "v 0.2.9 dev 341" 
    1010 
    1111#define LBT_EVENT_TORRENT_FINISHED                                      80001 
     
    684684         
    685685        std::pair<lbt::entry, lbt::entry> prepTorrent(wpath filename, wpath saveDirectory); 
    686         void removalThread(lbt::torrent_handle handle, bool wipeFiles); 
     686        void removalThread(TorrentInternal_ptr pIT, bool wipeFiles); 
    687687         
    688688        lbt::session theSession; 
     
    16321632} 
    16331633 
    1634 void BitTorrent_impl::removalThread(lbt::torrent_handle handle, bool wipeFiles) 
    1635 { 
    1636         try { 
    1637  
    1638         if (wipeFiles) 
    1639                 theSession.remove_torrent(handle, lbt::session::delete_files); 
     1634void BitTorrent_impl::removalThread(TorrentInternal_ptr pIT, bool wipeFiles) 
     1635{ 
     1636        try { 
     1637 
     1638                event().post(shared_ptr<EventDetail>( 
     1639                        new EventMsg(wformat(L" ***     -> A")))); 
     1640                                 
     1641        if (!wipeFiles) 
     1642        { 
     1643                event().post(shared_ptr<EventDetail>( 
     1644                        new EventMsg(wformat(L" ***     -> B")))); 
     1645                                 
     1646                theSession.remove_torrent(pIT->handle()); 
     1647        } 
    16401648        else 
    1641                 theSession.remove_torrent(handle); 
    1642                  
    1643 #if 0    
    1644         if (!wipeFiles) 
    1645                 theSession.remove_torrent(handle); 
    1646         else 
    1647         { 
    1648                 fs::path saveDirectory = handle.save_path(); 
    1649                 lbt::torrent_info info = handle.get_torrent_info(); 
    1650                  
    1651                 theSession.remove_torrent(handle); 
    1652                  
    1653                 foreach (const lbt::file_entry& entry, make_pair(info.begin_files(), info.end_files())) 
    1654                 { 
    1655                         path file_path = saveDirectory / entry.path; 
    1656                          
    1657                         if (exists(file_path) && !file_path.empty()) 
    1658                                 remove_all(file_path); 
    1659                 } 
    1660                  
    1661                 if (info.num_files() != 1) 
    1662                 { 
    1663                         path dir_path = saveDirectory / info.name(); 
    1664                         if (exists(dir_path) && is_empty(dir_path)) 
    1665                                 remove_all(dir_path); 
    1666                 } 
    1667         }        
    1668 #endif   
     1649        { 
     1650                event().post(shared_ptr<EventDetail>( 
     1651                        new EventMsg(wformat(L" ***     -> C")))); 
     1652                         
     1653                if (pIT->inSession()) 
     1654                { 
     1655                        theSession.remove_torrent(pIT->handle(), lbt::session::delete_files); 
     1656                } 
     1657                else 
     1658                { 
     1659                 
     1660                event().post(shared_ptr<EventDetail>( 
     1661                        new EventMsg(wformat(L" ***     -> D")))); 
     1662                         
     1663                        lbt::torrent_info m_info = pIT->infoMemory(); 
     1664                         
     1665                        // delete the files from disk 
     1666                        std::string error; 
     1667                        std::set<std::string> directories; 
     1668                        typedef std::set<std::string>::iterator iter_t; 
     1669                         
     1670                        for (lbt::torrent_info::file_iterator i = m_info.begin_files(true) 
     1671                                , end(m_info.end_files(true)); i != end; ++i) 
     1672                        { 
     1673                                std::string p = (hal::to_utf8(pIT->saveDirectory()) / i->path).string(); 
     1674                                fs::path bp = i->path.branch_path(); 
     1675                                 
     1676                                std::pair<iter_t, bool> ret; 
     1677                                ret.second = true; 
     1678                                while (ret.second && !bp.empty()) 
     1679                                { 
     1680                                        std::pair<iter_t, bool> ret = directories.insert((hal::to_utf8(pIT->saveDirectory()) / bp).string()); 
     1681                                        bp = bp.branch_path(); 
     1682                                } 
     1683                                if (!fs::remove(hal::from_utf8(p).c_str()) && errno != ENOENT) 
     1684                                        error = std::strerror(errno); 
     1685                        } 
     1686 
     1687                        // remove the directories. Reverse order to delete subdirectories first 
     1688 
     1689                        for (std::set<std::string>::reverse_iterator i = directories.rbegin() 
     1690                                , end(directories.rend()); i != end; ++i) 
     1691                        { 
     1692                                if (!fs::remove(hal::from_utf8(*i).c_str()) && errno != ENOENT) 
     1693                                        error = std::strerror(errno); 
     1694                        } 
     1695                } 
     1696         
     1697        } 
     1698 
     1699                event().post(shared_ptr<EventDetail>( 
     1700                        new EventMsg(wformat(L" ***     -> E")))); 
     1701 
    16691702        } HAL_GENERIC_TORRENT_EXCEPTION_CATCH("Torrent Unknown!", "removalThread") 
    16701703} 
     
    16791712        try { 
    16801713         
    1681         lbt::torrent_handle handle = pimpl->theTorrents.get(filename)->handle(); 
     1714        TorrentInternal_ptr pTI = pimpl->theTorrents.get(filename); 
     1715        lbt::torrent_handle handle = pTI->handle(); 
    16821716        pimpl->theTorrents.erase(filename); 
    16831717                 
    1684         thread t(bind(&BitTorrent_impl::removalThread, &*pimpl, handle, false)); 
     1718        thread t(bind(&BitTorrent_impl::removalThread, &*pimpl, pTI, false));    
    16851719         
    16861720        } HAL_GENERIC_TORRENT_EXCEPTION_CATCH(filename, "removeTorrent") 
     
    16961730        try { 
    16971731                 
    1698         lbt::torrent_handle handle = pimpl->theTorrents.get(filename)->handle(); 
     1732        TorrentInternal_ptr pTI = pimpl->theTorrents.get(filename); 
     1733        lbt::torrent_handle handle = pTI->handle(); 
    16991734        pimpl->theTorrents.erase(filename); 
    17001735                 
    1701         thread t(bind(&BitTorrent_impl::removalThread, &*pimpl, handle, true)); 
     1736        thread t(bind(&BitTorrent_impl::removalThread, &*pimpl, pTI, true));     
    17021737         
    17031738        } HAL_GENERIC_TORRENT_EXCEPTION_CATCH(filename, "removeTorrentWipeFiles") 
  • src/halTorrentInternal.hpp

    r343 r344  
    847847                        wformat(L"Loaded names: %1%, %2%") % name_ % filename_))); 
    848848        } 
     849         
     850        lbt::torrent_info& infoMemory() 
     851        { 
     852                if (!infoMemory_.is_valid()) infoMemory_ = lbt::torrent_info(metadata_); 
     853                 
     854                return infoMemory_; 
     855        } 
    849856 
    850857private:         
     
    934941                if (inSession()) 
    935942                        handle_.resolve_countries(resolve_countries_); 
    936         } 
    937          
    938         lbt::torrent_info& infoMemory() 
    939         { 
    940                 if (!infoMemory_.is_valid()) infoMemory_ = lbt::torrent_info(metadata_); 
    941                  
    942                 return infoMemory_; 
    943943        } 
    944944         
Note: See TracChangeset for help on using the changeset viewer.