source: trunk/src/advtabs/Peers.cpp @ 495

Revision 495, 2.6 KB checked in by Eoin, 12 years ago (diff)

Changes seem ok.

Line 
1
2//         Copyright Eóin O'Callaghan 2006 - 2007.
3// Distributed under the Boost Software License, Version 1.0.
4//    (See accompanying file LICENSE_1_0.txt or copy at
5//          http://www.boost.org/LICENSE_1_0.txt)
6
7#include "stdAfx.hpp"
8
9#include "../HaliteWindow.hpp"
10#include "../HaliteListView.hpp"
11
12#include "../global/logger.hpp"
13
14#include "Peers.hpp"
15
16void PeerListView::uiUpdate(const hal::TorrentDetails& tD)
17{
18        hal::try_update_lock<listClass> lock(*this);
19        if (lock) 
20        {               
21                peerDetails_.clear();
22               
23                foreach (const hal::TorrentDetail_ptr torrent, tD.selectedTorrents())
24                {
25                        std::copy(torrent->peerDetails().begin(), torrent->peerDetails().end(), 
26                                std::back_inserter(peerDetails_));
27                }
28               
29                std::sort(peerDetails_.begin(), peerDetails_.end());
30               
31                // Wipe details not present
32                for(int i = 0; i < GetItemCount(); /*nothing here*/)
33                {
34                        boost::array<wchar_t, MAX_PATH> ip_address;
35                        GetItemText(i, 0, ip_address.c_array(), MAX_PATH);
36                       
37                        hal::PeerDetail ip(ip_address.data());
38                        hal::PeerDetails::iterator iter = 
39                                std::lower_bound(peerDetails_.begin(), peerDetails_.end(), ip);
40                       
41                        if (iter == peerDetails_.end() || !((*iter) == ip))
42                        {
43                                DeleteItem(i);
44                        }
45                        else
46                        {
47                                SetItemData(i, std::distance(peerDetails_.begin(), iter));
48                                ++i;
49                        }
50                }
51               
52                // Add additional details
53                for (hal::PeerDetails::iterator i=peerDetails_.begin(), e=peerDetails_.end();
54                        i != e; ++i)
55                {                       
56                        LV_FINDINFO findInfo; 
57                        findInfo.flags = LVFI_STRING;
58                        findInfo.psz = const_cast<LPTSTR>((*i).ipAddress.c_str());
59                       
60                        int itemPos = FindItem(&findInfo, -1);
61                        if (itemPos < 0)
62                                itemPos = AddItem(GetItemCount(), 0, (*i).ipAddress.c_str(), 0);
63                       
64                        SetItemData(itemPos, std::distance(peerDetails_.begin(), i));
65                       
66                        SetItemText(itemPos, 1, (*i).country.c_str());
67                       
68                        SetItemText(itemPos, 2, getColumnAdapter(2)->print(*i).c_str());
69                       
70                        SetItemText(itemPos, 3, getColumnAdapter(3)->print(*i).c_str());
71                       
72                        if ((*i).seed)
73                                SetItemText(itemPos, 4, L"Seed");
74                       
75                        SetItemText(itemPos, 5, (*i).client.c_str());
76                       
77                        SetItemText(itemPos, 6, (*i).status.c_str());
78                }
79               
80                ConditionallyDoAutoSort();
81        }
82}
83
84void AdvPeerDialog::uiUpdate(const hal::TorrentDetails& tD)
85{
86        peerList_.uiUpdate(tD);
87}
88
89LRESULT AdvPeerDialog::OnInitDialog(HWND, LPARAM)
90{       
91        peerList_.SubclassWindow(GetDlgItem(HAL_PEERLIST));
92       
93        resizeClass::DlgResize_Init(false, true, WS_CLIPCHILDREN);     
94       
95        return 0;
96}
97
98void AdvPeerDialog::OnClose()
99{
100        if(::IsWindow(m_hWnd)) 
101        {
102                ::DestroyWindow(m_hWnd);
103        }
104}
Note: See TracBrowser for help on using the repository browser.