Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 10 additions & 3 deletions lib/Listener/BotInvokeListener.php
Original file line number Diff line number Diff line change
Expand Up @@ -55,13 +55,20 @@ public function handle(Event $event): void {

public function receiveWebhook(string $lang, BotInvokeEvent $event): void {
$data = $event->getMessage();
if ($data['type'] === 'Create' && $data['object']['name'] === 'message') {
if (($data['type'] === 'Create' && $data['object']['name'] === 'message')
// Nextcloud 33 and newer
|| ($data['type'] === 'Activity' && $data['object']['name'] === 'message')
// Nextcloud 32 and older
|| ($data['type'] === 'Activity' && $data['object']['name'] === '')) {

$messageData = json_decode($data['object']['content'], true);
$message = $messageData['message'];

$hasAttachment = isset($messageData['parameters']['file']);

if (!$this->logEntryMapper->hasActiveCall($data['target']['id'])) {
$displayName = $this->getAuthorDisplayName($data['actor']['name'], $data['actor']['id'], $lang);
$agendaDetected = $this->summaryService->readAgendaFromMessage($message, $messageData, $data, $displayName);
$agendaDetected = $this->summaryService->readAgendaFromMessage($message, $messageData, $data, $displayName, $hasAttachment, $lang);

if ($agendaDetected) {
// React with thumbs up as we detected an agenda item
Expand All @@ -70,7 +77,7 @@ public function receiveWebhook(string $lang, BotInvokeEvent $event): void {
return;
}

$taskDetected = $this->summaryService->readTasksFromMessage($message, $messageData, $data);
$taskDetected = $this->summaryService->readTasksFromMessage($message, $messageData, $data, $hasAttachment, $lang);

if ($taskDetected) {
// React with thumbs up as we detected a task
Expand Down
19 changes: 17 additions & 2 deletions lib/Service/SummaryService.php
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ public function __construct(
) {
}

public function readTasksFromMessage(string $message, array $messageData, array $data): bool {
public function readTasksFromMessage(string $message, array $messageData, array $data, bool $hasAttachment, string $lang): bool {
$endOfFirstLine = strpos($message, "\n") ?: -1;
$firstLowerLine = strtolower(substr($message, 0, $endOfFirstLine));

Expand Down Expand Up @@ -73,6 +73,12 @@ public function readTasksFromMessage(string $message, array $messageData, array
$parsedMessage = preg_replace(self::TODO_SOLVED_PATTERN, '- solved: ', $parsedMessage);
$parsedMessage = preg_replace(self::TODO_UNSOLVED_PATTERN, '- todo: ', $parsedMessage);

$hasAttachmentText = '';
if ($hasAttachment) {
$l = $this->l10nFactory->get('call_summary_bot', $lang);
$hasAttachmentText = ' *📎 ' . $l->t('with attachment') . '*';
}

if (preg_match(self::SUMMARY_PATTERN, $parsedMessage)) {
$todos = preg_split(self::SUMMARY_PATTERN, $parsedMessage, flags: PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
$nextEntry = null;
Expand All @@ -91,6 +97,8 @@ public function readTasksFromMessage(string $message, array $messageData, array
$nextEntry = LogEntry::TYPE_DECISION;
} elseif ($nextEntry !== null) {
$todoText = trim($todo);
$todoText .= $hasAttachmentText;

if ($todoText) {
// Only store when not empty
$this->saveTask($data['target']['id'], $todoText, $nextEntry);
Expand All @@ -106,7 +114,7 @@ public function readTasksFromMessage(string $message, array $messageData, array
return false;
}

public function readAgendaFromMessage(string $message, array $messageData, array $data, ?string $displayName): bool {
public function readAgendaFromMessage(string $message, array $messageData, array $data, ?string $displayName, bool $hasAttachment, string $lang): bool {
$endOfFirstLine = strpos($message, "\n") ?: -1;
$firstLowerLine = strtolower(substr($message, 0, $endOfFirstLine));

Expand Down Expand Up @@ -139,6 +147,12 @@ public function readAgendaFromMessage(string $message, array $messageData, array
}
}

$hasAttachmentText = '';
if ($hasAttachment) {
$l = $this->l10nFactory->get('call_summary_bot', $lang);
$hasAttachmentText = ' *📎 ' . $l->t('with attachment') . '*';
}

$parsedMessage = str_replace($placeholders, $replacements, $message);
$agendas = preg_split($agendaPattern, $parsedMessage, flags: PREG_SPLIT_NO_EMPTY);
foreach ($agendas as $agenda) {
Expand All @@ -148,6 +162,7 @@ public function readAgendaFromMessage(string $message, array $messageData, array
if ($displayName !== null && trim($displayName) !== '') {
$agendaText .= ' (' . $displayName . ')';
}
$agendaText .= $hasAttachmentText;
$this->saveTask($data['target']['id'], $agendaText, LogEntry::TYPE_AGENDA);
}
}
Expand Down
2 changes: 1 addition & 1 deletion tests/Service/SummaryServiceTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ public function testReadTasksFromMessage(string $message, array $tasks, array $t
->method('saveTask');
}

self::assertEquals(!empty($tasks), $service->readTasksFromMessage($message, ['parameters' => []], ['target' => ['id' => 't0k3n']]));
self::assertEquals(!empty($tasks), $service->readTasksFromMessage($message, ['parameters' => []], ['target' => ['id' => 't0k3n']], false, 'en'));
}

public static function dataGetTitle(): array {
Expand Down
Loading