[RemoteTimers] add possibility to transfer all timers at once via webif

Use:
http://boxip/control/sendalltimers?ip=10.1.1.xxx&force=1
http://boxip/control/sendalltimers?name=record%20box&force=true

if parameter name is given, it has to be in timerlist as remote box.
if parameter ip and name is given, ip is used.
if parameter force is set, all checks are disabled, and the local timer
will be deleted even the transfer was not successful.
This commit is contained in:
TangoCash
2017-06-15 16:34:19 +02:00
parent 78f1b294a9
commit 7031e99573
4 changed files with 83 additions and 0 deletions

View File

@@ -209,6 +209,7 @@ const CControlAPI::TyCgiCall CControlAPI::yCgiCallList[]=
{"crypt", &CControlAPI::CryptCGI, "text/plain"}, {"crypt", &CControlAPI::CryptCGI, "text/plain"},
// timer // timer
{"timer", &CControlAPI::TimerCGI, "text/plain"}, {"timer", &CControlAPI::TimerCGI, "text/plain"},
{"sendalltimers", &CControlAPI::TimerSendCGI, "text/plain"},
// bouquet editing // bouquet editing
{"setbouquet", &CControlAPI::setBouquetCGI, "text/plain"}, {"setbouquet", &CControlAPI::setBouquetCGI, "text/plain"},
{"savebouquet", &CControlAPI::saveBouquetCGI, "text/plain"}, {"savebouquet", &CControlAPI::saveBouquetCGI, "text/plain"},
@@ -335,7 +336,34 @@ void CControlAPI::TimerCGI(CyhookHandler *hh)
hh->SendError(); hh->SendError();
} }
void CControlAPI::TimerSendCGI(CyhookHandler *hh)
{
hh->outStart();
if (NeutrinoAPI->Timerd->isTimerdAvailable())
{
if (!hh->ParamList.empty())
{
bool force = (hh->ParamList["force"] == "1") || (hh->ParamList["force"] == "true");
if(!hh->ParamList["ip"].empty())
{
NeutrinoAPI->SendAllTimers(hh->ParamList["ip"],force);
hh->SendOk();
}
else if(!hh->ParamList["name"].empty())
{
NeutrinoAPI->SendAllTimers(NeutrinoAPI->GetRemoteBoxIP(decodeString(hh->ParamList["name"])),force);
hh->SendOk();
}
else
hh->SendError();
}
}
else
hh->SendError();
}
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
void CControlAPI::SetModeCGI(CyhookHandler *hh) void CControlAPI::SetModeCGI(CyhookHandler *hh)
{ {
if (!(hh->ParamList.empty())) if (!(hh->ParamList.empty()))

View File

@@ -73,6 +73,7 @@ private:
// CGI functions for ExecuteCGI // CGI functions for ExecuteCGI
void TimerCGI(CyhookHandler *hh); void TimerCGI(CyhookHandler *hh);
void TimerSendCGI(CyhookHandler *hh);
void SetModeCGI(CyhookHandler *hh); void SetModeCGI(CyhookHandler *hh);
void GetModeCGI(CyhookHandler *hh); void GetModeCGI(CyhookHandler *hh);
void ExecCGI(CyhookHandler *hh); void ExecCGI(CyhookHandler *hh);

View File

@@ -27,6 +27,7 @@
#include <driver/rcinput.h> #include <driver/rcinput.h>
#include <driver/screen_max.h> #include <driver/screen_max.h>
#include <driver/pictureviewer/pictureviewer.h> #include <driver/pictureviewer/pictureviewer.h>
#include <system/httptool.h>
#include <gui/color.h> #include <gui/color.h>
#include <gui/widget/icons.h> #include <gui/widget/icons.h>
#include <gui/movieplayer.h> #include <gui/movieplayer.h>
@@ -530,3 +531,54 @@ std::string CNeutrinoAPI::getLogoFile(t_channel_id channelId)
return logoString; return logoString;
return ""; return "";
} }
std::string CNeutrinoAPI::GetRemoteBoxIP(std::string _rbname)
{
std::string c_url = "";
for (std::vector<timer_remotebox_item>::iterator it = g_settings.timer_remotebox_ip.begin(); it != g_settings.timer_remotebox_ip.end(); ++it)
{
if (it->rbname == _rbname)
{
if (!it->user.empty() && !it->pass.empty())
c_url += it->user + ":" + it->pass +"@";
c_url += it->rbaddress;
c_url += ":" + to_string(it->port);
break;
}
}
return c_url;
}
void CNeutrinoAPI::SendAllTimers(std::string url, bool force)
{
CTimerd::TimerList timerlist;
timerlist.clear();
Timerd->getTimerList(timerlist);
sort(timerlist.begin(), timerlist.end());
CTimerd::TimerList::iterator timer = timerlist.begin();
int pre,post;
Timerd->getRecordingSafety(pre,post);
CHTTPTool httpTool;
std::string r_url;
for(int i = 0; timer != timerlist.end(); ++timer)
{
if (timer->eventType == CTimerd::TIMER_RECORD) {
r_url = "http://";
r_url += url;
r_url += "/control/timer?action=new";
r_url += "&alarm=" + to_string((int)timer->alarmTime + pre);
r_url += "&stop=" + to_string((int)timer->stopTime - post);
r_url += "&announce=" + to_string((int)timer->announceTime + pre);
r_url += "&channel_id=" + string_printf(PRINTF_CHANNEL_ID_TYPE_NO_LEADING_ZEROS, timer->channel_id);
r_url += "&aj=on";
r_url += "&rs=on";
r_url = httpTool.downloadString(r_url, -1, 300);
if ((r_url=="ok") || force)
Timerd->removeTimerEvent(timer->eventID);
}
}
}

View File

@@ -84,6 +84,8 @@ public:
std::string getAudioInfoAsString(void); std::string getAudioInfoAsString(void);
std::string getCryptInfoAsString(void); std::string getCryptInfoAsString(void);
std::string getLogoFile(t_channel_id channelId); std::string getLogoFile(t_channel_id channelId);
std::string GetRemoteBoxIP(std::string _rbname);
void SendAllTimers(std::string url, bool force = false);
public: public:
CNeutrinoAPI(); CNeutrinoAPI();
~CNeutrinoAPI(void); ~CNeutrinoAPI(void);