Use new logging buffer for complete log view.

This commit is contained in:
rakshasa
2012-03-12 20:41:19 +09:00
parent a186932c03
commit 7e0d5956b5
9 changed files with 58 additions and 50 deletions
+17 -14
View File
@@ -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
View File
@@ -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.
+5 -3
View File
@@ -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());
}
}
+9 -16
View File
@@ -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();
}
}
+4 -9
View File
@@ -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
View File
@@ -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);
+1 -1
View File
@@ -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());
+13 -1
View File
@@ -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();
}
}
+5 -3
View File
@@ -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;
};
}