Add Verbose Logging Setting

This commit is contained in:
Florian Märkl 2019-08-16 18:59:20 +02:00
parent 8d8b756df4
commit 862c11bc8f
No known key found for this signature in database
GPG key ID: 125BC8A5A6A1E857
10 changed files with 93 additions and 23 deletions

View file

@ -21,6 +21,7 @@
#include <chiaki/log.h>
#include <QString>
#include <QDir>
#include <QMutex>
class QFile;
@ -45,6 +46,7 @@ class SessionLog
ChiakiLog *GetChiakiLog() { return &log; }
};
QString GetLogBaseDir();
QString CreateLogFilename();
#endif //CHIAKI_SESSIONLOG_H

View file

@ -39,9 +39,13 @@ class Settings : public QObject
public:
explicit Settings(QObject *parent = nullptr);
bool GetDiscoveryEnabled() { return settings.value("settings/auto_discovery", true).toBool(); }
bool GetDiscoveryEnabled() const { return settings.value("settings/auto_discovery", true).toBool(); }
void SetDiscoveryEnabled(bool enabled) { settings.setValue("settings/auto_discovery", enabled); }
bool GetLogVerbose() const { return settings.value("settings/log_verbose", false).toBool(); }
void SetLogVerbose(bool enabled) { settings.setValue("settings/log_verbose", enabled); }
uint32_t GetLogLevelMask();
ChiakiVideoResolutionPreset GetResolution() const;
void SetResolution(ChiakiVideoResolutionPreset resolution);

View file

@ -23,6 +23,7 @@
class Settings;
class QListWidget;
class QComboBox;
class QCheckBox;
class SettingsDialog : public QDialog
{
@ -31,6 +32,8 @@ class SettingsDialog : public QDialog
private:
Settings *settings;
QCheckBox *log_verbose_check_box;
QComboBox *resolution_combo_box;
QComboBox *fps_combo_box;
@ -38,6 +41,8 @@ class SettingsDialog : public QDialog
QPushButton *delete_registered_host_button;
private slots:
void LogVerboseChanged();
void ResolutionSelected();
void FPSSelected();

View file

@ -34,6 +34,7 @@ class QGamepad;
class QAudioOutput;
class QIODevice;
class QKeyEvent;
class Settings;
class ChiakiException: public Exception
{
@ -49,6 +50,9 @@ struct StreamSessionConnectInfo
QByteArray regist_key;
QByteArray morning;
ChiakiConnectVideoProfile video_profile;
StreamSessionConnectInfo();
StreamSessionConnectInfo(Settings *settings, QString host, QByteArray regist_key, QByteArray morning);
};
class StreamSession : public QObject

View file

@ -89,32 +89,25 @@ int main(int argc, char *argv[])
QString host = args[1];
StreamSessionConnectInfo connect_info;
if(parser.value(regist_key_option).isEmpty() || parser.value(morning_option).isEmpty())
parser.showHelp(1);
connect_info.log_level_mask = CHIAKI_LOG_ALL & ~CHIAKI_LOG_VERBOSE;
connect_info.log_file = CreateLogFilename();
connect_info.host = host;
connect_info.regist_key = parser.value(regist_key_option).toUtf8();
if(connect_info.regist_key.length() > sizeof(ChiakiConnectInfo::regist_key))
QByteArray regist_key = parser.value(regist_key_option).toUtf8();
if(regist_key.length() > sizeof(ChiakiConnectInfo::regist_key))
{
printf("Given regist key is too long.\n");
return 1;
}
connect_info.regist_key += QByteArray(sizeof(ChiakiConnectInfo::regist_key) - connect_info.regist_key.length(), 0);
regist_key += QByteArray(sizeof(ChiakiConnectInfo::regist_key) - regist_key.length(), 0);
connect_info.morning = QByteArray::fromBase64(parser.value(morning_option).toUtf8());
if(connect_info.morning.length() != sizeof(ChiakiConnectInfo::morning))
QByteArray morning = QByteArray::fromBase64(parser.value(morning_option).toUtf8());
if(morning.length() != sizeof(ChiakiConnectInfo::morning))
{
printf("Given morning has invalid size (expected %llu)", (unsigned long long)sizeof(ChiakiConnectInfo::morning));
return 1;
}
chiaki_connect_video_profile_preset(&connect_info.video_profile, settings.GetResolution(), settings.GetFPS());
if(connect_info.regist_key.isEmpty() || connect_info.morning.isEmpty())
parser.showHelp(1);
StreamSessionConnectInfo connect_info(&settings, host, regist_key, morning);
return RunStream(app, connect_info);
}

View file

@ -124,8 +124,7 @@ RegistExecuteDialog::RegistExecuteDialog(Settings *settings, const ChiakiRegistI
layout->addWidget(button_box);
connect(button_box, &QDialogButtonBox::rejected, this, &QDialog::reject);
// TODO: respect verbose setting
chiaki_log_init(&log, CHIAKI_LOG_ALL/* & ~CHIAKI_LOG_VERBOSE*/, RegistExecuteDialogLogCb, this);
chiaki_log_init(&log, settings->GetLogLevelMask(), RegistExecuteDialogLogCb, this);
chiaki_regist_start(&regist, &log, &regist_info, RegistExecuteDialogRegistCb, this);
setWindowTitle(tr("Register Console"));

View file

@ -90,12 +90,8 @@ static void LogCb(ChiakiLogLevel level, const char *msg, void *user)
#define KEEP_LOG_FILES_COUNT 5
QString CreateLogFilename()
QString GetLogBaseDir()
{
static const QString date_format = "yyyy-MM-dd_HH-mm-ss-zzzzzz";
static const QString session_log_wildcard = "chiaki_session_*.log";
static const QRegularExpression session_log_regex("chiaki_session_(.*).log");
auto base_dir = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation);
if(base_dir.isEmpty())
return QString();
@ -106,6 +102,20 @@ QString CreateLogFilename()
if(!dir.cd("log"))
return QString();
return dir.absolutePath();
}
QString CreateLogFilename()
{
static const QString date_format = "yyyy-MM-dd_HH-mm-ss-zzzzzz";
static const QString session_log_wildcard = "chiaki_session_*.log";
static const QRegularExpression session_log_regex("chiaki_session_(.*).log");
QString dir_str = GetLogBaseDir();
if(dir_str.isEmpty())
return QString();
QDir dir = QDir(dir_str);
dir.setNameFilters({ session_log_wildcard });
auto existing_files = dir.entryList();
QVector<QPair<QString, QDateTime>> existing_files_date;

View file

@ -25,6 +25,14 @@ Settings::Settings(QObject *parent) : QObject(parent)
LoadRegisteredHosts();
}
uint32_t Settings::GetLogLevelMask()
{
uint32_t mask = CHIAKI_LOG_ALL;
if(!GetLogVerbose())
mask &= ~CHIAKI_LOG_VERBOSE;
return mask;
}
static const QMap<ChiakiVideoResolutionPreset, QString> resolutions = {
{ CHIAKI_VIDEO_RESOLUTION_PRESET_360p, "360p"},
{ CHIAKI_VIDEO_RESOLUTION_PRESET_540p, "540p"},

View file

@ -18,6 +18,7 @@
#include <settingsdialog.h>
#include <settings.h>
#include <registdialog.h>
#include <sessionlog.h>
#include <QVBoxLayout>
#include <QDialogButtonBox>
@ -28,6 +29,8 @@
#include <QComboBox>
#include <QFormLayout>
#include <QMap>
#include <QCheckBox>
#include <QLineEdit>
SettingsDialog::SettingsDialog(Settings *settings, QWidget *parent) : QDialog(parent)
{
@ -37,6 +40,26 @@ SettingsDialog::SettingsDialog(Settings *settings, QWidget *parent) : QDialog(pa
setLayout(layout);
// General
auto general_group_box = new QGroupBox(tr("General"));
layout->addWidget(general_group_box);
auto general_layout = new QFormLayout();
general_group_box->setLayout(general_layout);
if(general_layout->spacing() < 16)
general_layout->setSpacing(16);
log_verbose_check_box = new QCheckBox(this);
general_layout->addRow(tr("Verbose Logging:\nWarning: This logs A LOT!\nDon't enable for regular use."), log_verbose_check_box);
log_verbose_check_box->setChecked(settings->GetLogVerbose());
connect(log_verbose_check_box, &QCheckBox::stateChanged, this, &SettingsDialog::LogVerboseChanged);
auto log_directory_label = new QLineEdit(GetLogBaseDir(), this);
log_directory_label->setReadOnly(true);
general_layout->addRow(tr("Log Directory:"), log_directory_label);
// Stream Settings
auto stream_settings_group_box = new QGroupBox(tr("Stream Settings"));
@ -118,6 +141,11 @@ void SettingsDialog::ResolutionSelected()
settings->SetResolution((ChiakiVideoResolutionPreset)resolution_combo_box->currentData().toInt());
}
void SettingsDialog::LogVerboseChanged()
{
settings->SetLogVerbose(log_verbose_check_box->isChecked());
}
void SettingsDialog::FPSSelected()
{
settings->SetFPS((ChiakiVideoFPSPreset)fps_combo_box->currentData().toInt());

View file

@ -16,6 +16,7 @@
*/
#include <streamsession.h>
#include <settings.h>
#include <chiaki/base64.h>
@ -29,6 +30,22 @@
#include <cstring>
StreamSessionConnectInfo::StreamSessionConnectInfo()
{
log_level_mask = CHIAKI_LOG_ALL;
std::memset(&video_profile, 0, sizeof(video_profile));
}
StreamSessionConnectInfo::StreamSessionConnectInfo(Settings *settings, QString host, QByteArray regist_key, QByteArray morning)
{
log_level_mask = settings->GetLogLevelMask();
log_file = CreateLogFilename();
chiaki_connect_video_profile_preset(&video_profile, settings->GetResolution(), settings->GetFPS());
this->host = host;
this->regist_key = regist_key;
this->morning = morning;
}
static void AudioSettingsCb(uint32_t channels, uint32_t rate, void *user);
static void AudioFrameCb(int16_t *buf, size_t samples_count, void *user);
static void VideoSampleCb(uint8_t *buf, size_t buf_size, void *user);