3
3
4
4
#include " stdafx.h"
5
5
#include < time.h>
6
+ #include < shlwapi.h>
7
+ #include " resource.h"
8
+ #pragma comment(lib,"shlwapi.lib")
9
+
6
10
class CMyPlugin : public TVTest ::CTVTestPlugin
7
11
{
8
12
DiscordEventHandlers handlers;
9
- static LRESULT CALLBACK EventCallback (UINT Event, LPARAM lParam1, LPARAM lParam2, void *pClientData);
13
+ static LRESULT CALLBACK EventCallback (UINT Event, LPARAM lParam1, LPARAM lParam2, void * pClientData);
14
+ static INT_PTR CALLBACK SettingsDlgProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam, void * pClientData);
15
+ bool ShowDialog (HWND hwndOwner);
16
+ POINT m_SettingsDialogPos;
17
+ TCHAR m_szIniFileName[MAX_PATH];
18
+ bool conf_mode = false ;
19
+ bool conf_isFinalized = false ;
20
+ bool InitSettings ();
21
+ bool pluginState = false ;
22
+ void InitDiscord ();
23
+ void UpdateState ();
24
+ static const int DEFAULT_POS = INT_MIN;
10
25
11
26
public:
12
- bool pluginState;
13
- void discordInit ();
14
- void UpdateState ();
15
27
time_t SystemTime2Timet (const SYSTEMTIME&);
16
28
17
- bool GetPluginInfo (TVTest::PluginInfo * pInfo) override
29
+ bool GetPluginInfo (TVTest::PluginInfo* pInfo) override
18
30
{
19
31
pInfo->Type = TVTest::PLUGIN_TYPE_NORMAL;
20
- pInfo->Flags = 0 ;
32
+ pInfo->Flags = TVTest::PLUGIN_FLAG_HASSETTINGS ;
21
33
pInfo->pszPluginName = L" TvTest RPC" ;
22
34
pInfo->pszCopyright = L" (c) 2019-2020 noriokun4649" ;
23
35
pInfo->pszDescription = L" DiscordRPCをTvTestで実現します。Discordで視聴中のチャンネルなどの情報が通知されます。" ;
24
- return true ;
36
+ return true ;
25
37
}
26
38
27
39
bool Initialize () override
28
40
{
29
- discordInit ();
41
+ InitDiscord ();
30
42
m_pApp->SetEventCallback (EventCallback, this );
31
- return true ;
43
+ return true ;
32
44
}
33
45
bool Finalize () override
34
46
{
@@ -37,16 +49,24 @@ class CMyPlugin : public TVTest::CTVTestPlugin
37
49
}
38
50
};
39
51
40
- void CMyPlugin::discordInit ()
52
+
53
+ bool CMyPlugin::InitSettings () {
54
+ ::GetModuleFileName (g_hinstDLL, m_szIniFileName, MAX_PATH);
55
+ ::PathRenameExtension (m_szIniFileName, TEXT(" .ini" ));
56
+ conf_mode = ::GetPrivateProfileInt (TEXT (" Settings" ), TEXT (" Mode" ), conf_mode, m_szIniFileName) != 0 ;
57
+ m_pApp->AddLog (m_szIniFileName);
58
+ conf_isFinalized = true ;
59
+ return true ;
60
+ }
61
+
62
+ void CMyPlugin::InitDiscord ()
41
63
{
42
64
Discord_Initialize (" 577065126084214816" , &handlers, 1 , NULL );
43
65
}
44
66
45
67
void CMyPlugin::UpdateState ()
46
68
{
47
- TVTest::ChannelInfo ChannelInfo;
48
69
TVTest::ProgramInfo Info;
49
- ChannelInfo.Size = sizeof (ChannelInfo);
50
70
Info.Size = sizeof (Info);
51
71
wchar_t eventName[128 ];
52
72
wchar_t eventText[128 ];
@@ -61,15 +81,25 @@ void CMyPlugin::UpdateState()
61
81
std::string eventNamed;
62
82
time_t start;
63
83
time_t end;
64
-
84
+
65
85
if (m_pApp->GetCurrentProgramInfo (&Info)) {
66
86
eventNamed = wide_to_utf8 (Info.pszEventName );
67
87
end = SystemTime2Timet (Info.StartTime ) + Info.Duration ;
68
88
start = SystemTime2Timet (Info.StartTime );
69
89
}
70
- if (m_pApp->GetCurrentChannelInfo (&ChannelInfo) ) {
71
- m_pApp->AddLog (ChannelInfo.szChannelName );
72
- channelName = wide_to_utf8 (ChannelInfo.szChannelName );
90
+ if (!conf_mode) {
91
+ TVTest::ServiceInfo Service;
92
+ Service.Size = sizeof (Service);
93
+ if (m_pApp->GetServiceInfo (0 , &Service)) {
94
+ channelName = wide_to_utf8 (Service.szServiceName );
95
+ }
96
+ }
97
+ else {
98
+ TVTest::ChannelInfo ChannelInfo;
99
+ ChannelInfo.Size = sizeof (ChannelInfo);
100
+ if (m_pApp->GetCurrentChannelInfo (&ChannelInfo)) {
101
+ channelName = wide_to_utf8 (ChannelInfo.szChannelName );
102
+ }
73
103
}
74
104
DiscordRichPresence discordPresence;
75
105
memset (&discordPresence, 0 , sizeof (discordPresence));
@@ -95,19 +125,70 @@ time_t CMyPlugin::SystemTime2Timet(const SYSTEMTIME& st)
95
125
return mktime (&gm);
96
126
}
97
127
98
- TVTest::CTVTestPlugin * CreatePluginClass ()
128
+ TVTest::CTVTestPlugin* CreatePluginClass ()
99
129
{
100
130
return new CMyPlugin;
101
131
}
102
- LRESULT CALLBACK CMyPlugin::EventCallback (UINT Event, LPARAM lParam1, LPARAM lParam2, void *pClientData)
132
+
133
+ bool CMyPlugin::ShowDialog (HWND hwndOwner) {
134
+
135
+ TVTest::ShowDialogInfo Info;
136
+ Info.Flags = 0 ;
137
+ Info.hinst = g_hinstDLL;
138
+ Info.pszTemplate = MAKEINTRESOURCE (IDD_DIALOG1);
139
+ Info.pMessageFunc = SettingsDlgProc;
140
+ Info.pClientData = this ;
141
+ Info.hwndOwner = hwndOwner;
142
+ if (m_SettingsDialogPos.x != DEFAULT_POS && m_SettingsDialogPos.y != DEFAULT_POS) {
143
+ Info.Flags |= TVTest::SHOW_DIALOG_FLAG_POSITION;
144
+ Info.Position = m_SettingsDialogPos;
145
+ }
146
+
147
+ return m_pApp->ShowDialog (&Info) == IDOK;
148
+ }
149
+
150
+ INT_PTR CALLBACK CMyPlugin::SettingsDlgProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam, void * pClientData) {
151
+ CMyPlugin* pThis = static_cast <CMyPlugin*>(pClientData);
152
+ switch (uMsg)
153
+ {
154
+ case WM_INITDIALOG:
155
+ ::CheckDlgButton (hDlg, IDC_CHECK1, pThis->conf_mode ? BST_CHECKED : BST_UNCHECKED);
156
+ return TRUE ;
157
+ case WM_COMMAND:
158
+ switch (LOWORD (wParam)) {
159
+ case IDOK:
160
+ pThis->conf_mode = ::IsDlgButtonChecked (hDlg, IDC_CHECK1) == BST_CHECKED;
161
+ if (pThis->conf_isFinalized ) {
162
+ struct IntString {
163
+ IntString (int Value) { ::wsprintf (m_szBuffer, TEXT (" %d" ), Value); }
164
+ operator LPCTSTR () const { return m_szBuffer; }
165
+ TCHAR m_szBuffer[16 ];
166
+ };
167
+
168
+ ::WritePrivateProfileString (TEXT(" Settings" ), TEXT(" Mode" ), IntString(pThis->conf_mode), pThis->m_szIniFileName);
169
+ }
170
+ pThis->UpdateState ();
171
+ case IDCANCEL:
172
+ ::EndDialog (hDlg, LOWORD(wParam));
173
+ return TRUE ;
174
+ }
175
+ default :
176
+ break ;
177
+ return FALSE ;
178
+ }
179
+ return FALSE ;
180
+ }
181
+
182
+ LRESULT CALLBACK CMyPlugin::EventCallback (UINT Event, LPARAM lParam1, LPARAM lParam2, void * pClientData)
103
183
{
104
- CMyPlugin * pThis = static_cast <CMyPlugin *>(pClientData);
184
+ CMyPlugin* pThis = static_cast <CMyPlugin*>(pClientData);
105
185
bool fEnable = lParam1 != 0 ;
106
186
switch (Event)
107
187
{
108
188
case TVTest::EVENT_PLUGINENABLE:
109
189
if (fEnable ) {
110
190
pThis->UpdateState ();
191
+ pThis->InitSettings ();
111
192
}
112
193
else
113
194
{
@@ -121,6 +202,8 @@ LRESULT CALLBACK CMyPlugin::EventCallback(UINT Event, LPARAM lParam1, LPARAM lPa
121
202
case TVTest::EVENT_SERVICEUPDATE:
122
203
pThis->UpdateState ();
123
204
return TRUE ;
205
+ case TVTest::EVENT_PLUGINSETTINGS:
206
+ return pThis->ShowDialog (reinterpret_cast <HWND>(lParam1));
124
207
}
125
208
return 0 ;
126
209
}
0 commit comments