source: src/advtabs/Torrent.cpp @ 345

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

Minor renaming and attempts to decouple GUI from Torrents.

RevLine 
[315]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 <algorithm>
8#include <boost/format.hpp>
9#include <boost/array.hpp>
10
11#include "../stdAfx.hpp"
12#include "../HaliteWindow.hpp"
13#include "../HaliteListViewCtrl.hpp"
14
15#include "Torrent.hpp"
16
17LRESULT AdvTorrentDialog::onInitDialog(HWND, LPARAM)
18{
19        dialogBaseClass::InitializeHalDialogBase();     
20       
21        m_prog.Attach(GetDlgItem(TORRENTPROG));
22        m_prog.SetRange(0, 100);       
23       
24        NoConnDown = -1;
25        NoConnUp = -1;
26        TranLimitDown = -1;
27        TranLimitUp = -1;       
28       
29        DoDataExchange(false);
30        return 0;
31}
32
33AdvTorrentDialog::CWindowMapStruct* AdvTorrentDialog::GetWindowMap()
34{
35#define TORRENT_LIMITS_LAYOUT \
36        WMB_HEAD(WMB_COL(_exp|20), WMB_COL(_exp|30), WMB_COL(_exp|20), WMB_COL(_exp|30)), \
37                WMB_ROW(10,     IDC_TL, _r, _r, _r), \
38                WMB_ROW(11,     IDC_TLD, IDC_EDITTLD, IDC_TLU, IDC_EDITTLU), \
39                WMB_ROW(10,     IDC_NC, _r, _r, _r), \
40                WMB_ROW(11,     IDC_NCD, IDC_EDITNCD, IDC_NCU, IDC_EDITNCU), \
41                WMB_ROW(11,     IDC_RATIOESTATIC, _r, _r, IDC_EDITRATIO), \
42        WMB_END()
43
44#define TORRENT_STATUS_LAYOUT \
45        WMB_HEAD(WMB_COL(45), WMB_COLNOMIN(_exp|150), WMB_COL(_eq|0), WMB_COL(_exp|100)), \
46                WMB_ROW(10,     IDC_NAME_STATUS_LABEL, IDC_NAME_STATUS, _r, _r), \
47                WMB_ROW(10,     IDC_PEERS_LABEL, IDC_PEERS, IDC_SEEDS_LABEL, IDC_SEEDS), \
48                WMB_ROW(10,     IDC_TRANSFERED_LABEL, IDC_TRANSFERED, IDC_OVERHEAD_LABEL, IDC_OVERHEAD), \
49                WMB_ROW(10,     IDC_REMAINING_LABEL, IDC_REMAINING, IDC_ETA_LABEL, IDC_ETA), \
50                WMB_ROW(10,     IDC_RATE_LABEL, IDC_RATE, IDC_RATIO_LABEL, IDC_RATIO), \
51        WMB_END()
52       
53#define TORRENT_REANNOUNCE_LAYOUT \
54        WMB_HEAD(WMB_COL(50), WMB_COLNOMIN(_exp)), \
55                WMB_ROW(10,     IDC_UPDATESTAT, IDC_UPDATE), \
56        WMB_END()       
57
58        BEGIN_WINDOW_MAP_INLINE(AdvTorrentDialog, 6, 6, 3, 3)
59                WMB_HEAD(WMB_COL(_gap), WMB_COL(_exp), WMB_COL(120), WMB_COL(_gap)), 
60                        WMB_ROW(_gap|3, IDC_GROUP_TORRENT, _r, _r, _r), 
61                        WMB_ROW(_auto,  _d, TORRENT_STATUS_LAYOUT, TORRENT_LIMITS_LAYOUT), 
62                        WMB_ROW(_auto,  _d, TORRENTPROG, _r), 
63                        WMB_ROW(_gap,   _d), 
64                        WMB_ROW(_gap|3, IDC_GROUP_TRACKER, _r, _r, _r), 
65                        WMB_ROW(_auto,  _d, IDC_TRACKER, TORRENT_REANNOUNCE_LAYOUT), 
66                        WMB_ROW(_gap,   _d), 
67                WMB_END() 
68        END_WINDOW_MAP_INLINE() 
69}
70
71void AdvTorrentDialog::onClose()
72{
73        if(::IsWindow(m_hWnd)) 
74        {
75                ::DestroyWindow(m_hWnd);
76        }
77}
78
79LRESULT AdvTorrentDialog::OnEditKillFocus(UINT uCode, int nCtrlID, HWND hwndCtrl)
80{
81        DoDataExchange(true);
82       
83        if (hal::TorrentDetail_ptr torrent = hal::bittorrent().torrentDetails().focusedTorrent()) 
84        {
85                string torrentName = hal::to_utf8(torrent->name());
86               
87                hal::bittorrent().setTorrentSpeed(torrentName, TranLimitDown, TranLimitUp);
88                hal::bittorrent().setTorrentLimit(torrentName, NoConnDown, NoConnUp);
89                hal::bittorrent().setTorrentRatio(torrentName, Ratio);
90        }
91       
92        return 0;
93}
94
95void AdvTorrentDialog::focusChanged(const hal::TorrentDetail_ptr pT)
96{
97        std::pair<float, float> tranLimit(-1.0, -1.0);
98        std::pair<int, int> connLimit(-1, -1);
99        float ratio = 0;
100
101        if (pT)
102        {
103                tranLimit = hal::bittorrent().getTorrentSpeed(pT->name());
104                connLimit = hal::bittorrent().getTorrentLimit(pT->name());
105               
106                ratio = hal::bittorrent().getTorrentRatio(pT->name());
107               
108                ::EnableWindow(GetDlgItem(IDC_EDITTLD), true);
109                ::EnableWindow(GetDlgItem(IDC_EDITTLU), true);
110                ::EnableWindow(GetDlgItem(IDC_EDITNCD), true);
111                ::EnableWindow(GetDlgItem(IDC_EDITNCU), true);
112                ::EnableWindow(GetDlgItem(IDC_EDITRATIO), true);
113        }
114        else
115        {
116                SetDlgItemText(IDC_NAME_STATUS, hal::app().res_wstr(HAL_NA).c_str());
117                SetDlgItemText(IDC_PEERS, hal::app().res_wstr(HAL_NA).c_str());
118                SetDlgItemText(IDC_SEEDS, hal::app().res_wstr(HAL_NA).c_str());
119                SetDlgItemText(IDC_TRANSFERED, hal::app().res_wstr(HAL_NA).c_str());
120                SetDlgItemText(IDC_OVERHEAD, hal::app().res_wstr(HAL_NA).c_str());
121                SetDlgItemText(IDC_REMAINING, hal::app().res_wstr(HAL_NA).c_str());
122                SetDlgItemText(IDC_ETA, hal::app().res_wstr(HAL_NA).c_str());
[335]123                SetDlgItemText(IDC_RATE, hal::app().res_wstr(HAL_NA).c_str());
[315]124                SetDlgItemText(IDC_RATIO, hal::app().res_wstr(HAL_NA).c_str());
125                SetDlgItemText(IDC_TRACKER, hal::app().res_wstr(HAL_NA).c_str());
126                SetDlgItemText(IDC_UPDATE, hal::app().res_wstr(HAL_NA).c_str());
127               
128                m_prog.SetPos(0);
129               
130                ::EnableWindow(GetDlgItem(IDC_EDITTLD), false);
131                ::EnableWindow(GetDlgItem(IDC_EDITTLU), false);
132                ::EnableWindow(GetDlgItem(IDC_EDITNCD), false);
133                ::EnableWindow(GetDlgItem(IDC_EDITNCU), false);
134                ::EnableWindow(GetDlgItem(IDC_EDITRATIO), false);
135        }
136       
137        NoConnDown = connLimit.first;
138        NoConnUp = connLimit.second;
139        TranLimitDown = tranLimit.first;
140        TranLimitUp = tranLimit.second;
141        Ratio = ratio;
142
143        DoDataExchange(false); 
144}
145
146void AdvTorrentDialog::uiUpdate(const hal::TorrentDetails& tD)
147{       
148        if (hal::TorrentDetail_ptr torrent = tD.focusedTorrent())       
149        {                       
150                uiUpdateSingle(torrent);       
151        }
152}
153
154void AdvTorrentDialog::uiUpdateSingle(const hal::TorrentDetail_ptr& torrent)
155{       
156        if (torrent)   
157        {
158/*              HAL_NAME_STATUS           "Name: %1%, %2%."
159                HAL_SECOND                        "Peers %1% (%2%).             Seeds %3% (%4%)."
160                HAL_TRANSFERED            "Transfered (Overhead): %1$.2fMB (%2$.2fMB) Down, %3$.2fMB (%4$.2fMB) Up."
161                HAL_REMAINING             "Remaining: %1$.2fMB of %2$.2fMB, ETA %3%."
162                HAL_RATE                          "Downloading at %1$.2fkb/s, Uploading at %2$.2fkb/s, Ratio %3$.2f."
163*/     
164                SetDlgItemInfo(IDC_NAME_STATUS, 
[316]165                        wformat(hal::app().res_wstr(HAL_NAME_STATUS)) 
[315]166                                % torrent->name()
167                                % torrent->state());
168
[316]169                SetDlgItemInfo(IDC_PEERS,
[315]170                        wformat(L"%1% (%2%)")
171                                % torrent->peersConnected()
172                                % torrent->peers());
173
174                SetDlgItemInfo(IDC_SEEDS,
175                        wformat(L"%1% (%2%)")
176                                % torrent->seedsConnected()
177                                % torrent->seeds());
178
179                SetDlgItemInfo(IDC_TRANSFERED,
180                        wformat(hal::app().res_wstr(HAL_TRANSFERED)) 
181                                % (static_cast<float>(torrent->totalPayloadDownloaded())/(1024*1024))
182                                % (static_cast<float>(torrent->totalPayloadUploaded())/(1024*1024)));
183
184                SetDlgItemInfo(IDC_OVERHEAD,
185                        wformat(L"%1$.2fMB - %2$.2fMB") 
186                                % (static_cast<float>(torrent->totalDownloaded() - torrent->totalPayloadDownloaded())/(1024*1024))
187                                % (static_cast<float>(torrent->totalUploaded() - torrent->totalPayloadUploaded())/(1024*1024)));
188
189                SetDlgItemInfo(IDC_REMAINING,
190                        wformat(hal::app().res_wstr(HAL_REMAINING))
191                                % (static_cast<float>(torrent->totalWanted()-torrent->totalWantedDone())/(1024*1024))
192                                % (static_cast<float>(torrent->totalWanted())/(1024*1024)));
[345]193               
[315]194                wstring eta = hal::app().res_wstr(HAL_INF);     
[345]195                if (!torrent->estimatedTimeLeft().is_special())
[315]196                        eta = hal::from_utf8(boost::posix_time::to_simple_string(torrent->estimatedTimeLeft()));
197               
198                SetDlgItemInfo(IDC_ETA, eta);
199                       
200                SetDlgItemInfo(IDC_RATE,
201                        wformat(hal::app().res_wstr(HAL_RATE))
202                                % (torrent->speed().first/1024)
203                                % (torrent->speed().second/1024));
204                               
205                float ratio = (torrent->totalPayloadDownloaded()) 
206                        ? static_cast<float>(torrent->totalPayloadUploaded())
207                                / static_cast<float>(torrent->totalPayloadDownloaded())
208                        : 0;
209               
210                SetDlgItemInfo(IDC_RATIO, 
211                        wformat(L"%1$.2f") % ratio);           
212               
213                m_prog.SetPos(static_cast<int>(torrent->completion()*100));     
214               
215                SetDlgItemText(IDC_TRACKER, torrent->currentTracker().c_str());
216               
217                if (!torrent->updateTrackerIn().is_special())
218                {
219                        SetDlgItemText(IDC_UPDATE,     
220                                (hal::from_utf8(boost::posix_time::to_simple_string(torrent->updateTrackerIn())).c_str()));
221                }
222                else SetDlgItemText(IDC_UPDATE, hal::app().res_wstr(HAL_NA).c_str());           
223        }
224}
225
226void AdvTorrentDialog::uiUpdateMultiple(const hal::TorrentDetail_vec& torrents)
227{}
228
229void AdvTorrentDialog::uiUpdateNone()
230{}
Note: See TracBrowser for help on using the repository browser.