mirror of
https://github.com/rakshasa/rtorrent.git
synced 2026-08-16 15:12:30 +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) {
|
||||
case torrent::ConnectionManager::handshake_incoming:
|
||||
m_logComplete.push_front("Incoming connection from " + peer + download);
|
||||
push_log_complete("Incoming connection from " + peer + download);
|
||||
break;
|
||||
case torrent::ConnectionManager::handshake_outgoing:
|
||||
m_logComplete.push_front("Outgoing connection to " + peer + download);
|
||||
push_log_complete("Outgoing connection to " + peer + download);
|
||||
break;
|
||||
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;
|
||||
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;
|
||||
case torrent::ConnectionManager::handshake_success:
|
||||
m_logComplete.push_front("Successful handshake: " + peer + download);
|
||||
push_log_complete("Successful handshake: " + peer + download);
|
||||
break;
|
||||
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;
|
||||
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;
|
||||
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;
|
||||
case torrent::ConnectionManager::handshake_retry_encrypted:
|
||||
m_logComplete.push_front("Trying again encrypted: " + peer + download);
|
||||
push_log_complete("Trying again encrypted: " + peer + download);
|
||||
break;
|
||||
default:
|
||||
m_logComplete.push_front("Unknown handshake message for " + peer + download);
|
||||
push_log_complete("Unknown handshake message for " + peer + download);
|
||||
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'.");
|
||||
|
||||
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_complete->lock_and_push_log(msg, strlen(msg), 0);
|
||||
}
|
||||
|
||||
Manager::Manager() :
|
||||
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_downloadList = new DownloadList();
|
||||
@@ -165,6 +167,8 @@ Manager::~Manager() {
|
||||
torrent::Throttle::destroy_throttle(m_throttles["NULL"].first);
|
||||
delete m_downloadList;
|
||||
|
||||
// TODO: Clean up logs objects.
|
||||
|
||||
delete m_downloadStore;
|
||||
delete m_httpQueue;
|
||||
delete m_fileStatusCache;
|
||||
@@ -374,8 +378,7 @@ Manager::set_proxy_address(const std::string& addr) {
|
||||
|
||||
void
|
||||
Manager::receive_http_failed(std::string msg) {
|
||||
m_logImportant.push_front("Http download error: \"" + msg + "\"");
|
||||
m_logComplete.push_front("Http download error: \"" + msg + "\"");
|
||||
push_log_std("Http download error: \"" + msg + "\"");
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
+2
-2
@@ -90,7 +90,7 @@ public:
|
||||
Log& get_log_complete() { return m_logComplete; }
|
||||
|
||||
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; }
|
||||
torrent::ThrottlePair get_throttle(const std::string& name);
|
||||
@@ -160,7 +160,7 @@ private:
|
||||
Log m_logComplete;
|
||||
|
||||
torrent::log_buffer* m_log_important;
|
||||
// torrent::log_buffer* m_log_complete;
|
||||
torrent::log_buffer* m_log_complete;
|
||||
};
|
||||
|
||||
// Meh, cleanup.
|
||||
|
||||
@@ -71,13 +71,15 @@ void
|
||||
WindowLog::redraw() {
|
||||
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];
|
||||
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 {
|
||||
|
||||
WindowLogComplete::WindowLogComplete(core::Log* l) :
|
||||
WindowLogComplete::WindowLogComplete(torrent::log_buffer* l) :
|
||||
Window(new Canvas, 0, 30, 1, extent_full, extent_full),
|
||||
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() {
|
||||
m_connUpdate.disconnect();
|
||||
}
|
||||
|
||||
WindowLogComplete::iterator
|
||||
WindowLogComplete::find_older() {
|
||||
return m_log->find_older(cachedTime - rak::timer::from_seconds(60));
|
||||
return m_log->find_older(cachedTime.seconds() - 60);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -70,28 +66,25 @@ WindowLogComplete::redraw() {
|
||||
|
||||
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];
|
||||
|
||||
// Use an arbitrary min width of 60 for allowing multiple
|
||||
// lines. This should ensure we don't mess up the display when the
|
||||
// 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 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)
|
||||
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
|
||||
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
|
||||
#define RTORRENT_DISPLAY_WINDOW_LOG_COMPLETE_H
|
||||
|
||||
#include <sigc++/connection.h>
|
||||
|
||||
#include "core/log.h"
|
||||
#include <torrent/utils/log_buffer.h>
|
||||
|
||||
#include "window.h"
|
||||
|
||||
@@ -47,20 +45,17 @@ namespace display {
|
||||
|
||||
class WindowLogComplete : public Window {
|
||||
public:
|
||||
typedef core::Log::iterator iterator;
|
||||
typedef torrent::log_buffer::const_iterator iterator;
|
||||
|
||||
WindowLogComplete(core::Log* l);
|
||||
WindowLogComplete(torrent::log_buffer* l);
|
||||
~WindowLogComplete();
|
||||
|
||||
virtual void redraw();
|
||||
|
||||
void receive_update();
|
||||
|
||||
private:
|
||||
inline iterator find_older();
|
||||
|
||||
core::Log* m_log;
|
||||
sigc::connection m_connUpdate;
|
||||
torrent::log_buffer* m_log;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
+2
-1
@@ -208,7 +208,8 @@ main(int argc, char** argv) {
|
||||
// to process new non-socket events.
|
||||
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);
|
||||
|
||||
|
||||
@@ -74,7 +74,7 @@ DownloadList::DownloadList() :
|
||||
|
||||
m_uiArray[DISPLAY_DOWNLOAD] = NULL;
|
||||
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_windowLog = new WLog(control->core()->log_important());
|
||||
|
||||
@@ -37,6 +37,8 @@
|
||||
#include "config.h"
|
||||
|
||||
#include <torrent/exceptions.h>
|
||||
#include <torrent/torrent.h>
|
||||
#include <torrent/utils/thread_base.h>
|
||||
|
||||
#include "display/frame.h"
|
||||
#include "display/manager.h"
|
||||
@@ -48,9 +50,13 @@
|
||||
|
||||
namespace ui {
|
||||
|
||||
ElementLogComplete::ElementLogComplete(core::Log* l) :
|
||||
ElementLogComplete::ElementLogComplete(torrent::log_buffer* l) :
|
||||
m_window(NULL),
|
||||
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
|
||||
@@ -86,4 +92,10 @@ ElementLogComplete::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
|
||||
#define RTORRENT_UI_ELEMENT_LOG_COMPLETE_H
|
||||
|
||||
#include "core/log.h"
|
||||
#include <torrent/utils/log_buffer.h>
|
||||
|
||||
#include "element_base.h"
|
||||
|
||||
@@ -53,7 +53,7 @@ class ElementLogComplete : public ElementBase {
|
||||
public:
|
||||
typedef display::WindowLogComplete WLogComplete;
|
||||
|
||||
ElementLogComplete(core::Log* l);
|
||||
ElementLogComplete(torrent::log_buffer* l);
|
||||
|
||||
void activate(display::Frame* frame, bool focus = true);
|
||||
void disable();
|
||||
@@ -61,9 +61,11 @@ public:
|
||||
display::Window* window();
|
||||
|
||||
private:
|
||||
void received_update();
|
||||
|
||||
WLogComplete* m_window;
|
||||
|
||||
core::Log* m_log;
|
||||
torrent::log_buffer* m_log;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user