mirror of
https://github.com/rakshasa/rtorrent.git
synced 2026-10-17 06:36:18 +00:00
Use new logging buffer for complete log view.
This commit is contained in:
+17
-14
@@ -103,34 +103,34 @@ Manager::handshake_log(const sockaddr* sa, int msg, int err, const torrent::Hash
|
|||||||
|
|
||||||
switch (msg) {
|
switch (msg) {
|
||||||
case torrent::ConnectionManager::handshake_incoming:
|
case torrent::ConnectionManager::handshake_incoming:
|
||||||
m_logComplete.push_front("Incoming connection from " + peer + download);
|
push_log_complete("Incoming connection from " + peer + download);
|
||||||
break;
|
break;
|
||||||
case torrent::ConnectionManager::handshake_outgoing:
|
case torrent::ConnectionManager::handshake_outgoing:
|
||||||
m_logComplete.push_front("Outgoing connection to " + peer + download);
|
push_log_complete("Outgoing connection to " + peer + download);
|
||||||
break;
|
break;
|
||||||
case torrent::ConnectionManager::handshake_outgoing_encrypted:
|
case torrent::ConnectionManager::handshake_outgoing_encrypted:
|
||||||
m_logComplete.push_front("Outgoing encrypted connection to " + peer + download);
|
push_log_complete("Outgoing encrypted connection to " + peer + download);
|
||||||
break;
|
break;
|
||||||
case torrent::ConnectionManager::handshake_outgoing_proxy:
|
case torrent::ConnectionManager::handshake_outgoing_proxy:
|
||||||
m_logComplete.push_front("Outgoing proxy connection to " + peer + download);
|
push_log_complete("Outgoing proxy connection to " + peer + download);
|
||||||
break;
|
break;
|
||||||
case torrent::ConnectionManager::handshake_success:
|
case torrent::ConnectionManager::handshake_success:
|
||||||
m_logComplete.push_front("Successful handshake: " + peer + download);
|
push_log_complete("Successful handshake: " + peer + download);
|
||||||
break;
|
break;
|
||||||
case torrent::ConnectionManager::handshake_dropped:
|
case torrent::ConnectionManager::handshake_dropped:
|
||||||
m_logComplete.push_front("Dropped handshake: " + peer + " - " + torrent::strerror(err) + download);
|
push_log_complete("Dropped handshake: " + peer + " - " + torrent::strerror(err) + download);
|
||||||
break;
|
break;
|
||||||
case torrent::ConnectionManager::handshake_failed:
|
case torrent::ConnectionManager::handshake_failed:
|
||||||
m_logComplete.push_front("Handshake failed: " + peer + " - " + torrent::strerror(err) + download);
|
push_log_complete("Handshake failed: " + peer + " - " + torrent::strerror(err) + download);
|
||||||
break;
|
break;
|
||||||
case torrent::ConnectionManager::handshake_retry_plaintext:
|
case torrent::ConnectionManager::handshake_retry_plaintext:
|
||||||
m_logComplete.push_front("Trying again without encryption: " + peer + download);
|
push_log_complete("Trying again without encryption: " + peer + download);
|
||||||
break;
|
break;
|
||||||
case torrent::ConnectionManager::handshake_retry_encrypted:
|
case torrent::ConnectionManager::handshake_retry_encrypted:
|
||||||
m_logComplete.push_front("Trying again encrypted: " + peer + download);
|
push_log_complete("Trying again encrypted: " + peer + download);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
m_logComplete.push_front("Unknown handshake message for " + peer + download);
|
push_log_complete("Unknown handshake message for " + peer + download);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -141,14 +141,16 @@ Manager::push_log(const char* msg) {
|
|||||||
throw torrent::internal_error("Manager::push_log(...): Cannot call this function from other threads than 'main'.");
|
throw torrent::internal_error("Manager::push_log(...): Cannot call this function from other threads than 'main'.");
|
||||||
|
|
||||||
m_logImportant.push_front(msg);
|
m_logImportant.push_front(msg);
|
||||||
m_logComplete.push_front(msg);
|
push_log_complete(msg);
|
||||||
|
|
||||||
m_log_important->lock_and_push_log(msg, strlen(msg), 0);
|
m_log_important->lock_and_push_log(msg, strlen(msg), 0);
|
||||||
|
m_log_complete->lock_and_push_log(msg, strlen(msg), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
Manager::Manager() :
|
Manager::Manager() :
|
||||||
m_hashingView(NULL),
|
m_hashingView(NULL),
|
||||||
m_log_important(torrent::log_open_log_buffer("important"))
|
m_log_important(torrent::log_open_log_buffer("important")),
|
||||||
|
m_log_complete(torrent::log_open_log_buffer("complete"))
|
||||||
{
|
{
|
||||||
m_downloadStore = new DownloadStore();
|
m_downloadStore = new DownloadStore();
|
||||||
m_downloadList = new DownloadList();
|
m_downloadList = new DownloadList();
|
||||||
@@ -165,6 +167,8 @@ Manager::~Manager() {
|
|||||||
torrent::Throttle::destroy_throttle(m_throttles["NULL"].first);
|
torrent::Throttle::destroy_throttle(m_throttles["NULL"].first);
|
||||||
delete m_downloadList;
|
delete m_downloadList;
|
||||||
|
|
||||||
|
// TODO: Clean up logs objects.
|
||||||
|
|
||||||
delete m_downloadStore;
|
delete m_downloadStore;
|
||||||
delete m_httpQueue;
|
delete m_httpQueue;
|
||||||
delete m_fileStatusCache;
|
delete m_fileStatusCache;
|
||||||
@@ -374,8 +378,7 @@ Manager::set_proxy_address(const std::string& addr) {
|
|||||||
|
|
||||||
void
|
void
|
||||||
Manager::receive_http_failed(std::string msg) {
|
Manager::receive_http_failed(std::string msg) {
|
||||||
m_logImportant.push_front("Http download error: \"" + msg + "\"");
|
push_log_std("Http download error: \"" + msg + "\"");
|
||||||
m_logComplete.push_front("Http download error: \"" + msg + "\"");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|||||||
+2
-2
@@ -90,7 +90,7 @@ public:
|
|||||||
Log& get_log_complete() { return m_logComplete; }
|
Log& get_log_complete() { return m_logComplete; }
|
||||||
|
|
||||||
torrent::log_buffer* log_important() { return m_log_important; }
|
torrent::log_buffer* log_important() { return m_log_important; }
|
||||||
// torrent::log_buffer* log_complete() { return m_log_complete; }
|
torrent::log_buffer* log_complete() { return m_log_complete; }
|
||||||
|
|
||||||
ThrottleMap& throttles() { return m_throttles; }
|
ThrottleMap& throttles() { return m_throttles; }
|
||||||
torrent::ThrottlePair get_throttle(const std::string& name);
|
torrent::ThrottlePair get_throttle(const std::string& name);
|
||||||
@@ -160,7 +160,7 @@ private:
|
|||||||
Log m_logComplete;
|
Log m_logComplete;
|
||||||
|
|
||||||
torrent::log_buffer* m_log_important;
|
torrent::log_buffer* m_log_important;
|
||||||
// torrent::log_buffer* m_log_complete;
|
torrent::log_buffer* m_log_complete;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Meh, cleanup.
|
// Meh, cleanup.
|
||||||
|
|||||||
@@ -71,13 +71,15 @@ void
|
|||||||
WindowLog::redraw() {
|
WindowLog::redraw() {
|
||||||
m_canvas->erase();
|
m_canvas->erase();
|
||||||
|
|
||||||
int pos = 0;
|
int pos = m_canvas->height();
|
||||||
|
|
||||||
|
for (iterator itr = m_log->end(), last = find_older(); itr != last && pos > 0; --pos) {
|
||||||
|
itr--;
|
||||||
|
|
||||||
for (iterator itr = find_older(), last = m_log->end(); itr != last && pos < m_canvas->height(); ++itr, ++pos) {
|
|
||||||
char buffer[16];
|
char buffer[16];
|
||||||
print_hhmmss_local(buffer, buffer + 16, static_cast<time_t>(itr->timestamp));
|
print_hhmmss_local(buffer, buffer + 16, static_cast<time_t>(itr->timestamp));
|
||||||
|
|
||||||
m_canvas->print(0, pos, "(%s) %s", buffer, itr->message.c_str());
|
m_canvas->print(0, pos - 1, "(%s) %s", buffer, itr->message.c_str());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -44,21 +44,17 @@
|
|||||||
|
|
||||||
namespace display {
|
namespace display {
|
||||||
|
|
||||||
WindowLogComplete::WindowLogComplete(core::Log* l) :
|
WindowLogComplete::WindowLogComplete(torrent::log_buffer* l) :
|
||||||
Window(new Canvas, 0, 30, 1, extent_full, extent_full),
|
Window(new Canvas, 0, 30, 1, extent_full, extent_full),
|
||||||
m_log(l) {
|
m_log(l) {
|
||||||
|
|
||||||
// We're trying out scheduled tasks instead.
|
|
||||||
m_connUpdate = l->signal_update().connect(sigc::mem_fun(*this, &WindowLogComplete::receive_update));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
WindowLogComplete::~WindowLogComplete() {
|
WindowLogComplete::~WindowLogComplete() {
|
||||||
m_connUpdate.disconnect();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
WindowLogComplete::iterator
|
WindowLogComplete::iterator
|
||||||
WindowLogComplete::find_older() {
|
WindowLogComplete::find_older() {
|
||||||
return m_log->find_older(cachedTime - rak::timer::from_seconds(60));
|
return m_log->find_older(cachedTime.seconds() - 60);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -70,28 +66,25 @@ WindowLogComplete::redraw() {
|
|||||||
|
|
||||||
int pos = m_canvas->height();
|
int pos = m_canvas->height();
|
||||||
|
|
||||||
for (core::Log::iterator itr = m_log->begin(), last = m_log->end(); itr != last && pos > 0; ++itr) {
|
for (iterator itr = m_log->end(), last = m_log->begin(); itr != last && pos > 0; ) {
|
||||||
|
itr--;
|
||||||
|
|
||||||
char buffer[16];
|
char buffer[16];
|
||||||
|
|
||||||
// Use an arbitrary min width of 60 for allowing multiple
|
// Use an arbitrary min width of 60 for allowing multiple
|
||||||
// lines. This should ensure we don't mess up the display when the
|
// lines. This should ensure we don't mess up the display when the
|
||||||
// screen is shrunk too much.
|
// screen is shrunk too much.
|
||||||
unsigned int timeWidth = 3 + print_hhmmss_local(buffer, buffer + 16, static_cast<time_t>(itr->first.seconds())) - buffer;
|
unsigned int timeWidth = 3 + print_hhmmss_local(buffer, buffer + 16, static_cast<time_t>(itr->timestamp)) - buffer;
|
||||||
|
|
||||||
unsigned int logWidth = m_canvas->width() > 60 ? (m_canvas->width() - timeWidth) : (60 - timeWidth);
|
unsigned int logWidth = m_canvas->width() > 60 ? (m_canvas->width() - timeWidth) : (60 - timeWidth);
|
||||||
unsigned int logHeight = (itr->second.size() + logWidth - 1) / logWidth;
|
unsigned int logHeight = (itr->message.size() + logWidth - 1) / logWidth;
|
||||||
|
|
||||||
for (unsigned int j = logHeight; j > 0 && pos > 0; --j, --pos)
|
for (unsigned int j = logHeight; j > 0 && pos > 0; --j, --pos)
|
||||||
if (j == 1)
|
if (j == 1)
|
||||||
m_canvas->print(0, pos - 1, "(%s) %s", buffer, itr->second.substr(0, m_canvas->width() - timeWidth).c_str());
|
m_canvas->print(0, pos - 1, "(%s) %s", buffer, itr->message.substr(0, m_canvas->width() - timeWidth).c_str());
|
||||||
else
|
else
|
||||||
m_canvas->print(timeWidth, pos - 1, "%s", itr->second.substr(logWidth * (j - 1), m_canvas->width() - timeWidth).c_str());
|
m_canvas->print(timeWidth, pos - 1, "%s", itr->message.substr(logWidth * (j - 1), m_canvas->width() - timeWidth).c_str());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
WindowLogComplete::receive_update() {
|
|
||||||
mark_dirty();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,9 +37,7 @@
|
|||||||
#ifndef RTORRENT_DISPLAY_WINDOW_LOG_COMPLETE_H
|
#ifndef RTORRENT_DISPLAY_WINDOW_LOG_COMPLETE_H
|
||||||
#define RTORRENT_DISPLAY_WINDOW_LOG_COMPLETE_H
|
#define RTORRENT_DISPLAY_WINDOW_LOG_COMPLETE_H
|
||||||
|
|
||||||
#include <sigc++/connection.h>
|
#include <torrent/utils/log_buffer.h>
|
||||||
|
|
||||||
#include "core/log.h"
|
|
||||||
|
|
||||||
#include "window.h"
|
#include "window.h"
|
||||||
|
|
||||||
@@ -47,20 +45,17 @@ namespace display {
|
|||||||
|
|
||||||
class WindowLogComplete : public Window {
|
class WindowLogComplete : public Window {
|
||||||
public:
|
public:
|
||||||
typedef core::Log::iterator iterator;
|
typedef torrent::log_buffer::const_iterator iterator;
|
||||||
|
|
||||||
WindowLogComplete(core::Log* l);
|
WindowLogComplete(torrent::log_buffer* l);
|
||||||
~WindowLogComplete();
|
~WindowLogComplete();
|
||||||
|
|
||||||
virtual void redraw();
|
virtual void redraw();
|
||||||
|
|
||||||
void receive_update();
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
inline iterator find_older();
|
inline iterator find_older();
|
||||||
|
|
||||||
core::Log* m_log;
|
torrent::log_buffer* m_log;
|
||||||
sigc::connection m_connUpdate;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-1
@@ -208,7 +208,8 @@ main(int argc, char** argv) {
|
|||||||
// to process new non-socket events.
|
// to process new non-socket events.
|
||||||
SignalHandler::set_handler(SIGUSR1, sigc::ptr_fun(&do_nothing));
|
SignalHandler::set_handler(SIGUSR1, sigc::ptr_fun(&do_nothing));
|
||||||
|
|
||||||
torrent::log_add_group_output(torrent::LOG_INFO, "important");
|
torrent::log_add_group_output(torrent::LOG_NOTICE, "important");
|
||||||
|
torrent::log_add_group_output(torrent::LOG_INFO, "complete");
|
||||||
|
|
||||||
torrent::Poll::slot_create_poll() = std::tr1::bind(&core::create_poll);
|
torrent::Poll::slot_create_poll() = std::tr1::bind(&core::create_poll);
|
||||||
|
|
||||||
|
|||||||
@@ -74,7 +74,7 @@ DownloadList::DownloadList() :
|
|||||||
|
|
||||||
m_uiArray[DISPLAY_DOWNLOAD] = NULL;
|
m_uiArray[DISPLAY_DOWNLOAD] = NULL;
|
||||||
m_uiArray[DISPLAY_DOWNLOAD_LIST] = new ElementDownloadList();
|
m_uiArray[DISPLAY_DOWNLOAD_LIST] = new ElementDownloadList();
|
||||||
m_uiArray[DISPLAY_LOG] = new ElementLogComplete(&control->core()->get_log_complete());
|
m_uiArray[DISPLAY_LOG] = new ElementLogComplete(control->core()->log_complete());
|
||||||
m_uiArray[DISPLAY_STRING_LIST] = new ElementStringList();
|
m_uiArray[DISPLAY_STRING_LIST] = new ElementStringList();
|
||||||
|
|
||||||
m_windowLog = new WLog(control->core()->log_important());
|
m_windowLog = new WLog(control->core()->log_important());
|
||||||
|
|||||||
@@ -37,6 +37,8 @@
|
|||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
#include <torrent/exceptions.h>
|
#include <torrent/exceptions.h>
|
||||||
|
#include <torrent/torrent.h>
|
||||||
|
#include <torrent/utils/thread_base.h>
|
||||||
|
|
||||||
#include "display/frame.h"
|
#include "display/frame.h"
|
||||||
#include "display/manager.h"
|
#include "display/manager.h"
|
||||||
@@ -48,9 +50,13 @@
|
|||||||
|
|
||||||
namespace ui {
|
namespace ui {
|
||||||
|
|
||||||
ElementLogComplete::ElementLogComplete(core::Log* l) :
|
ElementLogComplete::ElementLogComplete(torrent::log_buffer* l) :
|
||||||
m_window(NULL),
|
m_window(NULL),
|
||||||
m_log(l) {
|
m_log(l) {
|
||||||
|
|
||||||
|
unsigned int signal_index = torrent::main_thread()->signal_bitfield()->add_signal(std::tr1::bind(&ElementLogComplete::received_update, this));
|
||||||
|
|
||||||
|
m_log->lock_and_set_update_slot(std::tr1::bind(&torrent::thread_base::send_event_signal, torrent::main_thread(), signal_index, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -86,4 +92,10 @@ ElementLogComplete::window() {
|
|||||||
return m_window;
|
return m_window;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ElementLogComplete::received_update() {
|
||||||
|
if (m_window != NULL)
|
||||||
|
m_window->mark_dirty();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,7 +37,7 @@
|
|||||||
#ifndef RTORRENT_UI_ELEMENT_LOG_COMPLETE_H
|
#ifndef RTORRENT_UI_ELEMENT_LOG_COMPLETE_H
|
||||||
#define RTORRENT_UI_ELEMENT_LOG_COMPLETE_H
|
#define RTORRENT_UI_ELEMENT_LOG_COMPLETE_H
|
||||||
|
|
||||||
#include "core/log.h"
|
#include <torrent/utils/log_buffer.h>
|
||||||
|
|
||||||
#include "element_base.h"
|
#include "element_base.h"
|
||||||
|
|
||||||
@@ -53,7 +53,7 @@ class ElementLogComplete : public ElementBase {
|
|||||||
public:
|
public:
|
||||||
typedef display::WindowLogComplete WLogComplete;
|
typedef display::WindowLogComplete WLogComplete;
|
||||||
|
|
||||||
ElementLogComplete(core::Log* l);
|
ElementLogComplete(torrent::log_buffer* l);
|
||||||
|
|
||||||
void activate(display::Frame* frame, bool focus = true);
|
void activate(display::Frame* frame, bool focus = true);
|
||||||
void disable();
|
void disable();
|
||||||
@@ -61,9 +61,11 @@ public:
|
|||||||
display::Window* window();
|
display::Window* window();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
void received_update();
|
||||||
|
|
||||||
WLogComplete* m_window;
|
WLogComplete* m_window;
|
||||||
|
|
||||||
core::Log* m_log;
|
torrent::log_buffer* m_log;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user