source: src/advtabs/Tracker.cpp @ 345

Revision 345, 6.3 KB checked in by Eoin, 12 years ago (diff)

Minor renaming and attempts to decouple GUI from Torrents.

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