Changeset 430


Ignore:
Timestamp:
04/30/08 17:12:21 (12 years ago)
Author:
Eoin
Message:

Creation working in principle.

Location:
trunk/src
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/NewTorrentDialog.cpp

    r429 r430  
    99 
    1010#include "NewTorrentDialog.hpp" 
     11#include "ProgressDialog.hpp" 
    1112#include "CSSFileDialog.hpp" 
    1213 
     
    6768    { 
    6869//              HAL_DEV_MSG(currentDir.string()); 
    69                 files.push_back(relDir);                 
     70                files.push_back(baseDir.leaf()/relDir);          
    7071    } 
    7172} 
     
    7980        filesList_.DeleteAllItems(); 
    8081 
     82        try 
     83        { 
     84 
    8185        if (IDOK == fldDlg.DoModal()) 
    8286        { 
    83                 fileRoot_ = wpath(fldDlg.m_szFolderPath); 
    84  
    85                 recurseDirectory(files_, fileRoot_, L"/"); 
     87                fileRoot_ = wpath(fldDlg.m_szFolderPath).branch_path(); 
     88 
     89                recurseDirectory(files_, wpath(fldDlg.m_szFolderPath), L""); 
    8690 
    8791                foreach(wpath& file, files_) 
     
    8993                        int itemPos = filesList_.AddItem(0, 0, file.leaf().c_str(), 0); 
    9094 
    91                         filesList_.SetItemText(itemPos, 1, file.branch_path().string().c_str()); 
     95                        filesList_.SetItemText(itemPos, 1, file.branch_path().file_string().c_str()); 
    9296                        filesList_.SetItemText(itemPos, 2, lexical_cast<wstring>( 
    9397                                hal::fs::file_size(fileRoot_/file)).c_str()); 
    9498                } 
    9599        } 
     100 
     101        } 
     102        catch(const std::exception& e) 
     103        { 
     104                hal::event().post(shared_ptr<hal::EventDetail>( 
     105                        new hal::EventStdException(hal::Event::fatal, e, L"FileSheet::OnDirBrowse"))); 
     106        }        
     107 
    96108} 
    97109 
     
    288300        params.trackers = trackerSheet_.Trackers(); 
    289301 
    290         hal::bittorrent().create_torrent(params, fileSheet_.OutputFile()); 
     302        ProgressDialog progDlg(L"Loading IP filters...", bind( 
     303                &hal::BitTorrent::create_torrent, &hal::bittorrent(), params, fileSheet_.OutputFile(), _1)); 
     304        progDlg.DoModal(); 
    291305 
    292306        } 
  • trunk/src/halTorrent.cpp

    r429 r430  
    1111#include <libtorrent/file.hpp> 
    1212#include <libtorrent/hasher.hpp> 
     13#include <libtorrent/storage.hpp> 
     14#include <libtorrent/file_pool.hpp> 
    1315#include <libtorrent/alert_types.hpp> 
    1416#include <libtorrent/entry.hpp> 
     
    657659                timer_.async_wait(bind(&BitTorrent_impl::alertHandler, this)); 
    658660        } 
     661 
     662        void create_torrent(const create_torrent_params& params, fs::wpath out_file, progressCallback fn) 
     663        {                
     664        try 
     665        { 
     666                boost::intrusive_ptr<lbt::torrent_info> t_info(new lbt::torrent_info); 
     667 
     668                int piece_size = 256 * 1024; 
     669                t_info->set_piece_size(piece_size); 
     670 
     671                HAL_DEV_MSG(L"Files"); 
     672                for (file_size_pairs_t::const_iterator i = params.file_size_pairs.begin(), e = params.file_size_pairs.end(); 
     673                                i != e; ++i) 
     674                { 
     675                        HAL_DEV_MSG(wformat_t(L"file path: %1%, size: %2%") % (*i).first % (*i).second); 
     676                        t_info->add_file(to_utf8((*i).first.string()), (*i).second); 
     677                } 
     678 
     679                lbt::file_pool f_pool; 
     680                 
     681                scoped_ptr<lbt::storage_interface> store( 
     682                        lbt::default_storage_constructor(t_info, to_utf8(params.root_path.string()), 
     683                                f_pool)); 
     684 
     685                HAL_DEV_MSG(L"Trackers"); 
     686                for (tracker_details_t::const_iterator i = params.trackers.begin(), e = params.trackers.end(); 
     687                                i != e; ++i) 
     688                { 
     689                        HAL_DEV_MSG(wformat_t(L"URL: %1%, Tier: %2%") % (*i).url % (*i).tier); 
     690                        t_info->add_tracker(to_utf8((*i).url), (*i).tier); 
     691                } 
     692 
     693                // calculate the hash for all pieces 
     694                int num = t_info->num_pieces(); 
     695                std::vector<char> piece_buf(piece_size); 
     696 
     697                for (int i = 0; i < num; ++i) 
     698                { 
     699                        store->read(&piece_buf[0], i, 0, t_info->piece_size(i)); 
     700 
     701                        lbt::hasher h(&piece_buf[0], t_info->piece_size(i)); 
     702                        t_info->set_hash(i, h.final()); 
     703 
     704                        fn((double)i / num); 
     705 
     706//                      HAL_DEV_MSG(wformat_t(L"URL: %1%, Tier: %2%") % (*i).url % (*i).tier); 
     707                } 
     708 
     709                t_info->set_creator(to_utf8(params.creator).c_str()); 
     710 
     711                // create the torrent and print it to out 
     712                lbt::entry e = t_info->create_torrent(); 
     713                halencode(out_file, e); 
     714        } 
     715        catch(const std::exception& e) 
     716        { 
     717                event().post(shared_ptr<EventDetail>( 
     718                        new EventStdException(Event::fatal, e, L"create_torrent"))); 
     719        }        
     720        } 
    659721         
    660722        std::pair<lbt::entry, lbt::entry> prepTorrent(wpath_t filename, wpath_t saveDirectory); 
     
    725787} 
    726788 
    727 void BitTorrent::create_torrent(const create_torrent_params& params, fs::wpath out_file) 
    728 { 
    729  
    730         HAL_DEV_MSG(wformat_t(L"create_torrent creator: %1%, comment: %2%") % params.creator % params.comment); 
    731  
    732         HAL_DEV_MSG(L"Files"); 
    733         for (file_size_pairs_t::const_iterator i = params.file_size_pairs.begin(), e = params.file_size_pairs.end(); 
    734                         i != e; ++i) 
    735         { 
    736                 HAL_DEV_MSG(wformat_t(L"file path: %1%, size: %2%") % (*i).first % (*i).second); 
    737         } 
    738  
    739         HAL_DEV_MSG(L"Trackers"); 
    740         for (tracker_details_t::const_iterator i = params.trackers.begin(), e = params.trackers.end(); 
    741                         i != e; ++i) 
    742         { 
    743                 HAL_DEV_MSG(wformat_t(L"URL: %1%, Tier: %2%") % (*i).url % (*i).tier); 
    744         } 
     789void BitTorrent::create_torrent(const create_torrent_params& params, fs::wpath out_file, progressCallback fn) 
     790{ 
     791        pimpl->create_torrent(params, out_file, fn); 
    745792} 
    746793 
  • trunk/src/halTorrent.hpp

    r429 r430  
    427427        void saveTorrentData(); 
    428428 
    429         void create_torrent(const create_torrent_params& params, fs::wpath out_file); 
     429        void create_torrent(const create_torrent_params& params, fs::wpath out_file, progressCallback fn); 
    430430         
    431431        bool listenOn(std::pair<int, int> const& portRange); 
Note: See TracChangeset for help on using the changeset viewer.