source: trunk/src/advtabs/Tracker.cpp @ 778

Revision 778, 5.9 KB checked in by Eoin, 10 years ago (diff)

Made get torrent details non-blocking. Need to do same for get session details.

Line 
1
2//         Copyright Eóin O'Callaghan 2006 - 2009.
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#include "../global/logger.hpp"
12
13#include "Tracker.hpp"
14
15LRESULT AdvTrackerDialog::onInitDialog(HWND, LPARAM)
16{
17        dialogBaseClass::InitializeHalDialogBase();     
18       
19        m_list.Attach(GetDlgItem(HAL_TRACKERLIST));     
20        m_list.attachEditedConnection(bind(&AdvTrackerDialog::trackerListEdited, this));
21
22        ::EnableWindow(GetDlgItem(HAL_TRACKER_LOGINCHECK), false);
23        ::EnableWindow(GetDlgItem(HAL_TRACKERLIST), false);
24       
25        username_ = L"";
26        password_ = L"";
27
28        userEdit_.SubclassWindow(GetDlgItem(HAL_TRACKER_USER));
29        passEdit_.SubclassWindow(GetDlgItem(HAL_TRACKER_PASS));
30               
31        DoDataExchange(false); 
32        return 0;
33}
34
35void AdvTrackerDialog::setLoginUiState()
36{
37        if (username_ == L"")
38        {
39                ::SendMessage(GetDlgItem(HAL_TRACKER_LOGINCHECK), BM_SETCHECK, BST_UNCHECKED, 0);
40                password_ = L"";
41        }
42        else
43        {       
44                ::SendMessage(GetDlgItem(HAL_TRACKER_LOGINCHECK), BM_SETCHECK, BST_CHECKED, 0);
45        }
46       
47        onLoginCheck(0, 0, GetDlgItem(HAL_TRACKER_LOGINCHECK)); 
48}
49
50void AdvTrackerDialog::onClose()
51{
52        if(::IsWindow(m_hWnd)) 
53        {
54                ::DestroyWindow(m_hWnd);
55        }
56}
57
58LRESULT AdvTrackerDialog::OnEditKillFocus(UINT uCode, int nCtrlID, HWND hwndCtrl)
59{
60        DoDataExchange(true);
61               
62        setLoginUiState();
63
64        if (hal::bit::torrent t = hal::bittorrent::Instance().get(focused_torrent()))
65                t.tracker_login = make_pair(username_, password_);
66       
67        return 0;
68}
69
70void AdvTrackerDialog::focusChanged(const hal::torrent_details_ptr pT)
71{               
72        if (pT)
73        {               
74                ::EnableWindow(GetDlgItem(HAL_TRACKER_LOGINCHECK), true);
75                ::EnableWindow(GetDlgItem(HAL_TRACKERLIST), true);
76
77                std::pair<wstring, wstring> details = hal::bittorrent::Instance().get(pT).tracker_login;
78               
79                username_ = details.first;
80                password_ = details.second;
81        }
82        else
83        {                               
84                ::EnableWindow(GetDlgItem(HAL_TRACKER_LOGINCHECK), false);
85                ::EnableWindow(GetDlgItem(HAL_TRACKERLIST), false);
86               
87                username_ = L"";
88                password_ = L"";
89        }
90       
91        m_list.uiUpdate(pT);
92                       
93        ::EnableWindow(GetDlgItem(HAL_TRACKER_APPLY), false);   
94        setLoginUiState();
95
96        DoDataExchange(false);
97}
98
99void AdvTrackerDialog::uiUpdate(const hal::torrent_details_manager& tD)
100{}
101
102AdvTrackerDialog::CWindowMapStruct* AdvTrackerDialog::GetWindowMap()
103{
104#define TRACKER_LOGIN_LAYOUT \
105        WMB_HEAD(WMB_COL(_exp|50), WMB_COL(_exp|66), WMB_COL(_exp|33)), \
106                WMB_ROW(_auto,  HAL_TRACKER_LOGINCHECK, _r,     _r), \
107                WMB_ROW(_auto,  HAL_TRACKER_USER_S, HAL_TRACKER_USER, _r), \
108                WMB_ROW(_auto,  HAL_TRACKER_PASS_S,     HAL_TRACKER_PASS, _r), \
109                WMB_ROW(_auto,  _, HAL_LOGIN_APPLY), \
110                WMB_ROW(_auto,  _, HAL_REANNOUNCE), \
111        WMB_END()
112
113#define TRACKER_LIST_LAYOUT \
114        WMB_HEAD(WMB_COL(_exp), WMB_COLNOMIN(_exp|25), WMB_COL(_exp|25)), \
115                WMB_ROW(_auto,  HAL_TRACKER_LABEL, HAL_TRACKER_RESET, HAL_TRACKER_APPLY), \
116                WMB_ROW(_exp,   HAL_TRACKERLIST, _r, _r), \
117        WMB_END()
118
119        BEGIN_WINDOW_MAP_INLINE(AdvTrackerDialog, 6, 6, 3, 3)
120                WMB_HEAD(WMB_COL(_exp|160), WMB_COL(_exp)),
121                        WMB_ROWNOMINNOMAX(_exp, TRACKER_LIST_LAYOUT, TRACKER_LOGIN_LAYOUT),
122                WMB_END() 
123        END_WINDOW_MAP_INLINE() 
124}
125
126void AdvTrackerDialog::onLoginCheck(UINT, int, HWND hWnd)
127{
128        LRESULT result = ::SendMessage(hWnd, BM_GETCHECK, 0, 0);
129       
130        if (result == BST_CHECKED)
131        {
132                ::EnableWindow(GetDlgItem(HAL_TRACKER_USER), true);
133                ::EnableWindow(GetDlgItem(HAL_TRACKER_PASS), true);
134        }
135        else
136        {
137                ::EnableWindow(GetDlgItem(HAL_TRACKER_USER), false);
138                ::EnableWindow(GetDlgItem(HAL_TRACKER_PASS), false);   
139
140                username_ = L"";       
141                password_ = L"";
142               
143                if (hal::bit::torrent t = hal::bittorrent::Instance().get(focused_torrent()))
144                        t.tracker_login = make_pair(username_, password_);
145               
146                DoDataExchange(false);         
147        }
148}
149
150void AdvTrackerDialog::onLoginApply(UINT, int, HWND)
151{
152        DoDataExchange(true);
153
154        HAL_DEV_MSG(hal::wform(L"Apply Tracker Login User: %1%, Pass: %2%") % username_ % password_ );
155
156        if (hal::bit::torrent t = hal::bittorrent::Instance().get(focused_torrent()))
157                t.tracker_login = make_pair(username_, password_);
158}
159
160void AdvTrackerDialog::onReannounce(UINT, int, HWND)
161{
162        if (hal::bittorrent::Instance().torrentDetails().focused_torrent())
163        {
164                if (!hal::bittorrent::Instance().is_torrent_active(focused_torrent()->name()))
165                {
166                        hal::bittorrent::Instance().resume_torrent(focused_torrent()->name());
167                }
168                else
169                {
170                        hal::bittorrent::Instance().reannounce_torrent(focused_torrent()->name());
171                }
172        }
173}
174
175void AdvTrackerDialog::trackerListEdited()
176{
177        ::EnableWindow(GetDlgItem(HAL_TRACKER_APPLY), true);
178}
179
180void AdvTrackerDialog::onReset(UINT, int, HWND)
181{
182        if (hal::bit::torrent t = hal::bittorrent::Instance().get(focused_torrent()))
183        {
184                t.reset_trackers();
185               
186                std::vector<hal::tracker_detail> trackers =t.trackers;
187                m_list.DeleteAllItems();
188               
189                foreach (const hal::tracker_detail& tracker, trackers)
190                {
191                        int itemPos = m_list.AddItem(0, 0, tracker.url.c_str(), 0);
192                        m_list.SetItemText(itemPos, 1, lexical_cast<wstring>(tracker.tier).c_str());
193                }
194        }
195        ::EnableWindow(GetDlgItem(HAL_TRACKER_APPLY), false);
196}
197
198void AdvTrackerDialog::onApply(UINT, int, HWND)
199{
200        int total = m_list.GetItemCount();
201        std::vector<hal::tracker_detail> trackers;
202       
203        for (int i=0; i<total; ++i)
204        {
205                array<wchar_t, MAX_PATH> buffer;               
206               
207                m_list.GetItemText(i, 0, buffer.elems, buffer.size());
208                trackers.push_back(hal::tracker_detail(wstring(buffer.elems), 0));
209               
210                m_list.GetItemText(i, 1, buffer.elems, buffer.size());
211                trackers.back().tier = lexical_cast<int>(wstring(buffer.elems));
212        }
213       
214        std::sort(trackers.begin(), trackers.end());
215               
216        if (hal::bit::torrent t = hal::bittorrent::Instance().get(focused_torrent()))
217                t.trackers = trackers;
218       
219        ::EnableWindow(GetDlgItem(HAL_TRACKER_APPLY), false);
220}
Note: See TracBrowser for help on using the repository browser.