mirror of
https://github.com/kevachat/webapp.git
synced 2025-01-14 16:57:56 +00:00
attach timestamp to the message key is chat feature requires fixed timing
This commit is contained in:
parent
9cd4bb631d
commit
948d5bbaaa
@ -97,23 +97,18 @@ class RoomController extends AbstractController
|
||||
continue;
|
||||
}
|
||||
|
||||
// Get more info
|
||||
if ($transaction = $client->getRawTransaction($pending['txid']))
|
||||
// Require valid kevachat meta
|
||||
if ($data = $this->_post($pending))
|
||||
{
|
||||
$feed[] =
|
||||
[
|
||||
'pending' => true,
|
||||
'key' => $pending['key'],
|
||||
'value' => $pending['value'],
|
||||
'txid' => $pending['txid'],
|
||||
'transaction' =>
|
||||
[
|
||||
'time' => date('c', $transaction['time']),
|
||||
'timestamp' => $transaction['time'],
|
||||
'confirmations' => $transaction['confirmations'],
|
||||
],
|
||||
'icon' => $this->_identicon($pending['key']),
|
||||
'sort' => 0//$transaction['time'] // sort order field
|
||||
'id' => $data->id,
|
||||
'user' => $data->user,
|
||||
'icon' => $data->icon,
|
||||
'message' => $data->message,
|
||||
'timestamp' => $data->time,
|
||||
'time' => date('c', $data->time),
|
||||
'pending' => true
|
||||
];
|
||||
}
|
||||
}
|
||||
@ -127,25 +122,18 @@ class RoomController extends AbstractController
|
||||
continue;
|
||||
}
|
||||
|
||||
// Get more info
|
||||
if ($transaction = $client->getRawTransaction($post['txid']))
|
||||
// Require valid kevachat meta
|
||||
if ($data = $this->_post($post))
|
||||
{
|
||||
$feed[] =
|
||||
[
|
||||
'pending' => false,
|
||||
'key' => $post['key'],
|
||||
'value' => $post['value'],
|
||||
'height' => $post['height'],
|
||||
# 'vout' => $post['vout'],
|
||||
'txid' => $post['txid'],
|
||||
'transaction' =>
|
||||
[
|
||||
'time' => date('c', $transaction['time']),
|
||||
'timestamp' => $transaction['time'],
|
||||
'confirmations' => $transaction['confirmations'],
|
||||
],
|
||||
'icon' => $this->_identicon($post['key']),
|
||||
'sort' => $transaction['time'] // sort order field
|
||||
'id' => $data->id,
|
||||
'user' => $data->user,
|
||||
'icon' => $data->icon,
|
||||
'message' => $data->message,
|
||||
'timestamp' => $data->time,
|
||||
'time' => date('c', $data->time),
|
||||
'pending' => false
|
||||
];
|
||||
}
|
||||
}
|
||||
@ -154,7 +142,7 @@ class RoomController extends AbstractController
|
||||
array_multisort(
|
||||
array_column(
|
||||
$feed,
|
||||
'sort'
|
||||
'time'
|
||||
),
|
||||
SORT_DESC,
|
||||
$feed
|
||||
@ -354,7 +342,8 @@ class RoomController extends AbstractController
|
||||
$client->kevaPut(
|
||||
$request->get('namespace'),
|
||||
sprintf(
|
||||
'@%s',
|
||||
'%s@%s',
|
||||
time(), // @TODO save timestamp as part of key to keep timing actual for the chat feature
|
||||
$request->get('user') === 'ip' ? $request->getClientIp() : 'anonymous'
|
||||
),
|
||||
$request->get('message')
|
||||
@ -390,29 +379,53 @@ class RoomController extends AbstractController
|
||||
);
|
||||
}
|
||||
|
||||
private function _identicon(string $key)
|
||||
private function _post(array $data): ?object
|
||||
{
|
||||
if ($key === 'anonymous')
|
||||
if (false === preg_match('/^([\d]+)@(.*)$/', $data['key'], $matches))
|
||||
{
|
||||
return false;
|
||||
return null;
|
||||
}
|
||||
|
||||
else
|
||||
if (empty($matches[1]))
|
||||
{
|
||||
$identicon = new \Jdenticon\Identicon();
|
||||
|
||||
$identicon->setValue($key);
|
||||
|
||||
$identicon->setSize(12);
|
||||
|
||||
$identicon->setStyle(
|
||||
[
|
||||
'backgroundColor' => 'rgba(255, 255, 255, 0)',
|
||||
'padding' => 0
|
||||
]
|
||||
);
|
||||
|
||||
return $identicon->getImageDataUri('webp');
|
||||
return null;
|
||||
}
|
||||
|
||||
if (empty($matches[2]))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
return (object)
|
||||
[
|
||||
'id' => $data['txid'],
|
||||
'time' => $matches[1],
|
||||
'user' => $matches[2],
|
||||
'icon' => $this->_identicon($matches[2]),
|
||||
'message' => $data['value']
|
||||
];
|
||||
}
|
||||
|
||||
private function _identicon(mixed $value): ?string
|
||||
{
|
||||
if ($value === 'anonymous')
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
$identicon = new \Jdenticon\Identicon();
|
||||
|
||||
$identicon->setValue($value);
|
||||
|
||||
$identicon->setSize(12);
|
||||
|
||||
$identicon->setStyle(
|
||||
[
|
||||
'backgroundColor' => 'rgba(255, 255, 255, 0)',
|
||||
'padding' => 0
|
||||
]
|
||||
);
|
||||
|
||||
return $identicon->getImageDataUri('webp');
|
||||
}
|
||||
}
|
@ -15,7 +15,7 @@
|
||||
<ul>
|
||||
{% for post in feed %}
|
||||
<li>
|
||||
<a name="{{ post.txid }}"></a>
|
||||
<a name="{{ post.id }}"></a>
|
||||
{% if post.icon %}
|
||||
<img src="{{ post.icon }}" alt="icon" />
|
||||
{% else %}
|
||||
@ -24,9 +24,9 @@
|
||||
</strong>
|
||||
{% endif %}
|
||||
•
|
||||
<a href="{{ path('room_namespace', { namespace : request.get('namespace') }) }}#{{ post.txid }}" title="{{ 'time:' | trans }} {{ post.transaction.time }} / {{ 'confirmations:' | trans }} {{ post.transaction.confirmations }}">{{ post.transaction.timestamp | format_ago }}</a>
|
||||
<a href="{{ path('room_namespace', { namespace : request.get('namespace') }) }}#{{ post.id }}" title="{{ post.time }}">{{ post.timestamp | format_ago }}</a>
|
||||
•
|
||||
<a href="{{ path('room_namespace', { namespace : request.get('namespace'), txid : post.txid }) }}#{{ post.txid }}">{{ 'reply' | trans }}</a>
|
||||
<a href="{{ path('room_namespace', { namespace : request.get('namespace'), id : post.id }) }}#{{ post.id }}">{{ 'reply' | trans }}</a>
|
||||
{% if post.pending %}
|
||||
<span title="{{ 'pending in DHT' | trans }}">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 16 16">
|
||||
@ -35,7 +35,7 @@
|
||||
</span>
|
||||
{% endif %}
|
||||
<p>
|
||||
{{ post.value }}
|
||||
{{ post.message }}
|
||||
</p>
|
||||
</li>
|
||||
{% endfor %}
|
||||
|
Loading…
Reference in New Issue
Block a user