Example #1
0
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);
}
Example #2
0
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;
}
Example #3
0
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();
}
Example #4
0
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;
}
Example #5
0
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));
			}
		}

	}
}
Example #6
0
void PluginTV::analyseDone(bool ret, Bunny * b, QByteArray message)
{
	if(ret && b->IsConnected())
		 b->SendPacket(MessagePacket(message));
}
Example #7
0
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));
			}
		}
	}
}
Example #8
0
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;
}