void PluginSurprise::OnCron(Bunny * b, QVariant) { if(b->IsIdle()) { QByteArray file; // Fetch available files QDir * dir = GetLocalHTTPFolder(); if(dir) { QString surprise = b->GetPluginSetting(GetName(), "folder", QString()).toString(); if(!surprise.isNull() && dir->cd(surprise)) { QStringList list = dir->entryList(QDir::Files|QDir::NoDotAndDotDot); if(list.count()) { file = GetBroadcastHTTPPath(QString("%1/%3").arg(surprise, list.at(qrand()%list.count()))); QByteArray message = "MU "+file+"\nPL 3\nMW\n"; b->SendPacket(MessagePacket(message)); } } else LogError("Invalid surprise config"); delete dir; } else LogError("Invalid GetLocalHTTPFolder()"); } // Restart Timer createCron(b); }
bool PluginDice::OnClick(Bunny * b, PluginInterface::ClickType type) { if (type) { // Language QByteArray Language = b->GetPluginSetting("dice", "PluginConfiguration/Language", "fr").toByteArray(); // Get a random value and create ID quint8 value = rand() % 6 + 1; LogDebug(QString(" -- Language : %1 -- Roll dice : %2").arg(Language, QString::number(value))); // Send packet to bunny with mp3 to be played b->SendPacket(MessagePacket("MU "+GetBroadcastHTTPPath(Language + "/get.mp3")+"\nMW\nMU "+GetBroadcastHTTPPath(Language + "/" + QString::number(value) + ".mp3")+"\nMW\n")); } return true; }
void PluginWizzflux::analyse(QNetworkReply* networkReply) { if (!networkReply->error()) { Bunny * bunny = BunnyManager::GetBunny(this, networkReply->parent()->property("BunnyID").toByteArray()); if(bunny) { QString message = QString::fromUtf8(networkReply->readAll()); if(message != "" && bunny->IsIdle()) { message = "ST "+message.toAscii()+"\nPL "+QString::number(qrand() % 8).toAscii()+"\nMW\n"; bunny->SendPacket(MessagePacket(message.toAscii())); } } } networkReply->deleteLater(); networkReply->parent()->deleteLater(); }
bool PluginTest::OnClick(Bunny * b, PluginInterface::ClickType type) { if (type == PluginInterface::SingleClick) { // AmbientPacket Test angle++; AmbientPacket p; p.SetEarsPosition(angle%18, 0); b->SendPacket(p); } else if (type == PluginInterface::DoubleClick) { // Chor test b->SendPacket(MessagePacket("CH broadcast/openjabnab/plugin_test/chor1.chor\n")); } return true; }
void PluginClock::OnCron(Bunny *, QVariant) { QMapIterator<Bunny *, QString> i(bunnyList); while (i.hasNext()) { i.next(); Bunny * b = i.key(); QString voice = i.value(); if(b->IsIdle()) { QString hour = QDateTime::currentDateTime().toString("h"); QByteArray file; if(voice == "tts") // if(voice == "French") // file = TTSManager::CreateNewSound("Il est " + hour + " heure", "julie"); // if(voice == "English") file = TTSManager::CreateNewSound("It is " + hour + " O'Clock", "heather"); else { // Fetch available files QDir * dir = GetLocalHTTPFolder(); if(dir) { dir->cd(voice); dir->cd(hour); QStringList list = dir->entryList(QDir::Files|QDir::NoDotAndDotDot); if(list.count()) { file = GetBroadcastHTTPPath(QString("%1/%2/%3").arg(voice, hour, list.at(qrand()%list.count()))); } delete dir; } else LogError("Invalid GetLocalHTTPFolder()"); } if(!file.isNull()) { QByteArray message = "MU "+file+"\nPL 3\nMW\n"; b->SendPacket(MessagePacket(message)); } } } }
void PluginTV::analyseDone(bool ret, Bunny * b, QByteArray message) { if(ret && b->IsConnected()) b->SendPacket(MessagePacket(message)); }
void PluginClock::OnCron(Bunny *, QVariant) { QMapIterator<Bunny *, QString> i(bunnyList); while (i.hasNext()) { i.next(); Bunny * b = i.key(); QString voice = i.value(); if(b->IsIdle()) { QString hour = QDateTime::currentDateTime().toString("h"); QByteArray file; QDir * dir = GetLocalHTTPFolder(); QStringList list; if(voice == "tts") file = TTSManager::CreateNewSound("Sono le ore " + hour, "chiara"); else { // Fetch available files if(dir) { dir->cd(voice); dir->cd(hour); list = dir->entryList(QDir::Files|QDir::NoDotAndDotDot); if(list.count()) { file = GetBroadcastHTTPPath(QString("%1/%2/%3").arg(voice, hour, list.at(qrand()%list.count()))); } delete dir; } else LogError("Invalid GetLocalHTTPFolder()"); } if(!file.isNull()) { QByteArray fileR; dir = GetLocalHTTPFolder(); if (voice == "tts") voice = "violet"; // Directory default respiration TTS QString respiration = "respiration"; // Directory respiration if (dir->cd(voice) && dir->cd(respiration)) { list = dir->entryList(QDir::Files|QDir::NoDotAndDotDot); if(list.count()) { fileR = GetBroadcastHTTPPath(QString("%1/%2/%3").arg(voice, respiration, list.at(qrand()%list.count()))); } } QByteArray message; if(!fileR.isNull()) message = "MU "+fileR+"\nPL 3\nMW\nMU "+file+"\nPL 3\nMW\nMU "+fileR+"\nPL 3\nMW\n"; else message = "MU "+file+"\nPL 3\nMW\n"; b->SendPacket(MessagePacket(message)); } } } }
ApiManager::ApiAnswer * Bunny::ProcessVioletApiCall(HTTPRequest const& hRequest) { ApiManager::ApiViolet* answer = new ApiManager::ApiViolet(); if(hRequest.HasArg("sn") && hRequest.HasArg("token")) { QString serial = hRequest.GetArg("sn").toLower(); QString token = hRequest.GetArg("token"); if(GetGlobalSetting("VApiEnable",false).toBool()) { if((GetGlobalSetting("VApiToken","").toString() == token && serial.toAscii()==GetID()) || GetGlobalSetting("VApiPublic",false).toBool()) { if(hRequest.GetURI().startsWith("/ojn/FR/api_stream.jsp")) { if(hRequest.HasArg("urlList")) { QByteArray message = ("ST " + hRequest.GetArg("urlList").split("|", QString::SkipEmptyParts).join("\nMW\nST ") + "\nMW\n").toAscii(); SendPacket(MessagePacket(message)); answer->AddMessage("WEBRADIOSENT", "Your webradio has been sent"); } else { answer->AddMessage("NOCORRECTPARAMETERS", "Please check urlList parameter !"); } } else { AmbientPacket p; if(hRequest.HasArg("action")) // TODO: send good values { switch(hRequest.GetArg("action").toInt()) { case 2: answer->AddXml("<listfriend nb=\"0\"/>"); break; case 3: answer->AddXml("<listreceivedmsg nb=\"0\"/>"); break; case 4: answer->AddXml("<timezone>(GMT + 01:00) Bruxelles, Copenhague, Madrid, Paris</timezone>"); break; case 6: answer->AddXml("<blacklist nb=\"0\"/>"); break; case 7: if(IsSleeping()) answer->AddXml("<rabbitSleep>YES</rabbitSleep>"); else answer->AddXml("<rabbitSleep>NO</rabbitSleep>"); break; case 8: answer->AddXml("<rabbitVersion>V2</rabbitVersion>"); break; case 9: answer->AddXml("<voiceListTTS nb=\"2\"/><voice lang=\"fr\" command=\"FR-Anastasie\"/><voice lang=\"de\" command=\"DE-Otto\"/>"); break; case 10: answer->AddXml("<rabbitName>" + GetBunnyName() + "</rabbitName>"); break; case 11: answer->AddXml("<langListUser nb=\"4\"/><myLang lang=\"fr\"/><myLang lang=\"us\"/><myLang lang=\"uk\"/><myLang lang=\"de\"/>"); break; case 12: answer->AddXml("<message>LINKPREVIEW</message><comment>XXXX</comment>"); break; case 13: answer->AddXml("<message>COMMANDSENT</message><comment>You rabbit will change status</comment>"); SendPacket(SleepPacket(SleepPacket::Wake_Up)); break; case 14: answer->AddXml("<message>COMMANDSENT</message><comment>You rabbit will change status</comment>"); SendPacket(SleepPacket(SleepPacket::Sleep)); break; default: break; } } else { if(hRequest.HasArg("idmessage")) { answer->AddMessage("MESSAGESENT", "Your message has been sent"); } if(hRequest.HasArg("posleft") || hRequest.HasArg("posright")) { int left = 0; int right = 0; if(hRequest.HasArg("posleft")) left = hRequest.GetArg("posleft").toInt(); if(hRequest.HasArg("posright")) right = hRequest.GetArg("posright").toInt(); if(left >= 0 && left <= 16 && right >= 0 && right <= 16) { answer->AddMessage("EARPOSITIONSENT", "Your ears command has been sent"); p.SetEarsPosition(left, right); } else { answer->AddMessage("EARPOSITIONNOTSENT", "Your ears command could not be sent"); } } if(hRequest.HasArg("tts")) { SendPacket(MessagePacket("MU "+TTSManager::CreateNewSound(hRequest.GetArg("tts"), "claire")+"\nPL 3\nMW\n")); answer->AddMessage("TTSSENT", "Your text has been sent"); } if(hRequest.HasArg("ears")) { answer->AddEarPosition(0, 0); // TODO: send real positions } if(hRequest.HasArg("chor")) { Choregraphy c; if(c.Parse(hRequest.GetArg("chor"))) //TODO: Check for good chor { QDir chorFolder = QDir(GlobalSettings::GetString("Config/RealHttpRoot")); if (!chorFolder.cd("chor")) { if (!chorFolder.mkdir("chor")) { LogError(QString("Unable to create 'chor' directory !\n")); answer->AddMessage("CHORNOTSENT", "Your chor could not be sent (can't create folder)"); } chorFolder.cd("chor"); } QString fileName = QCryptographicHash::hash(c.GetData(), QCryptographicHash::Md5).toHex().append(".chor"); QString filePath = chorFolder.absoluteFilePath(fileName); QFile file(filePath); if (!file.open(QIODevice::WriteOnly)) { LogError("Cannot open chor file for writing"); answer->AddMessage("CHORNOTSENT", "Your chor could not be sent (error in file)"); } else { file.write(c.GetData()); file.close(); SendPacket(MessagePacket(("CH broadcast/ojn_local/chor/" + fileName + "\n").toAscii())); answer->AddMessage("CHORSENT", "Your chor has been sent"); } } else { answer->AddMessage("CHORNOTSENT", "Your chor could not be sent (bad chor)"); } } } if(p.GetServices().count() > 0) SendPacket(p); } } else { answer->AddMessage("NOGOODTOKENORSERIAL", "Your token or serial number are not correct !"); } } else { answer->AddMessage("APIDISABLED", "API is disabled for this bunny"); } } else { answer->AddMessage("APIDISABLED", "Missing serial or token"); } return answer; }