From d314cf842ede930365e712819e8b93fcdb51b587 Mon Sep 17 00:00:00 2001
From: Lucio Zambon <lucio.zambon@elettra.eu>
Date: Thu, 18 Jul 2024 00:23:43 +0000
Subject: [PATCH] Update talk.php

---
 speech/talk.php | 78 +++++++++++++++++++++++++++++++++++++------------
 1 file changed, 59 insertions(+), 19 deletions(-)

diff --git a/speech/talk.php b/speech/talk.php
index 1bd2af2..716b433 100644
--- a/speech/talk.php
+++ b/speech/talk.php
@@ -7,38 +7,42 @@ CREATE TABLE IF NOT EXISTS speech (
 				host VARCHAR(50),
 				t TIMESTAMP DEFAULT now()
 			)";
+CREATE TABLE IF NOT EXISTS ujive (
+				token VARCHAR(20) PRIMARY KEY,
+				msg VARCHAR(255),
+				host VARCHAR(50),
+				t TIMESTAMP DEFAULT now()
+			)";
 */
-	function speechRead($token) {
+	function dbRead($table, $token) {
 		global $sql;
-		$query = "SELECT msg FROM speech WHERE token=$1";
+		$query = "SELECT msg FROM $table WHERE token=$1";
 		$data = $sql->sql_secure($query, array($token));
 		$err = $sql->sql_error();
 		return (!empty($err))? $err: $data[0]['msg'];
 	}
-	function speechUpsert($token, $msg) {
+	function dbUpsert($table, $token, $msg) {
 		global $sql;
-		$query = "DELETE FROM speech WHERE EXTRACT(EPOCH FROM NOW()-t) > 36000"; 
+		$query = "DELETE FROM $table WHERE EXTRACT(EPOCH FROM NOW()-t) > 36000"; 
 		$sql->sql_query($query);
-		$query = "INSERT INTO speech (token, msg, host) VALUES ($1, $2, '".($_SERVER['REMOTE_ADDR'].'_'.$_SERVER['HTTP_X_FORWARDED_FOR'])."') ON CONFLICT (token) DO UPDATE SET msg=$3";
+		$query = "INSERT INTO $table (token, msg, host) VALUES ($1, $2, '".($_SERVER['REMOTE_ADDR'].'_'.$_SERVER['HTTP_X_FORWARDED_FOR'])."') ON CONFLICT (token) DO UPDATE SET msg=$3";
 		$data = $sql->sql_secure($query, array($token, $msg, $msg));
 		$err = $sql->sql_error();
 		if (!empty($err)) echo $err;
 	}
 	$sql = open_db();
-	// if (!empty($_REQUEST['testupsert'])) {speechUpsert($_REQUEST['upsert'], $_REQUEST['msg']);exit();}
-	// if (!empty($_REQUEST['testsread'])) {die(speechRead($_REQUEST['sread']));}
 	$local = isset($_REQUEST['cdn'])? false: true; // true = use only locally installed modules, false = use cdn
 	$lang = empty($_REQUEST['lang'])? 'it': substr($_REQUEST['lang'], 0, 2);
 	$host = isset($hs[$_SERVER['REMOTE_ADDR']])? $hs[$_SERVER['REMOTE_ADDR']]: $_SERVER['REMOTE_ADDR'];
-	function mylog() {
-		file_put_contents('./logs'.date('Y').'.txt', date('Y-m-d H:i:s').' '.$_SERVER['REMOTE_ADDR'].'_'.$_SERVER['HTTP_X_FORWARDED_FOR'].' - '.$_SERVER['QUERY_STRING'].PHP_EOL , FILE_APPEND | LOCK_EX);
+	function mylog($a = '') {
+		file_put_contents('./logs'.date('Y').'.txt', date('Y-m-d H:i:s').' '.$_SERVER['REMOTE_ADDR'].'_'.$_SERVER['HTTP_X_FORWARDED_FOR'].' - '.$_SERVER['QUERY_STRING'].$a.PHP_EOL , FILE_APPEND | LOCK_EX);
 	}
 	/*if (!empty($_REQUEST['init'])) {
 		$t = $_REQUEST['init']-0;
 		if ($t==0 || $t>1000000000000) die('');
 		file_put_contents("./token", $t);
 	}*/
-	if (!empty($_REQUEST['search']) || !empty($_REQUEST['open'])) mylog();
+	if (!empty($_REQUEST['open'])) mylog();
 	if (!empty($_REQUEST['list'])) {
 		/*$t = file_get_contents("./token");
 		if ($t != $_REQUEST['token']-0) die('[]');
@@ -102,16 +106,50 @@ CREATE TABLE IF NOT EXISTS speech (
 		header('Content-Type: application/json');
 		die(json_encode($data));
 	}
+	if (!empty($_REQUEST['ctree'])) {
+		dbUpsert('ujive', $_REQUEST['token'], $_REQUEST['ctree']);
+		/* do NOT wait for a response
+		for ($i=0; $i<50; $i++) {
+			$f = dbRead('ujive', $_REQUEST['token']);
+			if (!empty($f) && $f != $_REQUEST['ctree']) {
+				dbUpsert('ujive', $_REQUEST['token'], '');
+				mylog(', R: '.$f);
+				die($f);
+			}
+			usleep(100000);
+		}
+		dbUpsert('ujive', $_REQUEST['token'], '');
+		mylog(", R: timeout");
+		die("{$_REQUEST['ctree']} not found, timeout");
+		*/
+		die('OK');
+	}
+	if (!empty($_REQUEST['ujive'])) {
+		set_time_limit(0);
+		while (true) {
+			$f = dbRead('ujive', $_REQUEST['token']);
+			if (!empty($f)) {
+				dbUpsert('ujive', $_REQUEST['token'], '');
+				die($f);
+			}
+			usleep(100000);
+		}
+	}
 	if (!empty($_REQUEST['search'])) {
 		if (!empty($_REQUEST['speech'])) {
 			$speech = explode('_', strtr(strtoupper($_REQUEST['speech']), [' '=>'_', '.'=>'_', '-'=>'_']));
 			$sr = explode('_', $_REQUEST['search']);
 			foreach ($speech as $i=>$s) {
-				if ($s != $sr[$i]) {
+				$locale = json_decode(file_get_contents('./talk_locale.json'), true);
+				$sk = $locale[$lang=='it'? "it-IT": "en-US"]["search"];
+				if ($s != $sr[$i] && strlen($s)>1 && !is_numeric($s) && !in_array(strtolower($s), $sk)) {
+					if (substr($sr[$i], -2, 1)=='0' && is_numeric(substr($sr[$i], -1, 1))) $sr[$i] = substr($sr[$i], 0, -2);
 					$query = "INSERT INTO speechreplace (speech, replace, lang) VALUES ($1, $2, $3)";
+					if (isset($_REQUEST['debug'])) echo "$query, array($s, $sr[$i], $lang)<br>\n";
 					$data = $sql->sql_secure($query, array($s, $sr[$i], $lang));
 				}
 			}
+			// if (isset($_REQUEST['debug'])) die('done');
 		}
 		$query = "SELECT speech, replace FROM speechreplace WHERE lang=$1";
 		$data = $sql->sql_secure($query, array($lang));
@@ -121,28 +159,30 @@ CREATE TABLE IF NOT EXISTS speech (
 		}
 		$search = strtr($_REQUEST['search'], $replace);
 		if (!empty($search)) {
-			speechUpsert($_REQUEST['token'], $search);
+			dbUpsert('speech', $_REQUEST['token'], $search);
 			for ($i=0; $i<50; $i++) {
-				$f = speechRead($_REQUEST['token']);
+				$f = dbRead('speech', $_REQUEST['token']);
 				if (!empty($f) && $f != $search) {
-					speechUpsert($_REQUEST['token'], '');
+					dbUpsert('speech', $_REQUEST['token'], '');
+					mylog(', R: '.$f);
 					die($f);
 				}
 				usleep(100000);
 			}
-			speechUpsert($_REQUEST['token'], '');
+			dbUpsert('speech', $_REQUEST['token'], '');
+			mylog(", R: timeout");
 			die("$search not found, timeout");
 		}
 	}
 	if (isset($_REQUEST['readresult'])) {
-		speechUpsert($_REQUEST['token'], substr($_REQUEST['readresult'], 0, 15));
+		dbUpsert('speech', $_REQUEST['token'], substr($_REQUEST['readresult'], 0, 15));
 	}
 	if (isset($_REQUEST['read'])) {
 		set_time_limit(0);
 		while (true) {
-			$f = speechRead($_REQUEST['token']);
+			$f = dbRead('speech', $_REQUEST['token']);
 			if (!empty($f)) {
-				speechUpsert($_REQUEST['token'], '');
+				dbUpsert('speech', $_REQUEST['token'], '');
 				die($f);
 			}
 			usleep(100000);
@@ -246,7 +286,7 @@ CREATE TABLE IF NOT EXISTS speech (
 		<script src="../../lib/bootstrap4/bootstrap.bundle.min.js"></script>
 		<script src="./talk.js"></script>
 	</head>
-	<body onLoad='myload()'>
+	<body onLoad='myload()' style="background-color: rgb(0, 0, 0, 0);">
 		<div id='transcriptDiv' style='display:none;'></div>
 		<div style="max-width: 280px; max-height: 30px; text-align: center;">
 			<audio id='speechText' onended='speakagain();' onerror='showLog("audio err: "+event.error)'></audio>
-- 
GitLab