Fix #38: Add a loading message with progress on end-user interface

This commit is contained in:
Benjamin Loison 2023-02-14 01:08:05 +01:00
parent 34c0d03587
commit 4449d488c9
Signed by: Benjamin_Loison
SSH Key Fingerprint: SHA256:BtnEgYTlHdOg1u+RmYcDE0mnfz1rhv5dSbQ2gyxW8B8
3 changed files with 17 additions and 17 deletions

View File

@ -17,6 +17,8 @@ Access raw data with: <?php echoUrl('channels/'); ?>.
<input type="submit" id="search-only-captions" value="Search only captions">
</form>
Progress: <span id="progress"></span>
<ul id="channels">
</ul>
@ -36,8 +38,8 @@ Access raw data with: <?php echoUrl('channels/'); ?>.
function treatLine(line) {
console.log(line);
if (line.startsWith('alert:')) {
alert(line.replace('alert:', ''));
if (line.startsWith('progress:')) {
document.getElementById('progress').innerHTML = line.replace('progress:', '');
} else {
var channelsDom = document.getElementById('channels');
const channelFileParts = line.split('/');

View File

@ -28,20 +28,20 @@ def write(s):
except Exception as e:
sys.exit(e)
# Unclear if `os.listdir` takes a lot of time, as it's a generator.
# As `zipgrep` doesn't support arguments to stop on first match for each file, we proceed manually to keep a good theoretical complexity.
for file in os.listdir(path):
if file.endswith('.zip'):
zip = zipfile.ZipFile(path + file)
for fileInZip in zip.namelist():
if searchOnlyCaptions and not fileInZip.endswith('.vtt'):
continue
f = zip.open(fileInZip)
for line in f.readlines():
if message in str(line):
write(f'{file}/{fileInZip}')
break
f.close()
files = [file for file in os.listdir(path) if file.endswith('.zip')]
for fileIndex, file in enumerate(files):
write(f'progress:{fileIndex + 1} / {len(files)}')
zip = zipfile.ZipFile(path + file)
for fileInZip in zip.namelist():
if searchOnlyCaptions and not fileInZip.endswith('.vtt'):
continue
f = zip.open(fileInZip)
for line in f.readlines():
if message in str(line):
write(f'{file}/{fileInZip}')
break
f.close()
f = open(clientFilePath)
while True:

View File

@ -96,7 +96,6 @@ class MyProcess implements MessageComponentInterface
if (preg_match("/^[a-zA-Z0-9-_ ]+$/", $msg) !== 1) {
return;
}
$from->send('alert:Started searching...');
$client = $this->clients->offsetGet($from);
// If a previous request was received, we execute the new one with another client for simplicity otherwise with current file deletion approach, we can't tell the worker `search.py` that we don't care about its execution anymore.
if ($client->pid !== null) {
@ -138,7 +137,6 @@ class MyProcess implements MessageComponentInterface
} else {
// We don't need the periodic timer anymore, as the worker finished its work and acknowledged that `websocket.php` completely read its output.
$this->loop->cancelTimer($client->timer);
$from->send('alert:Search finished!');
}
});
}