Changeset 252


Ignore:
Timestamp:
08/14/07 17:02:00 (13 years ago)
Author:
Eoin
Message:
 
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • res/Halite.rc

    r246 r252  
    482482STRINGTABLE  
    483483BEGIN 
    484         HAL_LISTVIEW_COLUMNS              "Name;Status;Completed;Download;Upload;Peers;Seeds;ETA;Copies" 
     484        HAL_LISTVIEW_COLUMNS              "Name;Status;Completed;Download;Upload;Peers;Seeds;ETA;Copies;Tracker;Reannounce;Ratio" 
    485485        HAL_LISTVIEW_DEFAULTS             "100;110;60;60;60;42;45;61;45" 
    486486        HAL_DEBUG_LISTVIEW_COLUMNS        "Time;Message;Severity" 
     
    488488        HAL_TRACKER_LISTVIEW_COLUMNS  "Tracker;Tier" 
    489489        HAL_TRACKER_LISTVIEW_DEFAULTS "287;50" 
    490         HAL_DIALOGPEER_LISTVIEW_COS       "Peer;Download;Upload;Type;Client" 
     490        HAL_DIALOGPEER_LISTVIEW_COS       "Peer;Country;Download;Upload;Type;Client" 
    491491        HAL_DIALOGPEER_LISTVIEW_COS_DEFAULTS      "100;70;70;70;100" 
    492492        HAL_DIALOGPEER_LISTVIEW_ADV       "Peer;Download;Upload;Type;Client;Status" 
  • src/HaliteDialog.cpp

    r248 r252  
    1212HaliteDialog::HaliteDialog(HaliteWindow& halWindow) : 
    1313                dialogBaseClass(halWindow) 
    14 { 
    15 //      ui_.attach(bind(&HaliteDialog::updateDialog, this)); 
    16 //      selection_manager_.attach(bind(&HaliteDialog::selectionChanged, this, _1)); 
    17          
     14{        
    1815//      load(); 
    1916} 
     
    162159} 
    163160 
     161void HaliteDialog::DialogListView::uiUpdate(const hal::TorrentDetails& tD)  
     162{        
     163        if (canUpdate()) 
     164        { 
     165                UpdateLock<listClass> rLock(*this); 
     166//              hal::mutex_t::scoped_lock l(mutex_); 
     167                 
     168                peerDetails_ = tD.selectedTorrent()->peerDetails(); 
     169                //clearAll(); 
     170         
     171                std::sort(peerDetails_.begin(), peerDetails_.end()); 
     172                 
     173                // Wipe details not present 
     174                for(int i = 0; i < GetItemCount(); /*nothing here*/) 
     175                { 
     176                        boost::array<wchar_t, MAX_PATH> ip_address; 
     177                        GetItemText(i, 0, ip_address.c_array(), MAX_PATH); 
     178                         
     179                        hal::PeerDetail ip(ip_address.data()); 
     180                        hal::PeerDetails::iterator iter =  
     181                                std::lower_bound(peerDetails_.begin(), peerDetails_.end(), ip); 
     182                         
     183                        if (iter == peerDetails_.end() || !((*iter) == ip)) 
     184                        { 
     185                                DeleteItem(i); 
     186                        } 
     187                        else 
     188                        { 
     189                                SetItemData(i, std::distance(peerDetails_.begin(), iter)); 
     190                         
     191                                DWORD index = GetItemData(i);            
     192                                hal::event().post(shared_ptr<hal::EventDetail>(new hal::EventDebug(hal::Event::info, (wformat(L"peerDetails set A %1%, %2% - %3%") % i % std::distance(peerDetails_.begin(), iter) % index).str().c_str()))); 
     193 
     194                                ++i; 
     195                        } 
     196                } 
     197                 
     198                // Add additional details 
     199                for (hal::PeerDetails::iterator i=peerDetails_.begin(), e=peerDetails_.end(); 
     200                        i != e; ++i) 
     201                {                        
     202                        LV_FINDINFO findInfo;  
     203                        findInfo.flags = LVFI_STRING; 
     204                        findInfo.psz = const_cast<LPTSTR>((*i).ipAddress.c_str()); 
     205                         
     206                        int itemPos = FindItem(&findInfo, -1); 
     207                        if (itemPos < 0) 
     208                                itemPos = AddItem(GetItemCount(), 0, (*i).ipAddress.c_str(), 0); 
     209         
     210                        SetItemData(itemPos, std::distance(peerDetails_.begin(), i)); 
     211                         
     212                        DWORD index = GetItemData(itemPos);                      
     213                        hal::event().post(shared_ptr<hal::EventDetail>(new hal::EventDebug(hal::Event::info, (wformat(L"peerDetails set B %1%, %2% - %3%") % itemPos % std::distance(peerDetails_.begin(), i) % index).str().c_str()))); 
     214                         
     215                        SetItemText(itemPos, 1, (*i).country.c_str()); 
     216                         
     217                        SetItemText(itemPos, 2, getColumnAdapter(2)->print(*i).c_str()); 
     218                         
     219                        SetItemText(itemPos, 3, getColumnAdapter(3)->print(*i).c_str()); 
     220                         
     221                        if ((*i).seed) 
     222                                SetItemText(itemPos, 4, L"Seed"); 
     223                         
     224                        SetItemText(itemPos, 5, (*i).client.c_str()); 
     225                }                        
     226        } 
     227} 
     228 
    164229void HaliteDialog::uiUpdate(const hal::TorrentDetails& tD)  
    165230{        
     
    187252                                % (static_cast<float>(tD.selectedTorrent()->totalWanted())/(1024*1024)) 
    188253                        ).str().c_str()); 
    189                                  
    190                 m_list.SetRedraw(false); 
    191                 m_list.manager().clearAll(); 
    192                  
    193                 if (!tD.selectedTorrent()->peerDetails().empty()) 
    194                 {                        
    195                          
    196                         foreach (const hal::PeerDetail& peer, tD.selectedTorrent()->peerDetails()) 
    197                         {                        
    198                                 LV_FINDINFO findInfo;  
    199                                 findInfo.flags = LVFI_STRING; 
    200                                 findInfo.psz = const_cast<LPTSTR>(peer.ipAddress.c_str()); 
    201                                  
    202                                 int itemPos = m_list.FindItem(&findInfo, -1); 
    203                                 if (itemPos < 0) 
    204                                         itemPos = m_list.AddItem(0, 0, peer.ipAddress.c_str(), 0); 
    205                                  
    206                                 m_list.SetItemText(itemPos, 1, 
    207                                         (wformat(L"%1$.2fKB/s")  
    208                                                 % (peer.speed.first/1024) 
    209                                         ).str().c_str());        
    210                                  
    211                                 m_list.SetItemText(itemPos, 2, 
    212                                         (wformat(L"%1$.2fKB/s")  
    213                                                 % (peer.speed.second/1024) 
    214                                         ).str().c_str());        
    215                                  
    216                                 if (peer.seed) 
    217                                         m_list.SetItemText(itemPos, 3, L"Seed"); 
    218                                  
    219                                 m_list.SetItemText(itemPos, 4, peer.client.c_str()); 
    220                         }                        
    221                 } 
    222                  
    223                 m_list.SetRedraw(true); 
     254                 
     255                m_list.uiUpdate(tD); 
    224256        } 
    225257        else 
  • src/HaliteDialog.hpp

    r240 r252  
    44#include "stdAfx.hpp" 
    55#include "DdxEx.hpp" 
    6 #include "HaliteListViewCtrl.hpp" 
     6#include "HaliteSortListViewCtrl.hpp" 
    77#include "HaliteDialogBase.hpp" 
    88#include "HaliteIni.hpp" 
     
    1212 
    1313class ui_signal; 
    14  
    15 //class HaliteListViewCtrl; 
    16 //typedef CHaliteListViewCtrl<HaliteListViewCtrl>::selection_manage_class ListViewManager; 
    1714 
    1815class HaliteDialog : 
     
    2118        public CWinDataExchangeEx<HaliteDialog>, 
    2219        public CHaliteDialogBase<HaliteDialog>, 
    23 //      public CHaliteIni<HaliteDialog>, 
    2420        private boost::noncopyable 
    2521{        
     
    2824        typedef CDialogImpl<HaliteDialog> baseClass; 
    2925        typedef CDialogResize<HaliteDialog> resizeClass; 
    30 //      typedef CHaliteIni<HaliteDialog> iniClass; 
    3126        typedef CHaliteDialogBase<HaliteDialog> dialogBaseClass; 
    3227                 
    3328        class DialogListView : 
    34                 public CHaliteListViewCtrl<DialogListView>, 
     29                public CHaliteSortListViewCtrl<DialogListView, const hal::PeerDetail>, 
    3530                public CHaliteIni<DialogListView>, 
    3631                private boost::noncopyable 
     
    3934                typedef HaliteDialog::DialogListView thisClass; 
    4035                typedef CHaliteIni<thisClass> iniClass; 
    41                 typedef CHaliteListViewCtrl<thisClass> listClass; 
     36                typedef CHaliteSortListViewCtrl<DialogListView, const hal::PeerDetail> listClass; 
     37                typedef const hal::PeerDetail pD; 
    4238         
    4339                friend class listClass; 
     40                 
     41                struct ColumnAdapters 
     42                { 
     43                 
     44                typedef listClass::ColumnAdapter ColAdapter_t; 
     45                 
     46                struct SpeedDown : public ColAdapter_t 
     47                { 
     48                        virtual bool less(pD& l, pD& r) { return l.speed.first < r.speed.first; }                
     49                        virtual std::wstring print(pD& p)  
     50                        { 
     51                                return (wformat(L"%1$.2fkb/s") % (p.speed.first/1024)).str();  
     52                        }                
     53                }; 
     54                 
     55                struct SpeedUp : public ColAdapter_t 
     56                { 
     57                        virtual bool less(pD& l, pD& r) { return l.speed.second < r.speed.second; }              
     58                        virtual std::wstring print(pD& p)  
     59                        { 
     60                                return (wformat(L"%1$.2fkb/s") % (p.speed.second/1024)).str();  
     61                        }                
     62                }; 
     63                 
     64                }; 
    4465         
    4566        public:  
     
    5071                }; 
    5172         
    52                 BEGIN_MSG_MAP_EX(DialogListView) 
     73                BEGIN_MSG_MAP_EX(thisClass) 
    5374                        MSG_WM_DESTROY(OnDestroy) 
    5475         
    55                         CHAIN_MSG_MAP(CHaliteListViewCtrl<DialogListView>) 
     76                        CHAIN_MSG_MAP(listClass) 
    5677                        DEFAULT_REFLECTION_HANDLER() 
    5778                END_MSG_MAP() 
    5879         
    5980                DialogListView() : 
    60                         iniClass("listviews/dialog", "DialogPeersList") 
     81                        iniClass("listviews/dialog", "DialogPeersList"), 
     82                        listClass(true,false,false) 
    6183                {                                        
    62                         load(); 
     84                        std::vector<wstring> names;      
     85                        wstring column_names = hal::app().res_wstr(LISTVIEW_ID_COLUMNNAMES); 
     86 
     87                        // "Peer;Country;Download;Upload;Type;Client" 
     88                        boost::split(names, column_names, boost::is_any_of(L";")); 
     89                         
     90                        array<int, 6> widths = {100,20,70,70,70,100}; 
     91                        array<int, 6> order = {0,1,2,3,4,5}; 
     92                        array<bool, 6> visible = {true,true,true,true,true,true}; 
     93                         
     94                        SetDefaults(names, widths, order, visible); 
     95                        Load(); 
    6396                } 
    6497                 
     
    71104                void OnAttach() 
    72105                { 
    73                         SetExtendedListViewStyle(WS_EX_CLIENTEDGE|LVS_EX_FULLROWSELECT|LVS_EX_HEADERDRAGDROP);                   
    74                         SetListViewDetails(); 
     106                        SetExtendedListViewStyle(WS_EX_CLIENTEDGE|LVS_EX_FULLROWSELECT|LVS_EX_HEADERDRAGDROP); 
     107                        SetSortListViewExtendedStyle(SORTLV_USESHELLBITMAPS, SORTLV_USESHELLBITMAPS); 
     108                         
     109                        ApplyDetails(); 
     110                         
     111                        SetColumnSortType(2, LVCOLSORT_CUSTOM, new ColumnAdapters::SpeedDown()); 
     112                        SetColumnSortType(3, LVCOLSORT_CUSTOM, new ColumnAdapters::SpeedUp()); 
    75113                } 
    76114                 
     
    79117                        saveSettings(); 
    80118                } 
    81                                  
     119                 
    82120                friend class boost::serialization::access; 
    83121                template<class Archive> 
     
    87125                                boost::serialization::base_object<listClass>(*this)); 
    88126                } 
     127                 
     128                pD CustomItemConversion(LVCompareParam* param, int iSortCol) 
     129                {                        
     130                //      DWORD index = GetItemData(param->iItem); 
     131                 
     132                        return hal::PeerDetail(L"Eóin"); 
     133                         
     134                        hal::event().post(shared_ptr<hal::EventDetail>(new hal::EventDebug(hal::Event::info, (wformat(L"peerDetails get %1%, %2%. Item count %3%") % param->iItem % param->dwItemData % GetItemCount()).str().c_str()))); 
     135                         
     136                        return peerDetails_[param->dwItemData]; 
     137                }                
     138                 
     139                int CustomItemComparision(pD left, pD right, int iSortCol) 
     140                { 
     141                        hal::event().post(shared_ptr<hal::EventDetail>(new hal::EventDebug(hal::Event::info, (wformat(L"peerDetails left %1%, right %2%") % left.ipAddress % right.ipAddress).str().c_str()))); 
     142                        return 1; 
     143                        ColumnAdapter* pCA = getColumnAdapter(iSortCol); 
     144                         
     145                        if (pCA) 
     146                                return (pCA->less(left, right)) ? 1 : -1; 
     147                        else  
     148                                return 0; 
     149                } 
     150                 
     151                void uiUpdate(const hal::TorrentDetails& tD); 
     152                 
     153        private: 
     154                hal::PeerDetails peerDetails_; 
    89155        }; 
    90156         
  • src/HaliteListView.cpp

    r251 r252  
    44#include "halTorrent.hpp" 
    55 
     6 
     7 
    68HaliteListViewCtrl::HaliteListViewCtrl(HaliteWindow& HalWindow) : 
    79        halWindow_(HalWindow), 
    8         iniClass("listviews/halite", "HaliteListView") 
     10        iniClass("listviews/halite", "HaliteListView"), 
     11        listClass(true, false, false) 
    912{                
    1013        HalWindow.connectUiUpdate(bind(&HaliteListViewCtrl::uiUpdate, this, _1)); 
     
    1316        wstring column_names = hal::app().res_wstr(LISTVIEW_ID_COLUMNNAMES); 
    1417         
     18        // "Name;Status;Completed;Download;Upload;Peers;Seeds;ETA;Copies;Tracker;Reannounce;Ratio" 
    1519        boost::split(names, column_names, boost::is_any_of(L";")); 
    1620         
    17         array<int, 9> widths = {100,110,60,60,60,42,45,61,45}; 
    18         array<int, 9> order = {0,1,2,3,4,5,6,7,8}; 
    19         array<bool, 9> visible = {true,true,true,true,true,true,true,true,true}; 
     21        array<int, 12> widths = {100,110,60,60,60,42,45,61,45,45,45,45}; 
     22        array<int, 12> order = {0,1,2,3,4,5,6,7,8,9,10,11}; 
     23        array<bool, 12> visible = {true,true,true,true,true,true,true,true,true,true,true,true}; 
    2024         
    2125        SetDefaults(names, widths, order, visible); 
     
    3236        SetColumnSortType(0, LVCOLSORT_CUSTOM, new ColumnAdapters::Filename()); 
    3337        SetColumnSortType(1, LVCOLSORT_CUSTOM, new ColumnAdapters::State()); 
    34         SetColumnSortType(2, LVCOLSORT_CUSTOM, new ColumnAdapters::Tracker()); 
     38        SetColumnSortType(2, LVCOLSORT_CUSTOM, new ColumnAdapters::Completion()); 
     39        SetColumnSortType(3, LVCOLSORT_CUSTOM, new ColumnAdapters::SpeedDown()); 
     40        SetColumnSortType(4, LVCOLSORT_CUSTOM, new ColumnAdapters::SpeedUp()); 
     41        SetColumnSortType(5, LVCOLSORT_CUSTOM, new ColumnAdapters::Peers()); 
     42        SetColumnSortType(6, LVCOLSORT_CUSTOM, new ColumnAdapters::Seeds()); 
     43        SetColumnSortType(7, LVCOLSORT_CUSTOM, new ColumnAdapters::ETA()); 
    3544        SetColumnSortType(8, LVCOLSORT_CUSTOM, new ColumnAdapters::DistributedCopies()); 
     45        SetColumnSortType(9, LVCOLSORT_CUSTOM, new ColumnAdapters::Tracker()); 
     46        SetColumnSortType(10, LVCOLSORT_CUSTOM, new ColumnAdapters::UpdateTrackerIn()); 
     47        SetColumnSortType(11, LVCOLSORT_CUSTOM, new ColumnAdapters::Ratio()); 
    3648} 
    3749 
     
    6274                if (itemPos < 0) 
    6375                        itemPos = AddItem(0, 0, td->filename().c_str(), 0); 
    64                  
    65                 SetItemText(itemPos, 1, td->state().c_str()); 
    66                  
    67                 SetItemText(itemPos, 2, (wformat(L"%1$.2f%%")  
    68                                 % (td->completion()*100)).str().c_str()); 
    69                  
    70                 SetItemText(itemPos, 3, (wformat(L"%1$.2fkb/s")  
    71                                 % (td->speed().first/1024)).str().c_str());      
    72                  
    73                 SetItemText(itemPos, 4, (wformat(L"%1$.2fkb/s")  
    74                                 % (td->speed().second/1024)).str().c_str()); 
    75                  
    76                 SetItemText(itemPos, 5, (lexical_cast<wstring>(td->peers())).c_str()); 
    77                  
    78                 SetItemText(itemPos, 6, (lexical_cast<wstring>(td->seeds())).c_str());   
    7976 
    80                 if (!td->estimatedTimeLeft().is_special()) 
     77                for (size_t i=1; i<HaliteListViewCtrl::NumberOfColumns_s; ++i) 
    8178                { 
    82                         SetItemText(itemPos, 7, (hal::from_utf8( 
    83                                 boost::posix_time::to_simple_string(td->estimatedTimeLeft())).c_str())); 
     79                        SetItemText(itemPos, i, getColumnAdapter(i)->print(td).c_str()); 
    8480                } 
    85                 else 
    86                 { 
    87                         SetItemText(itemPos, 7, L"∞");           
    88                 } 
    89                  
    90                 SetItemText(itemPos, 8, (wformat(L"%1$.2f")  
    91                                 % (td->distributedCopies()) 
    92                         ).str().c_str());        
    9381        } 
    9482         
  • src/HaliteListView.hpp

    r251 r252  
    1  
     1 
    22#pragma once 
    33 
     
    5050        }; 
    5151         
     52        struct SpeedDown : public ColAdapter_t 
     53        { 
     54                virtual bool less(tD& l, tD& r) { return l->speed().first < r->speed().first; }          
     55                virtual std::wstring print(tD& t)  
     56                { 
     57                        return (wformat(L"%1$.2fkb/s") % (t->speed().first/1024)).str();  
     58                }                
     59        }; 
     60         
     61        struct SpeedUp : public ColAdapter_t 
     62        { 
     63                virtual bool less(tD& l, tD& r) { return l->speed().second < r->speed().second; }                
     64                virtual std::wstring print(tD& t)  
     65                { 
     66                        return (wformat(L"%1$.2fkb/s") % (t->speed().second/1024)).str();  
     67                }                
     68        }; 
     69 
     70        struct Completion : public ColAdapter_t 
     71        { 
     72                virtual bool less(tD& l, tD& r) { return l->completion() < r->completion(); }            
     73                virtual std::wstring print(tD& t)  
     74                { 
     75                        return (wformat(L"%1$.2f%%") % (t->completion()*100)).str();  
     76                }                
     77        }; 
     78 
     79        struct Peers : public ColAdapter_t 
     80        { 
     81                virtual bool less(tD& l, tD& r) { return l->peers() < r->seeds(); }              
     82                virtual std::wstring print(tD& t) { return lexical_cast<wstring>(t->peers()); }          
     83        }; 
     84         
     85        struct Seeds : public ColAdapter_t 
     86        { 
     87                virtual bool less(tD& l, tD& r) { return l->distributedCopies() < r->distributedCopies(); }              
     88                virtual std::wstring print(tD& t) { return lexical_cast<wstring>(t->seeds()); }          
     89        }; 
     90         
     91        struct ETA : public ColAdapter_t 
     92        { 
     93                virtual bool less(tD& l, tD& r) { return l->estimatedTimeLeft() < r->estimatedTimeLeft(); }              
     94                virtual std::wstring print(tD& t)  
     95                {  
     96                        if (!t->estimatedTimeLeft().is_special()) 
     97                        { 
     98                                return hal::from_utf8( 
     99                                        boost::posix_time::to_simple_string(t->estimatedTimeLeft())); 
     100                        } 
     101                        else 
     102                        { 
     103                                return L"∞";             
     104                        } 
     105                }                
     106        }; 
     107         
     108        struct UpdateTrackerIn : public ColAdapter_t 
     109        { 
     110                virtual bool less(tD& l, tD& r) { return l->updateTrackerIn() < r->updateTrackerIn(); }          
     111                virtual std::wstring print(tD& t)  
     112                {  
     113                        if (!t->updateTrackerIn().is_special()) 
     114                        { 
     115                                return hal::from_utf8( 
     116                                        boost::posix_time::to_simple_string(t->updateTrackerIn())); 
     117                        } 
     118                        else 
     119                        { 
     120                                return L"∞";             
     121                        } 
     122                }                
     123        }; 
     124         
     125        struct Ratio : public ColAdapter_t 
     126        { 
     127                virtual bool less(tD& l, tD& r) { return l->ratio() < r->ratio(); }              
     128                virtual std::wstring print(tD& t) { return lexical_cast<wstring>(t->ratio()); }          
     129        }; 
     130         
    52131        struct DistributedCopies : public ColAdapter_t 
    53132        { 
    54133                virtual bool less(tD& l, tD& r) { return l->distributedCopies() < r->distributedCopies(); }              
    55                 virtual std::wstring print(tD& t) { return L"Eoin"; }            
     134                virtual std::wstring print(tD& t)  
     135                {  
     136                        float copies = t->distributedCopies(); 
     137                         
     138                        if (copies < 0) 
     139                                return L"Seeding";  
     140                        else 
     141                                return lexical_cast<wstring>(copies);            
     142                }                
    56143        }; 
    57144         
     
    106193        void OnDetach(); 
    107194         
     195        enum { NumberOfColumns_s = 12 }; 
     196         
    108197        HaliteWindow& halWindow_; 
    109198}; 
  • src/HaliteSortListViewCtrl.hpp

    r251 r252  
    286286                         
    287287                        menu_.InsertMenuItem(0, false, &minfo); 
    288 //                      TBase* pT = static_cast<TBase*>(this); 
    289 //                      pT->OnAttach(); 
    290288                } 
    291289                 
     
    334332                        std::vector<wstring> widths; 
    335333                        boost::split(widths, column_widths, boost::is_any_of(L";")); 
    336                                          
     334                         
    337335                        listWidths_.reserve(listNames_.size());  
    338336                        listOrder_.reserve(listNames_.size()); 
     
    377375                         
    378376                        AddColumn(name.c_str(), i); 
    379                 //      SetColumnSortType(i, LVCOLSORT_CUSTOM); 
    380377                }                
    381378 
     
    457454        LRESULT OnRClick(int i, LPNMHDR pnmh, BOOL&) 
    458455        { 
    459                 hal::event().post(shared_ptr<hal::EventDetail>(new hal::EventDebug(hal::Event::info, (wformat(L"RClick %1%") % pnmh->code).str().c_str()))); 
     456                //hal::event().post(shared_ptr<hal::EventDetail>(new hal::EventDebug(hal::Event::info, (wformat(L"RClick %1%") % pnmh->code).str().c_str()))); 
    460457                LPNMITEMACTIVATE pia = (LPNMITEMACTIVATE)pnmh; 
    461458                manager_.sync_list(true); 
     
    515512        int CompareItemsCustom(LVCompareParam* pItem1, LVCompareParam* pItem2, int iSortCol) 
    516513        { 
     514                //return 1; 
     515                //hal::mutex_t::scoped_lock l(mutex_); 
     516                 
    517517                TBase* pT = static_cast<TBase*>(this); 
    518518                 
     
    557557                return NULL; 
    558558        } 
    559  
     559         
    560560        SelectionManager manager_; 
     561 
     562        //hal::mutex_t mutex_; 
    561563         
    562564private: 
  • src/halTorrent.cpp

    r248 r252  
    11151115PeerDetail::PeerDetail(lbt::peer_info& peerInfo) : 
    11161116        ipAddress(hal::str_to_wstr(peerInfo.ip.address().to_string())), 
     1117        country(L""), 
    11171118        speed(make_pair(peerInfo.payload_down_speed, peerInfo.payload_up_speed)), 
    11181119        seed(peerInfo.seed), 
     
    11231124#ifndef TORRENT_DISABLE_RESOLVE_COUNTRIES 
    11241125        if (peerInfo.country[0] != 0 && peerInfo.country[1] != 0) 
    1125                 ipAddress = (wformat(L"%1% (%2%)") % ipAddress % hal::str_to_wstr(string(peerInfo.country, 2))).str().c_str(); 
     1126                country = (wformat(L"(%1%)") % hal::str_to_wstr(string(peerInfo.country, 2))).str().c_str(); 
    11261127#endif   
    11271128 
  • src/halTorrent.hpp

    r248 r252  
    5555         
    5656        wstring ipAddress; 
     57        wstring country; 
    5758        std::pair<float,float> speed; 
    5859        bool seed; 
Note: See TracChangeset for help on using the changeset viewer.