mirror of
https://github.com/rakshasa/rtorrent.git
synced 2026-10-16 06:06:16 +00:00
* Got rid of some additional internal sigc++ calls.
* Changed print_hhmmss/ddmmyyyy to use a char buffer. * Added error messages for failed torrent http/file downloads which includes the url/filename. git-svn-id: svn://rakshasa.no/libtorrent/trunk/rtorrent@581 e378c898-3ddf-0310-93e7-cc216c733640
This commit is contained in:
@@ -393,6 +393,23 @@ private:
|
|||||||
Function m_function;
|
Function m_function;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template <typename Object, typename Ret, typename Arg1>
|
||||||
|
class const_mem_fn1 {
|
||||||
|
public:
|
||||||
|
typedef Ret (Object::*Function)(Arg1) const;
|
||||||
|
|
||||||
|
const_mem_fn1() : m_object(NULL) {}
|
||||||
|
const_mem_fn1(Object* o, Function f) : m_object(o), m_function(f) {}
|
||||||
|
|
||||||
|
bool is_valid() const { return m_object; }
|
||||||
|
|
||||||
|
Ret operator () (Arg1 a1) { return (m_object->*m_function)(a1); }
|
||||||
|
|
||||||
|
private:
|
||||||
|
Object* m_object;
|
||||||
|
Function m_function;
|
||||||
|
};
|
||||||
|
|
||||||
template <typename Object, typename Ret, typename Arg1, typename Arg2>
|
template <typename Object, typename Ret, typename Arg1, typename Arg2>
|
||||||
class mem_fn2 {
|
class mem_fn2 {
|
||||||
public:
|
public:
|
||||||
@@ -445,6 +462,12 @@ make_mem_fn(Object* o, Ret (Object::*f)(Arg1)) {
|
|||||||
return mem_fn1<Object, Ret, Arg1>(o, f);
|
return mem_fn1<Object, Ret, Arg1>(o, f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename Object, typename Ret, typename Arg1>
|
||||||
|
inline const_mem_fn1<Object, Ret, Arg1>
|
||||||
|
make_mem_fn(Object* o, Ret (Object::*f)(Arg1) const) {
|
||||||
|
return const_mem_fn1<Object, Ret, Arg1>(o, f);
|
||||||
|
}
|
||||||
|
|
||||||
template <typename Object, typename Ret, typename Arg1, typename Arg2>
|
template <typename Object, typename Ret, typename Arg1, typename Arg2>
|
||||||
inline mem_fn2<Object, Ret, Arg1, Arg2>
|
inline mem_fn2<Object, Ret, Arg1, Arg2>
|
||||||
make_mem_fn(Object* o, Ret (Object::*f)(Arg1, Arg2)) {
|
make_mem_fn(Object* o, Ret (Object::*f)(Arg1, Arg2)) {
|
||||||
|
|||||||
@@ -160,6 +160,8 @@ DownloadFactory::receive_failed(const std::string& msg) {
|
|||||||
throw std::logic_error("DownloadFactory::receive_success() called on an object with m_stream == NULL");
|
throw std::logic_error("DownloadFactory::receive_success() called on an object with m_stream == NULL");
|
||||||
|
|
||||||
// Add message to log.
|
// Add message to log.
|
||||||
|
m_manager->get_log_important().push_front(msg + ": \"" + m_uri + "\"");
|
||||||
|
m_manager->get_log_complete().push_front(msg + ": \"" + m_uri + "\"");
|
||||||
|
|
||||||
m_slotFinished();
|
m_slotFinished();
|
||||||
}
|
}
|
||||||
|
|||||||
+20
-18
@@ -36,6 +36,7 @@
|
|||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
|
#include <cstring>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <iomanip>
|
#include <iomanip>
|
||||||
#include <torrent/rate.h>
|
#include <torrent/rate.h>
|
||||||
@@ -48,6 +49,16 @@
|
|||||||
|
|
||||||
namespace display {
|
namespace display {
|
||||||
|
|
||||||
|
char*
|
||||||
|
print_string(char* buf, unsigned int length, char* str) {
|
||||||
|
// We don't have any nice simple functions for copying strings that
|
||||||
|
// return the end address.
|
||||||
|
while (length-- != 0 && *str != '\0')
|
||||||
|
*(buf++) = *(str++);
|
||||||
|
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
|
||||||
char*
|
char*
|
||||||
print_download_title(char* buf, unsigned int length, core::Download* d) {
|
print_download_title(char* buf, unsigned int length, core::Download* d) {
|
||||||
return buf + std::max(0, snprintf(buf, length, "%s",
|
return buf + std::max(0, snprintf(buf, length, "%s",
|
||||||
@@ -102,37 +113,28 @@ print_download_status(char* buf, unsigned int length, core::Download* d) {
|
|||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string
|
char*
|
||||||
print_hhmmss(utils::Timer t) {
|
print_hhmmss(char* buf, unsigned int length, time_t t) {
|
||||||
time_t tv_sec = static_cast<time_t>(t.tval().tv_sec);
|
std::tm *u = std::localtime(&t);
|
||||||
std::tm *u = std::localtime(&tv_sec);
|
|
||||||
|
|
||||||
if (u == NULL)
|
if (u == NULL)
|
||||||
return "inv_time";
|
return "inv_time";
|
||||||
|
|
||||||
std::stringstream str;
|
unsigned int s = snprintf(buf, length, "%02u:%02u:%02u", u->tm_hour, u->tm_min, u->tm_sec);
|
||||||
str.fill('0');
|
|
||||||
|
|
||||||
str << std::setw(2) << u->tm_hour << ':' << std::setw(2) << u->tm_min << ':' << std::setw(2) << u->tm_sec;
|
|
||||||
|
|
||||||
return str.str();
|
return buf + std::min(s, length);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string
|
char*
|
||||||
print_ddmmyyyy(time_t t) {
|
print_ddmmyyyy(char* buf, unsigned int length, time_t t) {
|
||||||
std::tm *u = std::gmtime(&t);
|
std::tm *u = std::gmtime(&t);
|
||||||
|
|
||||||
if (u == NULL)
|
if (u == NULL)
|
||||||
return "inv_time";
|
return "inv_time";
|
||||||
|
|
||||||
std::stringstream str;
|
unsigned int s = snprintf(buf, length, "%02u/%02u/%04u", u->tm_mday, (u->tm_mon + 1), (1900 + u->tm_year));
|
||||||
str.fill('0');
|
|
||||||
|
|
||||||
str << std::setw(2) << u->tm_mday << '/'
|
|
||||||
<< std::setw(2) << (u->tm_mon + 1) << '/'
|
|
||||||
<< std::setw(4) << (1900 + u->tm_year);
|
|
||||||
|
|
||||||
return str.str();
|
return buf + std::min(s, length);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-2
@@ -50,12 +50,14 @@ namespace utils {
|
|||||||
|
|
||||||
namespace display {
|
namespace display {
|
||||||
|
|
||||||
|
char* print_string(char* buf, unsigned int length, char* str);
|
||||||
|
|
||||||
char* print_download_title(char* buf, unsigned int length, core::Download* d);
|
char* print_download_title(char* buf, unsigned int length, core::Download* d);
|
||||||
char* print_download_info(char* buf, unsigned int length, core::Download* d);
|
char* print_download_info(char* buf, unsigned int length, core::Download* d);
|
||||||
char* print_download_status(char* buf, unsigned int length, core::Download* d);
|
char* print_download_status(char* buf, unsigned int length, core::Download* d);
|
||||||
|
|
||||||
std::string print_hhmmss(utils::Timer t);
|
char* print_hhmmss(char* buf, unsigned int length, time_t t);
|
||||||
std::string print_ddmmyyyy(time_t t);
|
char* print_ddmmyyyy(char* buf, unsigned int length, time_t t);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -69,10 +69,12 @@ WindowLog::redraw() {
|
|||||||
|
|
||||||
int pos = 0;
|
int pos = 0;
|
||||||
|
|
||||||
for (core::Log::iterator itr = m_log->begin(), end = find_older(); itr != end && pos < m_canvas->get_height(); ++itr)
|
for (core::Log::iterator itr = m_log->begin(), end = find_older(); itr != end && pos < m_canvas->get_height(); ++itr) {
|
||||||
m_canvas->print(0, pos++, "(%s) %s",
|
char buffer[16];
|
||||||
print_hhmmss(itr->first).c_str(),
|
print_hhmmss(buffer, 16, static_cast<time_t>(itr->first.seconds()));
|
||||||
itr->second.c_str());
|
|
||||||
|
m_canvas->print(0, pos++, "(%s) %s", buffer, itr->second.c_str());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|||||||
@@ -69,10 +69,12 @@ WindowLogComplete::redraw() {
|
|||||||
|
|
||||||
m_canvas->print(std::max(0, (int)m_canvas->get_width() / 2 - 5), pos++, "*** Log ***");
|
m_canvas->print(std::max(0, (int)m_canvas->get_width() / 2 - 5), pos++, "*** Log ***");
|
||||||
|
|
||||||
for (core::Log::iterator itr = m_log->begin(), e = m_log->end(); itr != e && pos < m_canvas->get_height(); ++itr)
|
for (core::Log::iterator itr = m_log->begin(), e = m_log->end(); itr != e && pos < m_canvas->get_height(); ++itr) {
|
||||||
m_canvas->print(0, pos++, "(%s) %s",
|
char buffer[16];
|
||||||
print_hhmmss(itr->first).c_str(),
|
print_hhmmss(buffer, 16, static_cast<time_t>(itr->first.seconds()));
|
||||||
itr->second.c_str());
|
|
||||||
|
m_canvas->print(0, pos++, "(%s) %s", buffer, itr->second.c_str());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|||||||
@@ -69,8 +69,13 @@ WindowPeerInfo::redraw() {
|
|||||||
d.get_chunks_done(),
|
d.get_chunks_done(),
|
||||||
d.get_chunks_total(),
|
d.get_chunks_total(),
|
||||||
d.get_chunks_size());
|
d.get_chunks_size());
|
||||||
m_canvas->print(0, y++, "Created: %s",
|
|
||||||
print_ddmmyyyy(static_cast<time_t>(d.get_creation_date())).c_str());
|
char buffer[32], *position;
|
||||||
|
position = print_ddmmyyyy(buffer, 32, static_cast<time_t>(d.get_creation_date()));
|
||||||
|
position = print_string(position, buffer + 32 - position, " ");
|
||||||
|
position = print_hhmmss(position, buffer + 32 - position, static_cast<time_t>(d.get_creation_date()));
|
||||||
|
|
||||||
|
m_canvas->print(0, y++, "Created: %s", buffer);
|
||||||
|
|
||||||
y++;
|
y++;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user