source: src/advtabs/Torrent.cpp @ 262

Revision 262, 5.6 KB checked in by Eoin, 13 years ago (diff)
Line 
1
2#include <algorithm>
3#include <boost/format.hpp>
4#include <boost/array.hpp>
5
6#include "../stdAfx.hpp"
7#include "../HaliteWindow.hpp"
8#include "../HaliteListViewCtrl.hpp"
9
10#include "Torrent.hpp"
11
12LRESULT AdvTorrentDialog::onInitDialog(HWND, LPARAM)
13{
14        dialogBaseClass::InitializeHalDialogBase();     
15        resizeClass::DlgResize_Init(false, true, WS_CLIPCHILDREN);
16       
17{       m_prog.Attach(GetDlgItem(TORRENTPROG));
18        m_prog.SetRange(0, 100);
19}       
20       
21        NoConnDown = -1;
22        NoConnUp = -1;
23        TranLimitDown = -1;
24        TranLimitUp = -1;       
25       
26        DoDataExchange(false);
27        return 0;
28}
29
30void AdvTorrentDialog::onClose()
31{
32        if(::IsWindow(m_hWnd)) 
33        {
34                ::DestroyWindow(m_hWnd);
35        }
36}
37
38LRESULT AdvTorrentDialog::OnEditKillFocus(UINT uCode, int nCtrlID, HWND hwndCtrl)
39{
40        DoDataExchange(true);
41       
42        if (hal::TorrentDetail_ptr torrent = hal::bittorrent().torrentDetails().selectedTorrent()) 
43        {
44                string torrentName = hal::to_utf8(torrent->filename());
45               
46                hal::bittorrent().setTorrentSpeed(torrentName, TranLimitDown, TranLimitUp);
47                hal::bittorrent().setTorrentLimit(torrentName, NoConnDown, NoConnUp);
48                hal::bittorrent().setTorrentRatio(torrentName, Ratio);
49        }
50       
51        return 0;
52}
53
54void AdvTorrentDialog::focusChanged(string& torrent_name) 
55{
56        pair<float, float> tranLimit(-1.0, -1.0);
57        pair<int, int> connLimit(-1, -1);
58        float ratio = 0;
59
60        if (hal::bittorrent().isTorrent(torrent_name))
61        {
62                tranLimit = hal::bittorrent().getTorrentSpeed(torrent_name);
63                connLimit = hal::bittorrent().getTorrentLimit(torrent_name);
64               
65                ratio = hal::bittorrent().getTorrentRatio(torrent_name);
66               
67                ::EnableWindow(GetDlgItem(IDC_EDITTLD), true);
68                ::EnableWindow(GetDlgItem(IDC_EDITTLU), true);
69                ::EnableWindow(GetDlgItem(IDC_EDITNCD), true);
70                ::EnableWindow(GetDlgItem(IDC_EDITNCU), true);
71                ::EnableWindow(GetDlgItem(IDC_EDITRATIO), true);
72        }
73        else
74        {
75                SetDlgItemText(IDC_NAME_STATUS, L"N/A");
76        //      SetDlgItemText(IDC_SECOND, L"N/A");
77                SetDlgItemText(IDC_TRANSFERED, L"N/A");
78                SetDlgItemText(IDC_REMAINING, L"N/A");
79                SetDlgItemText(IDC_RATE, L"N/A");
80                SetDlgItemText(IDC_TRACKER, L"N/A");
81                SetDlgItemText(IDC_UPDATE, L"N/A");
82               
83                m_prog.SetPos(0);
84               
85                ::EnableWindow(GetDlgItem(IDC_EDITTLD), false);
86                ::EnableWindow(GetDlgItem(IDC_EDITTLU), false);
87                ::EnableWindow(GetDlgItem(IDC_EDITNCD), false);
88                ::EnableWindow(GetDlgItem(IDC_EDITNCU), false);
89                ::EnableWindow(GetDlgItem(IDC_EDITRATIO), false);
90        }
91       
92        NoConnDown = connLimit.first;
93        NoConnUp = connLimit.second;
94        TranLimitDown = tranLimit.first;
95        TranLimitUp = tranLimit.second;
96        Ratio = ratio;
97
98        DoDataExchange(false); 
99}
100
101void AdvTorrentDialog::uiUpdate(const hal::TorrentDetails& tD)
102{       
103        if (hal::TorrentDetail_ptr torrent = tD.selectedTorrent())     
104        {       
105                string torrent_name = hal::to_utf8(torrent->filename());
106               
107                if (current_torrent_name_ != torrent_name)
108                {       
109                        current_torrent_name_ = torrent_name;
110                        focusChanged(current_torrent_name_);
111                }
112               
113                uiUpdateSingle(tD.selectedTorrent());   
114        }
115        else
116        {       
117                if (current_torrent_name_ != "")
118                {       
119                        current_torrent_name_ = "";
120                        focusChanged(current_torrent_name_);
121                }       
122        }
123}
124
125void AdvTorrentDialog::uiUpdateSingle(const hal::TorrentDetail_ptr& torrent)
126{       
127        if (torrent)   
128        {
129/*              HAL_NAME_STATUS           "Name: %1%, %2%."
130                HAL_SECOND                        "Peers %1% (%2%).             Seeds %3% (%4%)."
131                HAL_TRANSFERED            "Transfered (Overhead): %1$.2fMB (%2$.2fMB) Down, %3$.2fMB (%4$.2fMB) Up."
132                HAL_REMAINING             "Remaining: %1$.2fMB of %2$.2fMB, ETA %3%."
133                HAL_RATE                          "Downloading at %1$.2fkb/s, Uploading at %2$.2fkb/s, Ratio %3$.2f."
134*/     
135
136                SetDlgItemInfo(IDC_NAME_STATUS, 
137                        wformat(hal::app().res_wstr(HAL_NAME_STATUS)) 
138                                % torrent->filename()
139                                % torrent->state());
140
141                SetDlgItemInfo(IDC_SECOND,
142                        wformat(hal::app().res_wstr(HAL_SECOND)) 
143                                % torrent->peers()
144                                % torrent->peersConnected()
145                                % torrent->seeds()
146                                % torrent->seedsConnected());
147
148                SetDlgItemInfo(IDC_TRANSFERED,
149                        wformat(hal::app().res_wstr(HAL_TRANSFERED)) 
150                                % (static_cast<float>(torrent->totalPayloadDownloaded())/(1024*1024))
151                                % (static_cast<float>(torrent->totalDownloaded() - torrent->totalPayloadDownloaded())/(1024*1024))
152                                % (static_cast<float>(torrent->totalPayloadUploaded())/(1024*1024))
153                                % (static_cast<float>(torrent->totalUploaded() - torrent->totalPayloadUploaded())/(1024*1024)));
154
155                wstring eta = L"∞";                     
156                if (!torrent->estimatedTimeLeft().is_special())
157                        eta = hal::from_utf8(boost::posix_time::to_simple_string(torrent->estimatedTimeLeft()));
158                       
159                SetDlgItemInfo(IDC_REMAINING,
160                        wformat(hal::app().res_wstr(HAL_REMAINING))
161                                % (static_cast<float>(torrent->totalWanted()-torrent->totalWantedDone())/(1024*1024))
162                                % (static_cast<float>(torrent->totalWanted())/(1024*1024))
163                                % eta);
164
165                float ratio = (torrent->totalPayloadDownloaded()) 
166                        ? static_cast<float>(torrent->totalPayloadUploaded())
167                                / static_cast<float>(torrent->totalPayloadDownloaded())
168                        : 0;
169                       
170                SetDlgItemInfo(IDC_RATE,
171                        wformat(hal::app().res_wstr(HAL_RATE))
172                                % (torrent->speed().first/1024)
173                                % (torrent->speed().second/1024)
174                                % ratio);               
175               
176                m_prog.SetPos(static_cast<int>(torrent->completion()*100));     
177               
178                SetDlgItemText(IDC_TRACKER, torrent->currentTracker().c_str());
179               
180                if (!torrent->updateTrackerIn().is_special())
181                {
182                        SetDlgItemText(IDC_UPDATE,     
183                                (hal::from_utf8(boost::posix_time::to_simple_string(torrent->updateTrackerIn())).c_str()));
184                }
185                else SetDlgItemText(IDC_UPDATE, L"N/A");               
186        }
187}
188
189void AdvTorrentDialog::uiUpdateMultiple(const hal::TorrentDetail_vec& torrents)
190{}
191
192void AdvTorrentDialog::uiUpdateNone()
193{}
Note: See TracBrowser for help on using the repository browser.