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

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

Files and trackers correctly passed to create_torrent.

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