source: src/advtabs/Tracker.cpp @ 316

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

Fixed naming inconsistency.

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
14void AdvTrackerDialog::focusChanged(const hal::TorrentDetail_ptr pT)
15{               
16        if (pT)
17        {               
18                ::EnableWindow(GetDlgItem(IDC_TRACKER_LOGINCHECK), true);
19                ::EnableWindow(GetDlgItem(IDC_TRACKERLIST), true);
20               
21                pair<wstring, wstring> details = 
22                        hal::bittorrent().getTorrentLogin(pT->name());
23               
24                username_ = details.first;
25                password_ = details.second;
26        }
27        else
28        {                               
29                ::EnableWindow(GetDlgItem(IDC_TRACKER_LOGINCHECK), false);
30                ::EnableWindow(GetDlgItem(IDC_TRACKERLIST), false);
31               
32                username_ = L"";
33                password_ = L"";
34        }
35       
36        m_list.uiUpdate(pT);
37                       
38        ::EnableWindow(GetDlgItem(IDC_TRACKER_APPLY), false);   
39        setLoginUiState(current_torrent_name_);
40
41        DoDataExchange(false);
42}
43
44void AdvTrackerDialog::uiUpdate(const hal::TorrentDetails& tD)
45{}
46
47AdvTrackerDialog::CWindowMapStruct* AdvTrackerDialog::GetWindowMap()
48{
49#define TRACKER_LOGIN_LAYOUT \
50        WMB_HEAD(WMB_COL(_exp|50), WMB_COL(_exp|66), WMB_COL(_exp|33)), \
51                WMB_ROW(_auto,  IDC_TRACKER_LOGINCHECK, _r,     _r), \
52                WMB_ROW(_auto,  IDC_TRACKER_USER_S, IDC_TRACKER_USER, _r), \
53                WMB_ROW(_auto,  IDC_TRACKER_PASS_S,     IDC_TRACKER_PASS, _r), \
54                WMB_ROW(_auto,  _, BTNREANNOUNCE), \
55        WMB_END()
56
57#define TRACKER_LIST_LAYOUT \
58        WMB_HEAD(WMB_COL(_exp), WMB_COLNOMIN(_exp|25), WMB_COL(_exp|25)), \
59                WMB_ROW(_auto,  IDC_TRACKER_LABEL, IDC_TRACKER_RESET, IDC_TRACKER_APPLY), \
60                WMB_ROW(_exp,   IDC_TRACKERLIST, _r, _r), \
61        WMB_END()
62
63        BEGIN_WINDOW_MAP_INLINE(AdvTrackerDialog, 6, 6, 3, 3)
64                WMB_HEAD(WMB_COL(_exp|160), WMB_COL(_exp)),
65                        WMB_ROWNOMINNOMAX(_exp, TRACKER_LIST_LAYOUT, TRACKER_LOGIN_LAYOUT),
66                WMB_END() 
67        END_WINDOW_MAP_INLINE() 
68}
69
70void AdvTrackerDialog::onLoginCheck(UINT, int, HWND hWnd)
71{
72        LRESULT result = ::SendMessage(hWnd, BM_GETCHECK, 0, 0);
73       
74        if (result == BST_CHECKED)
75        {
76                ::EnableWindow(GetDlgItem(IDC_TRACKER_USER), true);
77                ::EnableWindow(GetDlgItem(IDC_TRACKER_PASS), true);
78        }
79        else
80        {
81                ::EnableWindow(GetDlgItem(IDC_TRACKER_USER), false);
82                ::EnableWindow(GetDlgItem(IDC_TRACKER_PASS), false);   
83
84                username_ = L"";       
85                password_ = L"";
86               
87                if (hal::bittorrent().torrentDetails().focusedTorrent())
88                        hal::bittorrent().setTorrentLogin(
89                                hal::to_utf8(hal::bittorrent().torrentDetails().focusedTorrent()->name()),
90                                username_, password_);
91               
92                DoDataExchange(false);         
93        }
94}
95
96LRESULT AdvTrackerDialog::onInitDialog(HWND, LPARAM)
97{
98        dialogBaseClass::InitializeHalDialogBase();     
99       
100        m_list.Attach(GetDlgItem(IDC_TRACKERLIST));     
101        m_list.attachEditedConnection(bind(&AdvTrackerDialog::trackerListEdited, this));
102
103        string torrent_name;   
104       
105        if (hal::bittorrent().torrentDetails().focusedTorrent())
106                torrent_name = hal::to_utf8(hal::bittorrent().torrentDetails().focusedTorrent()->name());
107       
108        if (hal::bittorrent().isTorrent(torrent_name))
109        {               
110                ::EnableWindow(GetDlgItem(IDC_TRACKER_LOGINCHECK), true);
111                ::EnableWindow(GetDlgItem(IDC_TRACKERLIST), true);
112               
113                pair<wstring, wstring> details = 
114                        hal::bittorrent().getTorrentLogin(torrent_name);
115               
116                username_ = details.first;
117                password_ = details.second;
118        }
119        else
120        {               
121                ::EnableWindow(GetDlgItem(IDC_TRACKER_LOGINCHECK), false);
122                ::EnableWindow(GetDlgItem(IDC_TRACKERLIST), false);
123               
124                username_ = L"";
125                password_ = L"";
126        }
127               
128        setLoginUiState(torrent_name);
129        DoDataExchange(false); 
130        return 0;
131}
132
133void AdvTrackerDialog::setLoginUiState(const string& torrent_name)
134{
135        if (username_ == L"")
136        {
137                ::SendMessage(GetDlgItem(IDC_TRACKER_LOGINCHECK), BM_SETCHECK, BST_UNCHECKED, 0);
138                password_ = L"";
139        }
140        else
141        {       
142                ::SendMessage(GetDlgItem(IDC_TRACKER_LOGINCHECK), BM_SETCHECK, BST_CHECKED, 0);
143        }
144       
145        onLoginCheck(0, 0, GetDlgItem(IDC_TRACKER_LOGINCHECK)); 
146}
147
148void AdvTrackerDialog::onClose()
149{
150        if(::IsWindow(m_hWnd)) 
151        {
152                ::DestroyWindow(m_hWnd);
153        }
154}
155
156LRESULT AdvTrackerDialog::OnEditKillFocus(UINT uCode, int nCtrlID, HWND hwndCtrl)
157{
158        DoDataExchange(true);
159       
160        string torrent_name;   
161        if (hal::bittorrent().torrentDetails().focusedTorrent())
162                torrent_name = hal::to_utf8(hal::bittorrent().torrentDetails().focusedTorrent()->name());
163       
164        setLoginUiState(torrent_name);
165        hal::bittorrent().setTorrentLogin(torrent_name, username_, password_);
166       
167        return 0;
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}
225
Note: See TracBrowser for help on using the repository browser.