Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
尘离序散
obs-studio
提交
478f1de8
O
obs-studio
项目概览
尘离序散
/
obs-studio
与 Fork 源项目一致
从无法访问的项目Fork
通知
30
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
O
obs-studio
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
478f1de8
编写于
8月 01, 2020
作者:
J
Jim
提交者:
GitHub
8月 01, 2020
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #2939 from cg2121/log-viewer
UI: Add log viewer window
上级
3107eda0
040e4456
变更
8
隐藏空白更改
内联
并排
Showing
8 changed file
with
217 addition
and
20 deletion
+217
-20
UI/CMakeLists.txt
UI/CMakeLists.txt
+4
-2
UI/data/locale/en-US.ini
UI/data/locale/en-US.ini
+2
-0
UI/forms/OBSBasic.ui
UI/forms/OBSBasic.ui
+11
-0
UI/log-viewer.cpp
UI/log-viewer.cpp
+145
-0
UI/log-viewer.hpp
UI/log-viewer.hpp
+24
-0
UI/obs-app.cpp
UI/obs-app.cpp
+19
-6
UI/window-basic-main.cpp
UI/window-basic-main.cpp
+9
-12
UI/window-basic-main.hpp
UI/window-basic-main.hpp
+3
-0
未找到文件。
UI/CMakeLists.txt
浏览文件 @
478f1de8
...
...
@@ -244,7 +244,8 @@ set(obs_SOURCES
source-label.cpp
remote-text.cpp
audio-encoders.cpp
qt-wrappers.cpp
)
qt-wrappers.cpp
log-viewer.cpp
)
set
(
obs_HEADERS
${
obs_PLATFORM_HEADERS
}
...
...
@@ -308,7 +309,8 @@ set(obs_HEADERS
remote-text.hpp
audio-encoders.hpp
qt-wrappers.hpp
clickable-label.hpp
)
clickable-label.hpp
log-viewer.hpp
)
set
(
obs_importers_HEADERS
importers/importers.hpp
)
...
...
UI/data/locale/en-US.ini
浏览文件 @
478f1de8
...
...
@@ -94,6 +94,8 @@ Windowed="Windowed"
Percent
=
"Percent"
AspectRatio
=
"Aspect Ratio <b>%1:%2</b>"
LockVolume
=
"Lock Volume"
LogViewer
=
"Log Viewer"
ShowOnStartup
=
"Show on startup"
# warning if program already open
AlreadyRunning.Title
=
"OBS is already running"
...
...
UI/forms/OBSBasic.ui
浏览文件 @
478f1de8
...
...
@@ -1768,6 +1768,17 @@
<string>
Basic.MainMenu.View.SourceIcons
</string>
</property>
</action>
<action
name=
"toggleLog"
>
<property
name=
"checkable"
>
<bool>
true
</bool>
</property>
<property
name=
"checked"
>
<bool>
true
</bool>
</property>
<property
name=
"text"
>
<string>
LogViewer
</string>
</property>
</action>
</widget>
<customwidgets>
<customwidget>
...
...
UI/log-viewer.cpp
0 → 100644
浏览文件 @
478f1de8
#include <QFile>
#include <QTextStream>
#include <QScrollBar>
#include <QFont>
#include <QFontDatabase>
#include <QPushButton>
#include <QCheckBox>
#include <QLayout>
#include <string>
#include "log-viewer.hpp"
#include "qt-wrappers.hpp"
OBSLogViewer
::
OBSLogViewer
(
QWidget
*
parent
)
:
QDialog
(
parent
)
{
setWindowFlags
(
windowFlags
()
&
~
Qt
::
WindowContextHelpButtonHint
);
QVBoxLayout
*
layout
=
new
QVBoxLayout
();
layout
->
setContentsMargins
(
0
,
0
,
0
,
0
);
const
QFont
fixedFont
=
QFontDatabase
::
systemFont
(
QFontDatabase
::
FixedFont
);
textArea
=
new
QTextEdit
();
textArea
->
setReadOnly
(
true
);
textArea
->
setFont
(
fixedFont
);
QHBoxLayout
*
buttonLayout
=
new
QHBoxLayout
();
QPushButton
*
clearButton
=
new
QPushButton
(
QTStr
(
"Clear"
));
connect
(
clearButton
,
&
QPushButton
::
clicked
,
this
,
&
OBSLogViewer
::
ClearText
);
QPushButton
*
closeButton
=
new
QPushButton
(
QTStr
(
"Close"
));
connect
(
closeButton
,
&
QPushButton
::
clicked
,
this
,
&
QDialog
::
hide
);
QCheckBox
*
showStartup
=
new
QCheckBox
(
QTStr
(
"ShowOnStartup"
));
showStartup
->
setChecked
(
ShowOnStartup
());
connect
(
showStartup
,
SIGNAL
(
toggled
(
bool
)),
this
,
SLOT
(
ToggleShowStartup
(
bool
)));
buttonLayout
->
addSpacing
(
10
);
buttonLayout
->
addWidget
(
showStartup
);
buttonLayout
->
addStretch
();
buttonLayout
->
addWidget
(
clearButton
);
buttonLayout
->
addWidget
(
closeButton
);
buttonLayout
->
addSpacing
(
10
);
buttonLayout
->
setContentsMargins
(
0
,
0
,
0
,
4
);
layout
->
addWidget
(
textArea
);
layout
->
addLayout
(
buttonLayout
);
setLayout
(
layout
);
setWindowTitle
(
QTStr
(
"LogViewer"
));
resize
(
800
,
300
);
const
char
*
geom
=
config_get_string
(
App
()
->
GlobalConfig
(),
"LogViewer"
,
"geometry"
);
if
(
geom
!=
nullptr
)
{
QByteArray
ba
=
QByteArray
::
fromBase64
(
QByteArray
(
geom
));
restoreGeometry
(
ba
);
}
InitLog
();
}
OBSLogViewer
::~
OBSLogViewer
()
{
config_set_string
(
App
()
->
GlobalConfig
(),
"LogViewer"
,
"geometry"
,
saveGeometry
().
toBase64
().
constData
());
}
void
OBSLogViewer
::
ToggleShowStartup
(
bool
checked
)
{
config_set_bool
(
App
()
->
GlobalConfig
(),
"LogViewer"
,
"ShowLogStartup"
,
checked
);
}
bool
OBSLogViewer
::
ShowOnStartup
()
{
return
config_get_bool
(
App
()
->
GlobalConfig
(),
"LogViewer"
,
"ShowLogStartup"
);
}
extern
QPointer
<
OBSLogViewer
>
obsLogViewer
;
void
OBSLogViewer
::
InitLog
()
{
char
logDir
[
512
];
std
::
string
path
;
if
(
GetConfigPath
(
logDir
,
sizeof
(
logDir
),
"obs-studio/logs"
))
{
path
+=
logDir
;
path
+=
"/"
;
path
+=
App
()
->
GetCurrentLog
();
}
QFile
file
(
QT_UTF8
(
path
.
c_str
()));
if
(
file
.
open
(
QIODevice
::
ReadOnly
))
{
QTextStream
in
(
&
file
);
while
(
!
in
.
atEnd
())
{
QString
line
=
in
.
readLine
();
AddLine
(
LOG_INFO
,
line
);
}
file
.
close
();
}
obsLogViewer
=
this
;
}
void
OBSLogViewer
::
AddLine
(
int
type
,
const
QString
&
str
)
{
QString
msg
=
str
.
toHtmlEscaped
();
switch
(
type
)
{
case
LOG_WARNING
:
msg
=
QStringLiteral
(
"<font color=
\"
#c08000
\"
>"
)
+
msg
+
QStringLiteral
(
"</font>"
);
break
;
case
LOG_ERROR
:
msg
=
QStringLiteral
(
"<font color=
\"
#c00000
\"
>"
)
+
msg
+
QStringLiteral
(
"</font>"
);
break
;
}
QScrollBar
*
scroll
=
textArea
->
verticalScrollBar
();
bool
bottomScrolled
=
scroll
->
value
()
>=
scroll
->
maximum
()
-
10
;
if
(
bottomScrolled
)
scroll
->
setValue
(
scroll
->
maximum
());
QTextCursor
newCursor
=
textArea
->
textCursor
();
newCursor
.
movePosition
(
QTextCursor
::
End
);
newCursor
.
insertHtml
(
msg
+
QStringLiteral
(
"<br>"
));
if
(
bottomScrolled
)
scroll
->
setValue
(
scroll
->
maximum
());
}
void
OBSLogViewer
::
ClearText
()
{
textArea
->
clear
();
}
UI/log-viewer.hpp
0 → 100644
浏览文件 @
478f1de8
#pragma once
#include <QDialog>
#include <QTextEdit>
#include "obs-app.hpp"
class
OBSLogViewer
:
public
QDialog
{
Q_OBJECT
QPointer
<
QTextEdit
>
textArea
;
void
InitLog
();
private
slots
:
void
AddLine
(
int
type
,
const
QString
&
text
);
void
ClearText
();
void
ToggleShowStartup
(
bool
checked
);
public:
OBSLogViewer
(
QWidget
*
parent
=
0
);
~
OBSLogViewer
();
bool
ShowOnStartup
();
};
UI/obs-app.cpp
浏览文件 @
478f1de8
...
...
@@ -38,6 +38,7 @@
#include "qt-wrappers.hpp"
#include "obs-app.hpp"
#include "log-viewer.hpp"
#include "window-basic-main.hpp"
#include "window-basic-settings.hpp"
#include "crash-report.hpp"
...
...
@@ -89,6 +90,8 @@ string remuxFilename;
bool
restart
=
false
;
QPointer
<
OBSLogViewer
>
obsLogViewer
;
// GPU hint exports for AMD/NVIDIA laptops
#ifdef _MSC_VER
extern
"C"
__declspec
(
dllexport
)
DWORD
NvOptimusEnablement
=
1
;
...
...
@@ -250,12 +253,22 @@ string CurrentDateTimeString()
}
static
inline
void
LogString
(
fstream
&
logFile
,
const
char
*
timeString
,
char
*
str
)
char
*
str
,
int
log_level
)
{
logFile
<<
timeString
<<
str
<<
endl
;
string
msg
;
msg
+=
timeString
;
msg
+=
str
;
logFile
<<
msg
<<
endl
;
if
(
!!
obsLogViewer
)
QMetaObject
::
invokeMethod
(
obsLogViewer
.
data
(),
"AddLine"
,
Qt
::
QueuedConnection
,
Q_ARG
(
int
,
log_level
),
Q_ARG
(
QString
,
QString
(
msg
.
c_str
())));
}
static
inline
void
LogStringChunk
(
fstream
&
logFile
,
char
*
str
)
static
inline
void
LogStringChunk
(
fstream
&
logFile
,
char
*
str
,
int
log_level
)
{
char
*
nextLine
=
str
;
string
timeString
=
CurrentTimeString
();
...
...
@@ -272,12 +285,12 @@ static inline void LogStringChunk(fstream &logFile, char *str)
nextLine
[
0
]
=
0
;
}
LogString
(
logFile
,
timeString
.
c_str
(),
str
);
LogString
(
logFile
,
timeString
.
c_str
(),
str
,
log_level
);
nextLine
++
;
str
=
nextLine
;
}
LogString
(
logFile
,
timeString
.
c_str
(),
str
);
LogString
(
logFile
,
timeString
.
c_str
(),
str
,
log_level
);
}
#define MAX_REPEATED_LINES 30
...
...
@@ -368,7 +381,7 @@ static void do_log(int log_level, const char *msg, va_list args, void *param)
if
(
log_level
<=
LOG_INFO
||
log_verbose
)
{
if
(
too_many_repeated_entries
(
logFile
,
msg
,
str
))
return
;
LogStringChunk
(
logFile
,
str
);
LogStringChunk
(
logFile
,
str
,
log_level
);
}
#if defined(_WIN32) && defined(OBS_DEBUGBREAK_ON_ERROR)
...
...
UI/window-basic-main.cpp
浏览文件 @
478f1de8
...
...
@@ -190,6 +190,9 @@ extern void RegisterRestreamAuth();
OBSBasic
::
OBSBasic
(
QWidget
*
parent
)
:
OBSMainWindow
(
parent
),
ui
(
new
Ui
::
OBSBasic
)
{
/* setup log viewer */
logView
=
new
OBSLogViewer
();
qRegisterMetaTypeStreamOperators
<
SignalContainer
<
OBSScene
>>
(
"SignalContainer<OBSScene>"
);
...
...
@@ -377,6 +380,7 @@ OBSBasic::OBSBasic(QWidget *parent)
}
QPoint
curSize
(
width
(),
height
());
QPoint
statsDockSize
(
statsDock
->
width
(),
statsDock
->
height
());
QPoint
statsDockPos
=
curSize
/
2
-
statsDockSize
/
2
;
QPoint
newPos
=
curPos
+
statsDockPos
;
...
...
@@ -1926,6 +1930,9 @@ void OBSBasic::OnFirstLoad()
#endif
Auth
::
Load
();
if
(
logView
&&
logView
->
ShowOnStartup
())
logView
->
show
();
}
void
OBSBasic
::
DeferredSysTrayLoad
(
int
requeueCount
)
...
...
@@ -2398,6 +2405,7 @@ OBSBasic::~OBSBasic()
updateCheckThread
->
wait
();
delete
screenshotData
;
delete
logView
;
delete
multiviewProjectorMenu
;
delete
previewProjector
;
delete
studioProgramProjector
;
...
...
@@ -5183,18 +5191,7 @@ void OBSBasic::on_actionUploadLastLog_triggered()
void
OBSBasic
::
on_actionViewCurrentLog_triggered
()
{
char
logDir
[
512
];
if
(
GetConfigPath
(
logDir
,
sizeof
(
logDir
),
"obs-studio/logs"
)
<=
0
)
return
;
const
char
*
log
=
App
()
->
GetCurrentLog
();
string
path
=
logDir
;
path
+=
"/"
;
path
+=
log
;
QUrl
url
=
QUrl
::
fromLocalFile
(
QT_UTF8
(
path
.
c_str
()));
QDesktopServices
::
openUrl
(
url
);
logView
->
setVisible
(
!
logView
->
isVisible
());
}
void
OBSBasic
::
on_actionShowCrashLogs_triggered
()
...
...
UI/window-basic-main.hpp
浏览文件 @
478f1de8
...
...
@@ -34,6 +34,7 @@
#include "window-projector.hpp"
#include "window-basic-about.hpp"
#include "auth-base.hpp"
#include "log-viewer.hpp"
#include <obs-frontend-internal.hpp>
...
...
@@ -210,6 +211,8 @@ private:
QPointer
<
QDockWidget
>
statsDock
;
QPointer
<
OBSAbout
>
about
;
OBSLogViewer
*
logView
;
QPointer
<
QTimer
>
cpuUsageTimer
;
QPointer
<
QTimer
>
diskFullTimer
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录