diff options
48 files changed, 313 insertions, 241 deletions
diff --git a/lib/Controller/GuestController.php b/lib/Controller/GuestController.php index 468fb28b1..20ea8716c 100644 --- a/lib/Controller/GuestController.php +++ b/lib/Controller/GuestController.php @@ -24,7 +24,7 @@ declare(strict_types=1); namespace OCA\Talk\Controller; -use Doctrine\DBAL\DBALException; +use Doctrine\DBAL\Exception; use OCA\Talk\GuestManager; use OCA\Talk\Participant; use OCP\AppFramework\Http; @@ -63,7 +63,7 @@ class GuestController extends AEnvironmentAwareController { try { $this->guestManager->updateName($this->getRoom(), $participant, $displayName); - } catch (DBALException $e) { + } catch (Exception $e) { return new DataResponse([], Http::STATUS_INTERNAL_SERVER_ERROR); } diff --git a/lib/GuestManager.php b/lib/GuestManager.php index 3d7a6f178..fa4a6e426 100644 --- a/lib/GuestManager.php +++ b/lib/GuestManager.php @@ -23,6 +23,7 @@ declare(strict_types=1); namespace OCA\Talk; +use Doctrine\DBAL\Exception; use OCA\Talk\Events\AddEmailEvent; use OCA\Talk\Events\ModifyParticipantEvent; use OCA\Talk\Exceptions\ParticipantNotFoundException; @@ -88,7 +89,7 @@ class GuestManager { * @param Room $room * @param Participant $participant * @param string $displayName - * @throws \Doctrine\DBAL\DBALException + * @throws Exception */ public function updateName(Room $room, Participant $participant, string $displayName): void { $sessionHash = $participant->getAttendee()->getActorId(); diff --git a/lib/Migration/Version10000Date20200819121721.php b/lib/Migration/Version10000Date20200819121721.php index c15fa02db..c4a26fd3d 100644 --- a/lib/Migration/Version10000Date20200819121721.php +++ b/lib/Migration/Version10000Date20200819121721.php @@ -26,7 +26,7 @@ declare(strict_types=1); namespace OCA\Talk\Migration; use Closure; -use Doctrine\DBAL\Types\Type; +use Doctrine\DBAL\Types\Types; use OCP\DB\ISchemaWrapper; use OCP\Migration\IOutput; use OCP\Migration\SimpleMigrationStep; @@ -44,15 +44,15 @@ class Version10000Date20200819121721 extends SimpleMigrationStep { if (!$schema->hasTable('talk_bridges')) { $table = $schema->createTable('talk_bridges'); - $table->addColumn('id', Type::BIGINT, [ + $table->addColumn('id', Types::BIGINT, [ 'autoincrement' => true, 'notnull' => true, ]); - $table->addColumn('room_id', Type::BIGINT, [ + $table->addColumn('room_id', Types::BIGINT, [ 'notnull' => true, 'unsigned' => true, ]); - $table->addColumn('json_values', Type::TEXT, [ + $table->addColumn('json_values', Types::TEXT, [ 'notnull' => true, ]); $table->addUniqueIndex(['room_id'], 'tbr_room_id'); diff --git a/lib/Migration/Version10000Date20201012144235.php b/lib/Migration/Version10000Date20201012144235.php index 9ee1d7f89..f7d22cb51 100644 --- a/lib/Migration/Version10000Date20201012144235.php +++ b/lib/Migration/Version10000Date20201012144235.php @@ -26,7 +26,7 @@ declare(strict_types=1); namespace OCA\Talk\Migration; use Closure; -use Doctrine\DBAL\Types\Type; +use Doctrine\DBAL\Types\Types; use OCP\DB\ISchemaWrapper; use OCP\Migration\IOutput; use OCP\Migration\SimpleMigrationStep; @@ -43,7 +43,7 @@ class Version10000Date20201012144235 extends SimpleMigrationStep { $schema = $schemaClosure(); $table = $schema->getTable('talk_rooms'); - $table->addColumn('sip_enabled', Type::SMALLINT, [ + $table->addColumn('sip_enabled', Types::SMALLINT, [ 'notnull' => true, 'default' => 0, 'unsigned' => true, diff --git a/lib/Migration/Version10000Date20201015134000.php b/lib/Migration/Version10000Date20201015134000.php index aa7e5bb5e..b3e870f0f 100644 --- a/lib/Migration/Version10000Date20201015134000.php +++ b/lib/Migration/Version10000Date20201015134000.php @@ -26,7 +26,7 @@ declare(strict_types=1); namespace OCA\Talk\Migration; use Closure; -use Doctrine\DBAL\Types\Type; +use Doctrine\DBAL\Types\Types; use OCA\Talk\Model\Attendee; use OCA\Talk\Participant; use OCP\AppFramework\Utility\ITimeFactory; @@ -66,58 +66,58 @@ class Version10000Date20201015134000 extends SimpleMigrationStep { $table = $schema->createTable('talk_attendees'); // Auto increment id - $table->addColumn('id', Type::BIGINT, [ + $table->addColumn('id', Types::BIGINT, [ 'autoincrement' => true, 'notnull' => true, ]); // Unique key - $table->addColumn('room_id', Type::BIGINT, [ + $table->addColumn('room_id', Types::BIGINT, [ 'notnull' => true, 'unsigned' => true, ]); - $table->addColumn('actor_type', Type::STRING, [ + $table->addColumn('actor_type', Types::STRING, [ 'notnull' => true, 'length' => 32, ]); - $table->addColumn('actor_id', Type::STRING, [ + $table->addColumn('actor_id', Types::STRING, [ 'notnull' => true, 'length' => 255, ]); - $table->addColumn('display_name', Type::STRING, [ + $table->addColumn('display_name', Types::STRING, [ 'notnull' => false, 'default' => '', 'length' => 64, ]); - $table->addColumn('pin', Type::STRING, [ + $table->addColumn('pin', Types::STRING, [ 'notnull' => false, 'length' => 32, ]); - $table->addColumn('participant_type', Type::SMALLINT, [ + $table->addColumn('participant_type', Types::SMALLINT, [ 'notnull' => true, 'length' => 6, 'default' => 0, 'unsigned' => true, ]); - $table->addColumn('favorite', Type::BOOLEAN, [ + $table->addColumn('favorite', Types::BOOLEAN, [ 'default' => 0, ]); - $table->addColumn('notification_level', Type::INTEGER, [ + $table->addColumn('notification_level', Types::INTEGER, [ 'default' => Participant::NOTIFY_DEFAULT, 'notnull' => false, ]); - $table->addColumn('last_joined_call', Type::INTEGER, [ + $table->addColumn('last_joined_call', Types::INTEGER, [ 'notnull' => true, 'length' => 11, 'default' => 0, 'unsigned' => true, ]); - $table->addColumn('last_read_message', Type::BIGINT, [ + $table->addColumn('last_read_message', Types::BIGINT, [ 'default' => 0, 'notnull' => false, ]); - $table->addColumn('last_mention_message', Type::BIGINT, [ + $table->addColumn('last_mention_message', Types::BIGINT, [ 'default' => 0, 'notnull' => false, ]); @@ -135,28 +135,28 @@ class Version10000Date20201015134000 extends SimpleMigrationStep { $table = $schema->createTable('talk_sessions'); // Auto increment id - $table->addColumn('id', Type::BIGINT, [ + $table->addColumn('id', Types::BIGINT, [ 'autoincrement' => true, 'notnull' => true, ]); // Unique key (for now, might remove this in the future, // so a user can join multiple times. - $table->addColumn('attendee_id', Type::BIGINT, [ + $table->addColumn('attendee_id', Types::BIGINT, [ 'notnull' => true, 'unsigned' => true, ]); // Unique key to avoid duplication issues - $table->addColumn('session_id', Type::STRING, [ + $table->addColumn('session_id', Types::STRING, [ 'notnull' => true, 'length' => 512, ]); - $table->addColumn('in_call', Type::INTEGER, [ + $table->addColumn('in_call', Types::INTEGER, [ 'default' => 0, ]); - $table->addColumn('last_ping', Type::INTEGER, [ + $table->addColumn('last_ping', Types::INTEGER, [ 'notnull' => true, 'length' => 11, 'default' => 0, diff --git a/lib/Migration/Version11000Date20200922161218.php b/lib/Migration/Version11000Date20200922161218.php index a43760f3f..16bed5732 100644 --- a/lib/Migration/Version11000Date20200922161218.php +++ b/lib/Migration/Version11000Date20200922161218.php @@ -26,7 +26,7 @@ declare(strict_types=1); namespace OCA\Talk\Migration; use Closure; -use Doctrine\DBAL\Types\Type; +use Doctrine\DBAL\Types\Types; use OCP\DB\ISchemaWrapper; use OCP\Migration\IOutput; use OCP\Migration\SimpleMigrationStep; @@ -55,14 +55,14 @@ class Version11000Date20200922161218 extends SimpleMigrationStep { if ($schema->hasTable('talk_bridges')) { $table = $schema->getTable('talk_bridges'); if (!$table->hasColumn('enabled')) { - $table->addColumn('enabled', Type::SMALLINT, [ + $table->addColumn('enabled', Types::SMALLINT, [ 'notnull' => true, 'default' => 0, 'unsigned' => true, ]); } if (!$table->hasColumn('pid')) { - $table->addColumn('pid', Type::INTEGER, [ + $table->addColumn('pid', Types::INTEGER, [ 'notnull' => true, 'default' => 0, 'unsigned' => true, diff --git a/lib/Migration/Version11000Date20201011082810.php b/lib/Migration/Version11000Date20201011082810.php index 7714c2a81..64199421e 100644 --- a/lib/Migration/Version11000Date20201011082810.php +++ b/lib/Migration/Version11000Date20201011082810.php @@ -26,7 +26,7 @@ declare(strict_types=1); namespace OCA\Talk\Migration; use Closure; -use Doctrine\DBAL\Types\Type; +use Doctrine\DBAL\Types\Types; use OCP\DB\ISchemaWrapper; use OCP\Migration\IOutput; use OCP\Migration\SimpleMigrationStep; @@ -45,7 +45,7 @@ class Version11000Date20201011082810 extends SimpleMigrationStep { $table = $schema->getTable('talk_rooms'); if (!$table->hasColumn('description')) { - $table->addColumn('description', Type::TEXT, [ + $table->addColumn('description', Types::TEXT, [ 'notnull' => false, 'default' => '', ]); diff --git a/lib/Migration/Version2000Date20170707093535.php b/lib/Migration/Version2000Date20170707093535.php index cbbd0031c..3d5a35aa1 100644 --- a/lib/Migration/Version2000Date20170707093535.php +++ b/lib/Migration/Version2000Date20170707093535.php @@ -24,7 +24,7 @@ declare(strict_types=1); */ namespace OCA\Talk\Migration; -use Doctrine\DBAL\Types\Type; +use Doctrine\DBAL\Types\Types; use OCP\DB\ISchemaWrapper; use OCP\Migration\SimpleMigrationStep; use OCP\Migration\IOutput; @@ -45,27 +45,27 @@ class Version2000Date20170707093535 extends SimpleMigrationStep { if (!$schema->hasTable('spreedme_messages')) { $table = $schema->createTable('spreedme_messages'); - $table->addColumn('id', Type::INTEGER, [ + $table->addColumn('id', Types::INTEGER, [ 'autoincrement' => true, 'notnull' => true, 'length' => 11, ]); - $table->addColumn('sender', Type::STRING, [ + $table->addColumn('sender', Types::STRING, [ 'notnull' => true, 'length' => 255, ]); - $table->addColumn('recipient', Type::STRING, [ + $table->addColumn('recipient', Types::STRING, [ 'notnull' => true, 'length' => 255, ]); - $table->addColumn('sessionId', Type::STRING, [ + $table->addColumn('sessionId', Types::STRING, [ 'notnull' => true, 'length' => 255, ]); - $table->addColumn('object', Type::TEXT, [ + $table->addColumn('object', Types::TEXT, [ 'notnull' => true, ]); - $table->addColumn('timestamp', Type::INTEGER, [ + $table->addColumn('timestamp', Types::INTEGER, [ 'notnull' => true, 'length' => 11, ]); @@ -76,22 +76,22 @@ class Version2000Date20170707093535 extends SimpleMigrationStep { if (!$schema->hasTable('spreedme_rooms')) { $table = $schema->createTable('spreedme_rooms'); - $table->addColumn('id', Type::INTEGER, [ + $table->addColumn('id', Types::INTEGER, [ 'autoincrement' => true, 'notnull' => true, 'length' => 11, ]); - $table->addColumn('name', Type::STRING, [ + $table->addColumn('name', Types::STRING, [ 'notnull' => false, 'length' => 255, 'default' => '', ]); - $table->addColumn('token', Type::STRING, [ + $table->addColumn('token', Types::STRING, [ 'notnull' => false, 'length' => 32, 'default' => '', ]); - $table->addColumn('type', Type::INTEGER, [ + $table->addColumn('type', Types::INTEGER, [ 'notnull' => true, 'length' => 11, ]); @@ -104,19 +104,19 @@ class Version2000Date20170707093535 extends SimpleMigrationStep { if (!$schema->hasTable('spreedme_room_participants')) { $table = $schema->createTable('spreedme_room_participants'); - $table->addColumn('userId', Type::STRING, [ + $table->addColumn('userId', Types::STRING, [ 'notnull' => false, 'length' => 255, ]); - $table->addColumn('roomId', Type::INTEGER, [ + $table->addColumn('roomId', Types::INTEGER, [ 'notnull' => true, 'length' => 11, ]); - $table->addColumn('lastPing', Type::INTEGER, [ + $table->addColumn('lastPing', Types::INTEGER, [ 'notnull' => true, 'length' => 11, ]); - $table->addColumn('sessionId', Type::STRING, [ + $table->addColumn('sessionId', Types::STRING, [ 'notnull' => true, 'length' => 255, ]); diff --git a/lib/Migration/Version2001Date20170707115443.php b/lib/Migration/Version2001Date20170707115443.php index 63264fa48..0fc990d21 100644 --- a/lib/Migration/Version2001Date20170707115443.php +++ b/lib/Migration/Version2001Date20170707115443.php @@ -24,8 +24,8 @@ declare(strict_types=1); */ namespace OCA\Talk\Migration; -use Doctrine\DBAL\Platforms\PostgreSqlPlatform; -use Doctrine\DBAL\Types\Type; +use Doctrine\DBAL\Platforms\PostgreSQL94Platform; +use Doctrine\DBAL\Types\Types; use OCA\Talk\Participant; use OCA\Talk\Room; use OCP\DB\ISchemaWrapper; @@ -62,7 +62,7 @@ class Version2001Date20170707115443 extends SimpleMigrationStep { $table = $schema->getTable('spreedme_room_participants'); if (!$table->hasColumn('participantType')) { - $table->addColumn('participantType', Type::SMALLINT, [ + $table->addColumn('participantType', Types::SMALLINT, [ 'notnull' => true, 'length' => 6, 'default' => 0, @@ -126,7 +126,7 @@ class Version2001Date20170707115443 extends SimpleMigrationStep { protected function makeOne2OneParticipantsOwners(array $one2oneRooms): int { $update = $this->db->getQueryBuilder(); - if (!$this->db->getDatabasePlatform() instanceof PostgreSqlPlatform) { + if (!$this->db->getDatabasePlatform() instanceof PostgreSQL94Platform) { $update->update('spreedme_room_participants') ->set('participantType', $update->createNamedParameter(Participant::OWNER)) ->where($update->expr()->in('roomId', $update->createNamedParameter($one2oneRooms, IQueryBuilder::PARAM_INT_ARRAY))); @@ -146,7 +146,7 @@ class Version2001Date20170707115443 extends SimpleMigrationStep { protected function makeGroupParticipantsModerators(array $one2oneRooms): int { $update = $this->db->getQueryBuilder(); - if (!$this->db->getDatabasePlatform() instanceof PostgreSqlPlatform) { + if (!$this->db->getDatabasePlatform() instanceof PostgreSQL94Platform) { $update->update('spreedme_room_participants') ->set('participantType', $update->createNamedParameter(Participant::MODERATOR)) ->where($update->expr()->nonEmptyString('userId')); diff --git a/lib/Migration/Version2001Date20170913104501.php b/lib/Migration/Version2001Date20170913104501.php index dd85e30e0..4762f3403 100644 --- a/lib/Migration/Version2001Date20170913104501.php +++ b/lib/Migration/Version2001Date20170913104501.php @@ -24,7 +24,7 @@ declare(strict_types=1); */ namespace OCA\Talk\Migration; -use Doctrine\DBAL\Types\Type; +use Doctrine\DBAL\Types\Types; use OCP\DB\ISchemaWrapper; use OCP\Migration\SimpleMigrationStep; use OCP\Migration\IOutput; @@ -45,18 +45,18 @@ class Version2001Date20170913104501 extends SimpleMigrationStep { if (!$schema->hasTable('videocalls_signaling')) { $table = $schema->createTable('videocalls_signaling'); - $table->addColumn('sender', Type::STRING, [ + $table->addColumn('sender', Types::STRING, [ 'notnull' => true, 'length' => 255, ]); - $table->addColumn('recipient', Type::STRING, [ + $table->addColumn('recipient', Types::STRING, [ 'notnull' => true, 'length' => 255, ]); - $table->addColumn('message', Type::TEXT, [ + $table->addColumn('message', Types::TEXT, [ 'notnull' => true, ]); - $table->addColumn('timestamp', Type::INTEGER, [ + $table->addColumn('timestamp', Types::INTEGER, [ 'notnull' => true, 'length' => 11, ]); diff --git a/lib/Migration/Version2001Date20170921145301.php b/lib/Migration/Version2001Date20170921145301.php index f366a6040..1d8121108 100644 --- a/lib/Migration/Version2001Date20170921145301.php +++ b/lib/Migration/Version2001Date20170921145301.php @@ -24,7 +24,7 @@ declare(strict_types=1); */ namespace OCA\Talk\Migration; -use Doctrine\DBAL\Types\Type; +use Doctrine\DBAL\Types\Types; use OCP\DB\ISchemaWrapper; use OCP\Migration\SimpleMigrationStep; use OCP\Migration\IOutput; @@ -43,7 +43,7 @@ class Version2001Date20170921145301 extends SimpleMigrationStep { $schema = $schemaClosure(); $table = $schema->getTable('spreedme_rooms'); - $table->addColumn('password', Type::STRING, [ + $table->addColumn('password', Types::STRING, [ 'notnull' => false, 'length' => 255, 'default' => '', diff --git a/lib/Migration/Version2001Date20171009132424.php b/lib/Migration/Version2001Date20171009132424.php index d1f6e7257..0c82cddee 100644 --- a/lib/Migration/Version2001Date20171009132424.php +++ b/lib/Migration/Version2001Date20171009132424.php @@ -24,7 +24,7 @@ declare(strict_types=1); */ namespace OCA\Talk\Migration; -use Doctrine\DBAL\Types\Type; +use Doctrine\DBAL\Types\Types; use OCP\DB\ISchemaWrapper; use OCP\Migration\SimpleMigrationStep; use OCP\Migration\IOutput; @@ -43,10 +43,10 @@ class Version2001Date20171009132424 extends SimpleMigrationStep { $schema = $schemaClosure(); $table = $schema->getTable('spreedme_rooms'); - $table->addColumn('activeSince', Type::DATETIME, [ + $table->addColumn('activeSince', Types::DATETIME_MUTABLE, [ 'notnull' => false, ]); - $table->addColumn('activeGuests', Type::INTEGER, [ + $table->addColumn('activeGuests', Types::INTEGER, [ 'notnull' => true, 'length' => 4, 'default' => 0, diff --git a/lib/Migration/Version2001Date20171026134605.php b/lib/Migration/Version2001Date20171026134605.php index 958cc16ab..370d1c93f 100644 --- a/lib/Migration/Version2001Date20171026134605.php +++ b/lib/Migration/Version2001Date20171026134605.php @@ -26,8 +26,8 @@ namespace OCA\Talk\Migration; use Doctrine\DBAL\Exception\InvalidFieldNameException; use Doctrine\DBAL\Exception\TableNotFoundException; -use Doctrine\DBAL\Platforms\PostgreSqlPlatform; -use Doctrine\DBAL\Types\Type; +use Doctrine\DBAL\Platforms\PostgreSQL94Platform; +use Doctrine\DBAL\Types\Types; use OCP\DB\ISchemaWrapper; use OCP\DB\QueryBuilder\IQueryBuilder; use OCP\IConfig; @@ -67,18 +67,18 @@ class Version2001Date20171026134605 extends SimpleMigrationStep { * if (!$schema->hasTable('talk_signaling')) { * $table = $schema->createTable('talk_signaling'); * - * $table->addColumn('sender', Type::STRING, [ + * $table->addColumn('sender', Types::STRING, [ * 'notnull' => true, * 'length' => 255, * ]); - * $table->addColumn('recipient', Type::STRING, [ + * $table->addColumn('recipient', Types::STRING, [ * 'notnull' => true, * 'length' => 255, * ]); - * $table->addColumn('message', Type::TEXT, [ + * $table->addColumn('message', Types::TEXT, [ * 'notnull' => true, * ]); - * $table->addColumn('timestamp', Type::INTEGER, [ + * $table->addColumn('timestamp', Types::INTEGER, [ * 'notnull' => true, * 'length' => 11, * ]); @@ -90,34 +90,34 @@ class Version2001Date20171026134605 extends SimpleMigrationStep { if (!$schema->hasTable('talk_rooms')) { $table = $schema->createTable('talk_rooms'); - $table->addColumn('id', Type::INTEGER, [ + $table->addColumn('id', Types::INTEGER, [ 'autoincrement' => true, 'notnull' => true, 'length' => 11, ]); - $table->addColumn('name', Type::STRING, [ + $table->addColumn('name', Types::STRING, [ 'notnull' => false, 'length' => 255, 'default' => '', ]); - $table->addColumn('token', Type::STRING, [ + $table->addColumn('token', Types::STRING, [ 'notnull' => false, 'length' => 32, 'default' => '', ]); - $table->addColumn('type', Type::INTEGER, [ + $table->addColumn('type', Types::INTEGER, [ 'notnull' => true, 'length' => 11, ]); - $table->addColumn('password', Type::STRING, [ + $table->addColumn('password', Types::STRING, [ 'notnull' => false, 'length' => 255, 'default' => '', ]); - $table->addColumn('activeSince', Type::DATETIME, [ + $table->addColumn('activeSince', Types::DATETIME_MUTABLE, [ 'notnull' => false, ]); - $table->addColumn('activeGuests', Type::INTEGER, [ + $table->addColumn('activeGuests', Types::INTEGER, [ 'notnull' => true, 'length' => 4, 'default' => 0, @@ -131,23 +131,23 @@ class Version2001Date20171026134605 extends SimpleMigrationStep { if (!$schema->hasTable('talk_participants')) { $table = $schema->createTable('talk_participants'); - $table->addColumn('userId', Type::STRING, [ + $table->addColumn('userId', Types::STRING, [ 'notnull' => false, 'length' => 255, ]); - $table->addColumn('roomId', Type::INTEGER, [ + $table->addColumn('roomId', Types::INTEGER, [ 'notnull' => true, 'length' => 11, ]); - $table->addColumn('lastPing', Type::INTEGER, [ + $table->addColumn('lastPing', Types::INTEGER, [ 'notnull' => true, 'length' => 11, ]); - $table->addColumn('sessionId', Type::STRING, [ + $table->addColumn('sessionId', Types::STRING, [ 'notnull' => true, 'length' => 255, ]); - $table->addColumn('participantType', Type::SMALLINT, [ + $table->addColumn('participantType', Types::SMALLINT, [ 'notnull' => true, 'length' => 6, 'default' => 0, @@ -216,7 +216,7 @@ class Version2001Date20171026134605 extends SimpleMigrationStep { */ protected function copyParticipants(array $roomIdMap): void { $insert = $this->connection->getQueryBuilder(); - if (!$this->connection->getDatabasePlatform() instanceof PostgreSqlPlatform) { + if (!$this->connection->getDatabasePlatform() instanceof PostgreSQL94Platform) { $insert->insert('talk_participants') ->values([ 'userId' => $insert->createParameter('userId'), @@ -252,7 +252,7 @@ class Version2001Date20171026134605 extends SimpleMigrationStep { ->setParameter('lastPing', (int) $row['lastPing'], IQueryBuilder::PARAM_INT) ->setParameter('sessionId', $row['sessionId']) ; - if (!$this->connection->getDatabasePlatform() instanceof PostgreSqlPlatform) { + if (!$this->connection->getDatabasePlatform() instanceof PostgreSQL94Platform) { $insert->setParameter('participantType', (int) $row['participantType'], IQueryBuilder::PARAM_INT); } else { $insert->setParameter('participantType', (int) $row['participanttype'], IQueryBuilder::PARAM_INT); diff --git a/lib/Migration/Version2001Date20171031102049.php b/lib/Migration/Version2001Date20171031102049.php index 067ff2826..34bf3ea54 100644 --- a/lib/Migration/Version2001Date20171031102049.php +++ b/lib/Migration/Version2001Date20171031102049.php @@ -24,7 +24,7 @@ declare(strict_types=1); */ namespace OCA\Talk\Migration; -use Doctrine\DBAL\Types\Type; +use Doctrine\DBAL\Types\Types; use OCP\DB\ISchemaWrapper; use OCP\Migration\SimpleMigrationStep; use OCP\Migration\IOutput; @@ -44,7 +44,7 @@ class Version2001Date20171031102049 extends SimpleMigrationStep { $table = $schema->getTable('talk_participants'); - $table->addColumn('inCall', Type::BOOLEAN, [ + $table->addColumn('inCall', Types::BOOLEAN, [ 'default' => 0, ]); diff --git a/lib/Migration/Version2001Date20180103144447.php b/lib/Migration/Version2001Date20180103144447.php index fc2d6206a..096d1601d 100644 --- a/lib/Migration/Version2001Date20180103144447.php +++ b/lib/Migration/Version2001Date20180103144447.php @@ -24,8 +24,8 @@ declare(strict_types=1); */ namespace OCA\Talk\Migration; -use Doctrine\DBAL\Platforms\PostgreSqlPlatform; -use Doctrine\DBAL\Types\Type; +use Doctrine\DBAL\Platforms\PostgreSQL94Platform; +use Doctrine\DBAL\Types\Types; use OCP\DB\ISchemaWrapper; use OCP\IConfig; use OCP\IDBConnection; @@ -61,10 +61,10 @@ class Version2001Date20180103144447 extends SimpleMigrationStep { $table = $schema->getTable('talk_rooms'); if (!$table->hasColumn('active_since')) { - $table->addColumn('active_since', Type::DATETIME, [ + $table->addColumn('active_since', Types::DATETIME_MUTABLE, [ 'notnull' => false, ]); - $table->addColumn('active_guests', Type::INTEGER, [ + $table->addColumn('active_guests', Types::INTEGER, [ 'notnull' => true, 'length' => 4, 'default' => 0, @@ -75,34 +75,34 @@ class Version2001Date20180103144447 extends SimpleMigrationStep { $table = $schema->getTable('talk_participants'); if (!$table->hasColumn('user_id')) { - $table->addColumn('user_id', Type::STRING, [ + $table->addColumn('user_id', Types::STRING, [ 'notnull' => false, 'length' => 255, ]); - $table->addColumn('room_id', Type::INTEGER, [ + $table->addColumn('room_id', Types::INTEGER, [ 'notnull' => true, 'length' => 11, 'default' => 0, 'unsigned' => true, ]); - $table->addColumn('last_ping', Type::INTEGER, [ + $table->addColumn('last_ping', Types::INTEGER, [ 'notnull' => true, 'length' => 11, 'default' => 0, 'unsigned' => true, ]); - $table->addColumn('session_id', Type::STRING, [ + $table->addColumn('session_id', Types::STRING, [ 'notnull' => true, 'length' => 255, 'default' => '0', ]); - $table->addColumn('participant_type', Type::SMALLINT, [ + $table->addColumn('participant_type', Types::SMALLINT, [ 'notnull' => true, 'length' => 6, 'default' => 0, 'unsigned' => true, ]); - $table->addColumn('in_call', Type::BOOLEAN, [ + $table->addColumn('in_call', Types::BOOLEAN, [ 'default' => 0, ]); } @@ -122,7 +122,7 @@ class Version2001Date20180103144447 extends SimpleMigrationStep { return; } - if (!$this->connection->getDatabasePlatform() instanceof PostgreSqlPlatform) { + if (!$this->connection->getDatabasePlatform() instanceof PostgreSQL94Platform) { $update = $this->connection->getQueryBuilder(); $update->update('talk_rooms') ->set('active_since', 'activeSince') diff --git a/lib/Migration/Version3003Date20180707222130.php b/lib/Migration/Version3003Date20180707222130.php index 187ffe291..95bde82ba 100644 --- a/lib/Migration/Version3003Date20180707222130.php +++ b/lib/Migration/Version3003Date20180707222130.php @@ -24,7 +24,7 @@ declare(strict_types=1); */ namespace OCA\Talk\Migration; -use Doctrine\DBAL\Types\Type; +use Doctrine\DBAL\Types\Types; use OCP\DB\ISchemaWrapper; use OCP\Migration\SimpleMigrationStep; use OCP\Migration\IOutput; @@ -44,7 +44,7 @@ class Version3003Date20180707222130 extends SimpleMigrationStep { $table = $schema->getTable('talk_participants'); if (!$table->hasColumn('favorite')) { - $table->addColumn('favorite', Type::BOOLEAN, [ + $table->addColumn('favorite', Types::BOOLEAN, [ 'default' => 0, ]); } diff --git a/lib/Migration/Version3003Date20180718112436.php b/lib/Migration/Version3003Date20180718112436.php index dacb4481e..73e92fdf3 100644 --- a/lib/Migration/Version3003Date20180718112436.php +++ b/lib/Migration/Version3003Date20180718112436.php @@ -24,7 +24,7 @@ declare(strict_types=1); */ namespace OCA\Talk\Migration; -use Doctrine\DBAL\Types\Type; +use Doctrine\DBAL\Types\Types; use OCP\DB\ISchemaWrapper; use OCP\DB\QueryBuilder\IQueryBuilder; use OCP\IDBConnection; @@ -53,7 +53,7 @@ class Version3003Date20180718112436 extends SimpleMigrationStep { $table = $schema->getTable('talk_rooms'); if (!$table->hasColumn('last_activity')) { - $table->addColumn('last_activity', Type::DATETIME, [ + $table->addColumn('last_activity', Types::DATETIME_MUTABLE, [ 'notnull' => false, ]); diff --git a/lib/Migration/Version3003Date20180718133519.php b/lib/Migration/Version3003Date20180718133519.php index 3a195cc4c..e40272e4f 100644 --- a/lib/Migration/Version3003Date20180718133519.php +++ b/lib/Migration/Version3003Date20180718133519.php @@ -22,7 +22,7 @@ declare(strict_types=1); */ namespace OCA\Talk\Migration; -use Doctrine\DBAL\Types\Type; +use Doctrine\DBAL\Types\Types; use OCP\DB\ISchemaWrapper; use OCP\IDBConnection; use OCP\Migration\SimpleMigrationStep; @@ -51,7 +51,7 @@ class Version3003Date20180718133519 extends SimpleMigrationStep { $table = $schema->getTable('talk_rooms'); if (!$table->hasColumn('last_message')) { - $table->addColumn('last_message', Type::BIGINT, [ + $table->addColumn('last_message', Types::BIGINT, [ 'notnull' => false, 'default' => 0, ]); diff --git a/lib/Migration/Version3003Date20180720162342.php b/lib/Migration/Version3003Date20180720162342.php index d6706a85e..ac10c3ad0 100644 --- a/lib/Migration/Version3003Date20180720162342.php +++ b/lib/Migration/Version3003Date20180720162342.php @@ -24,7 +24,7 @@ declare(strict_types=1); namespace OCA\Talk\Migration; -use Doctrine\DBAL\Types\Type; +use Doctrine\DBAL\Types\Types; use OCP\DB\ISchemaWrapper; use OCP\Migration\SimpleMigrationStep; use OCP\Migration\IOutput; @@ -45,12 +45,12 @@ class Version3003Date20180720162342 extends SimpleMigrationStep { $table = $schema->getTable('talk_rooms'); if (!$table->hasColumn('object_type')) { - $table->addColumn('object_type', Type::STRING, [ + $table->addColumn('object_type', Types::STRING, [ 'notnull' => false, 'length' => 64, 'default' => '', ]); - $table->addColumn('object_id', Type::STRING, [ + $table->addColumn('object_id', Types::STRING, [ 'notnull' => false, 'length' => 64, 'default' => '', diff --git a/lib/Migration/Version3003Date20180722152849.php b/lib/Migration/Version3003Date20180722152849.php index 3bd92746a..c19aa0bcb 100644 --- a/lib/Migration/Version3003Date20180722152849.php +++ b/lib/Migration/Version3003Date20180722152849.php @@ -24,7 +24,7 @@ declare(strict_types=1); */ namespace OCA\Talk\Migration; -use Doctrine\DBAL\Types\Type; +use Doctrine\DBAL\Types\Types; use OCP\DB\ISchemaWrapper; use OCP\Migration\SimpleMigrationStep; use OCP\Migration\IOutput; @@ -43,7 +43,7 @@ class Version3003Date20180722152849 extends SimpleMigrationStep { $schema = $schemaClosure(); $table = $schema->getTable('talk_participants'); - $table->addColumn('in_call', Type::INTEGER, [ + $table->addColumn('in_call', Types::INTEGER, [ 'default' => 0, ]); diff --git a/lib/Migration/Version3003Date20180730080327.php b/lib/Migration/Version3003Date20180730080327.php index 3860d631f..ba8a16181 100644 --- a/lib/Migration/Version3003Date20180730080327.php +++ b/lib/Migration/Version3003Date20180730080327.php @@ -24,7 +24,7 @@ declare(strict_types=1); */ namespace OCA\Talk\Migration; -use Doctrine\DBAL\Types\Type; +use Doctrine\DBAL\Types\Types; use OCP\DB\ISchemaWrapper; use OCP\Migration\SimpleMigrationStep; use OCP\Migration\IOutput; @@ -44,7 +44,7 @@ class Version3003Date20180730080327 extends SimpleMigrationStep { $table = $schema->getTable('talk_participants'); if (!$table->hasColumn('last_mention')) { - $table->addColumn('last_mention', Type::DATETIME, [ + $table->addColumn('last_mention', Types::DATETIME_MUTABLE, [ 'notnull' => false, ]); } diff --git a/lib/Migration/Version4099Date20181001123058.php b/lib/Migration/Version4099Date20181001123058.php index 4aaac033d..a679514dc 100644 --- a/lib/Migration/Version4099Date20181001123058.php +++ b/lib/Migration/Version4099Date20181001123058.php @@ -23,7 +23,7 @@ declare(strict_types=1); namespace OCA\Talk\Migration; use Closure; -use Doctrine\DBAL\Types\Type; +use Doctrine\DBAL\Types\Types; use OCA\Talk\Participant; use OCP\DB\ISchemaWrapper; use OCP\Migration\SimpleMigrationStep; @@ -44,7 +44,7 @@ class Version4099Date20181001123058 extends SimpleMigrationStep { $table = $schema->getTable('talk_participants'); if (!$table->hasColumn('notification_level')) { - $table->addColumn('notification_level', Type::INTEGER, [ + $table->addColumn('notification_level', Types::INTEGER, [ 'default' => Participant::NOTIFY_DEFAULT, 'notnull' => false, ]); diff --git a/lib/Migration/Version5099Date20190121102337.php b/lib/Migration/Version5099Date20190121102337.php index 50b4055ec..c8e9f1029 100644 --- a/lib/Migration/Version5099Date20190121102337.php +++ b/lib/Migration/Version5099Date20190121102337.php @@ -24,7 +24,7 @@ declare(strict_types=1); namespace OCA\Talk\Migration; use Closure; -use Doctrine\DBAL\Types\Type; +use Doctrine\DBAL\Types\Types; use OCP\DB\ISchemaWrapper; use OCP\Migration\SimpleMigrationStep; use OCP\Migration\IOutput; @@ -43,33 +43,33 @@ class Version5099Date20190121102337 extends SimpleMigrationStep { if (!$schema->hasTable('talk_commands')) { $table = $schema->createTable('talk_commands'); - $table->addColumn('id', Type::INTEGER, [ + $table->addColumn('id', Types::INTEGER, [ 'autoincrement' => true, 'notnull' => true, 'length' => 20, ]); - $table->addColumn('app', Type::STRING, [ + $table->addColumn('app', Types::STRING, [ 'notnull' => false, 'length' => 64, 'default' => '', ]); - $table->addColumn('name', Type::STRING, [ + $table->addColumn('name', Types::STRING, [ 'notnull' => true, 'length' => 64, ]); - $table->addColumn('command', Type::STRING, [ + $table->addColumn('command', Types::STRING, [ 'notnull' => true, 'length' => 64, ]); - $table->addColumn('script', Type::TEXT, [ + $table->addColumn('script', Types::TEXT, [ 'notnull' => true, ]); - $table->addColumn('response', Type::INTEGER, [ + $table->addColumn('response', Types::INTEGER, [ 'notnull' => true, 'length' => 6, 'default' => 1, ]); - $table->addColumn('enabled', Type::INTEGER, [ + $table->addColumn('enabled', Types::INTEGER, [ 'notnull' => true, 'length' => 6, 'default' => 1, diff --git a/lib/Migration/Version5099Date20190319134820.php b/lib/Migration/Version5099Date20190319134820.php index 3501d7977..a3a7a61f1 100644 --- a/lib/Migration/Version5099Date20190319134820.php +++ b/lib/Migration/Version5099Date20190319134820.php @@ -24,7 +24,7 @@ declare(strict_types=1); namespace OCA\Talk\Migration; use Closure; -use Doctrine\DBAL\Types\Type; +use Doctrine\DBAL\Types\Types; use OCP\DB\ISchemaWrapper; use OCP\Migration\SimpleMigrationStep; use OCP\Migration\IOutput; @@ -45,7 +45,7 @@ class Version5099Date20190319134820 extends SimpleMigrationStep { $table = $schema->getTable('talk_rooms'); if (!$table->hasColumn('read_only')) { - $table->addColumn('read_only', Type::INTEGER, [ + $table->addColumn('read_only', Types::INTEGER, [ 'notnull' => true, 'length' => 6, 'default' => 0, diff --git a/lib/Migration/Version6099Date20190627172429.php b/lib/Migration/Version6099Date20190627172429.php index f505c69ff..bcb3279e5 100644 --- a/lib/Migration/Version6099Date20190627172429.php +++ b/lib/Migration/Version6099Date20190627172429.php @@ -24,7 +24,7 @@ declare(strict_types=1); namespace OCA\Talk\Migration; use Closure; -use Doctrine\DBAL\Types\Type; +use Doctrine\DBAL\Types\Types; use OCP\DB\ISchemaWrapper; use OCP\Migration\SimpleMigrationStep; use OCP\Migration\IOutput; @@ -45,12 +45,12 @@ class Version6099Date20190627172429 extends SimpleMigrationStep { $table = $schema->getTable('talk_rooms'); if (!$table->hasColumn('lobby_state')) { - $table->addColumn('lobby_state', Type::INTEGER, [ + $table->addColumn('lobby_state', Types::INTEGER, [ 'notnull' => true, 'length' => 6, 'default' => 0, ]); - $table->addColumn('lobby_timer', Type::DATETIME, [ + $table->addColumn('lobby_timer', Types::DATETIME_MUTABLE, [ 'notnull' => false, ]); } diff --git a/lib/Migration/Version7000Date20190717141457.php b/lib/Migration/Version7000Date20190717141457.php index 2f415264f..1b7bad6f5 100644 --- a/lib/Migration/Version7000Date20190717141457.php +++ b/lib/Migration/Version7000Date20190717141457.php @@ -23,7 +23,7 @@ declare(strict_types=1); namespace OCA\Talk\Migration; use Closure; -use Doctrine\DBAL\Types\Type; +use Doctrine\DBAL\Types\Types; use OCP\DB\ISchemaWrapper; use OCP\Migration\SimpleMigrationStep; use OCP\Migration\IOutput; @@ -42,7 +42,7 @@ class Version7000Date20190717141457 extends SimpleMigrationStep { $table = $schema->getTable('talk_participants'); if (!$table->hasColumn('last_joined_call')) { - $table->addColumn('last_joined_call', Type::DATETIME, [ + $table->addColumn('last_joined_call', Types::DATETIME_MUTABLE, [ 'notnull' => false, ]); } diff --git a/lib/Migration/Version7000Date20190724121136.php b/lib/Migration/Version7000Date20190724121136.php index beb972b79..9ad66ec99 100644 --- a/lib/Migration/Version7000Date20190724121136.php +++ b/lib/Migration/Version7000Date20190724121136.php @@ -25,7 +25,7 @@ declare(strict_types=1); namespace OCA\Talk\Migration; use Doctrine\DBAL\Schema\SchemaException; -use Doctrine\DBAL\Types\Type; +use Doctrine\DBAL\Types\Types; use OCP\DB\ISchemaWrapper; use OCP\DB\QueryBuilder\IQueryBuilder; use OCP\IDBConnection; @@ -55,11 +55,11 @@ class Version7000Date20190724121136 extends SimpleMigrationStep { $table = $schema->getTable('talk_participants'); if (!$table->hasColumn('last_read_message')) { - $table->addColumn('last_read_message', Type::BIGINT, [ + $table->addColumn('last_read_message', Types::BIGINT, [ 'default' => 0, 'notnull' => false, ]); - $table->addColumn('last_mention_message', Type::BIGINT, [ + $table->addColumn('last_mention_message', Types::BIGINT, [ 'default' => 0, 'notnull' => false, ]); diff --git a/lib/Migration/Version8000Date20200407115318.php b/lib/Migration/Version8000Date20200407115318.php index 59fa05e44..18618926e 100644 --- a/lib/Migration/Version8000Date20200407115318.php +++ b/lib/Migration/Version8000Date20200407115318.php @@ -26,7 +26,7 @@ declare(strict_types=1); namespace OCA\Talk\Migration; use Closure; -use Doctrine\DBAL\Types\Type; +use Doctrine\DBAL\Types\Types; use OCP\DB\ISchemaWrapper; use OCP\Migration\IOutput; use OCP\Migration\SimpleMigrationStep; @@ -44,7 +44,7 @@ class Version8000Date20200407115318 extends SimpleMigrationStep { $table = $schema->getTable('talk_rooms'); if (!$table->hasColumn('assigned_hpb')) { - $table->addColumn('assigned_hpb', Type::INTEGER, [ + $table->addColumn('assigned_hpb', Types::INTEGER, [ 'notnull' => false, 'length' => 4, 'unsigned' => false, @@ -17,18 +17,23 @@ <issueHandlers> <UndefinedClass> <errorLevel type="suppress"> + <referencedClass name="Doctrine\DBAL\Exception" /> + <referencedClass name="Doctrine\DBAL\Exception\InvalidFieldNameException" /> + <referencedClass name="Doctrine\DBAL\Exception\TableNotFoundException" /> <referencedClass name="Doctrine\DBAL\Exception\UniqueConstraintViolationException" /> - <referencedClass name="Doctrine\DBAL\Types\Type" /> + <referencedClass name="Doctrine\DBAL\Platforms\PostgreSQL94Platform" /> <referencedClass name="Doctrine\DBAL\Types\Types" /> <referencedClass name="OC" /> </errorLevel> </UndefinedClass> <UndefinedDocblockClass> <errorLevel type="suppress"> + <referencedClass name="Doctrine\DBAL\Driver\Statement" /> + <referencedClass name="Doctrine\DBAL\Exception" /> <referencedClass name="Doctrine\DBAL\Exception\UniqueConstraintViolationException" /> + <referencedClass name="Doctrine\DBAL\Platforms\AbstractPlatform" /> <referencedClass name="Doctrine\DBAL\Schema\Schema" /> <referencedClass name="Doctrine\DBAL\Schema\SchemaException" /> - <referencedClass name="Doctrine\DBAL\Driver\Statement" /> <referencedClass name="Doctrine\DBAL\Schema\Table" /> </errorLevel> </UndefinedDocblockClass> diff --git a/src/assets/variables.scss b/src/assets/variables.scss index cd0a3aa4c..ca33b524b 100644 --- a/src/assets/variables.scss +++ b/src/assets/variables.scss @@ -66,7 +66,7 @@ $message-max-width: 680px; $message-utils-width: 100px; //message form max height -$message-form-max-height: 150px; +$message-form-max-height: 180px; $top-bar-height: 60px; diff --git a/src/components/CallView/CallView.vue b/src/components/CallView/CallView.vue index a75928805..6de1cea6a 100644 --- a/src/components/CallView/CallView.vue +++ b/src/components/CallView/CallView.vue @@ -409,7 +409,8 @@ export default { this.raisedHandUnwatchers[removedModelId]() // Not reactive, but not a problem delete this.raisedHandUnwatchers[removedModelId] - this.$store.dispatch('setParticipantHandRaised', { peerId: removedModelId, raised: false }) + // FIXME: when using HPB sessionId doesn't match + this.$store.dispatch('setParticipantHandRaised', { sessionId: removedModelId, raisedHand: { state: false } }) const index = this.speakers.findIndex(speaker => speaker.id === removedModelId) this.speakers.splice(index, 1) @@ -488,17 +489,21 @@ export default { const nickName = callParticipantModel.attributes.name || callParticipantModel.attributes.userId // sometimes the nick name is not available yet... if (nickName) { - if (raisedHand) { - showMessage(t('spreed', 'Participant {nickName} raised their hand.', { nickName: nickName })) + if (raisedHand?.state) { + showMessage(t('spreed', '{nickName} raised their hand.', { nickName: nickName })) } } else { - if (raisedHand) { + if (raisedHand?.state) { showMessage(t('spreed', 'A participant raised their hand.')) } } // update in callViewStore - this.$store.dispatch('setParticipantHandRaised', { peerId: callParticipantModel.attributes.peerId, raised: raisedHand }) + this.$store.dispatch('setParticipantHandRaised', { + // FIXME: this is a bit hacky to fix the HPB session mismatch + sessionId: raisedHand?.sessionId ? raisedHand?.sessionId : callParticipantModel.attributes.peerId, + raisedHand: raisedHand, + }) }, _setScreenAvailable(id, screen) { diff --git a/src/components/CallView/shared/LocalMediaControls.vue b/src/components/CallView/shared/LocalMediaControls.vue index 28c5bc748..ce115030f 100644 --- a/src/components/CallView/shared/LocalMediaControls.vue +++ b/src/components/CallView/shared/LocalMediaControls.vue @@ -84,8 +84,8 @@ v-shortkey.once="['r']" v-tooltip="t('spreed', 'Lower hand')" class="lower-hand" - :class="model.attributes.raisedHand ? '' : 'hidden-visually'" - :tabindex="model.attributes.raisedHand ? 0 : -1" + :class="model.attributes.raisedHand.state ? '' : 'hidden-visually'" + :tabindex="model.attributes.raisedHand.state ? 0 : -1" :aria-label="t('spreed', 'Lower hand')" @shortkey="toggleHandRaised" @click.stop="toggleHandRaised"> @@ -218,13 +218,12 @@ export default { qualityWarningInGracePeriodTimeout: null, audioEnabledBeforeSpacebarKeydown: undefined, spacebarKeyDown: false, - raisingHandNotification: null, } }, computed: { raiseHandButtonLabel() { - if (!this.model.attributes.raisedHand) { + if (!this.model.attributes.raisedHand.state) { return t('spreed', 'Raise hand') } return t('spreed', 'Lower hand') @@ -578,13 +577,16 @@ export default { }, toggleHandRaised() { - const raisedHand = !this.model.attributes.raisedHand - if (this.raisingHandNotification) { - this.raisingHandNotification.hideToast() - this.raisingHandNotification = null - } - this.model.toggleHandRaised(raisedHand) - this.$store.dispatch('setParticipantHandRaised', { peerId: this.localCallParticipantModel.attributes.peerId, raised: raisedHand }) + const state = !this.model.attributes.raisedHand?.state + this.model.toggleHandRaised(state) + this.$store.dispatch( + 'setParticipantHandRaised', + { + // FIXME: when using HPB these don't match + sessionId: this.localCallParticipantModel.attributes.peerId, + raisedHand: this.model.attributes.raisedHand, + } + ) }, shareScreen() { diff --git a/src/components/CallView/shared/VideoBottomBar.vue b/src/components/CallView/shared/VideoBottomBar.vue index c351506f7..a8daaca00 100644 --- a/src/components/CallView/shared/VideoBottomBar.vue +++ b/src/components/CallView/shared/VideoBottomBar.vue @@ -26,7 +26,7 @@ :class="{'bottom-bar--video-on' : hasShadow, 'bottom-bar--big': isBig }"> <transition name="fade"> <div - v-if="!connectionStateFailedNoRestart && model.attributes.raisedHand" + v-if="!connectionStateFailedNoRestart && model.attributes.raisedHand.state" class="bottom-bar__statusIndicator"> <Hand class="handIndicator" diff --git a/src/components/ChatView.vue b/src/components/ChatView.vue index 299bc7916..9668e6db8 100644 --- a/src/components/ChatView.vue +++ b/src/components/ChatView.vue @@ -45,9 +45,12 @@ <MessagesList role="region" :aria-label="t('spreed', 'Conversation messages')" - :token="token" /> + :is-chat-scrolled-to-bottom="isChatScrolledToBottom" + :token="token" + @setChatScrolledToBottom="setScrollStatus" /> <NewMessageForm role="region" + :is-chat-scrolled-to-bottom="isChatScrolledToBottom" :aria-label="t('spreed', 'Post message')" /> </div> </template> @@ -77,6 +80,12 @@ export default { data: function() { return { isDraggingOver: false, + /** + * Initialised as true as when we open a new conversation we're scrolling to + * the bottom for now. In the future when we'll open the conversation close + * to the scroll position of the last read message, we will need to change this. + */ + isChatScrolledToBottom: true, } }, @@ -128,6 +137,10 @@ export default { // Uploads and shares the files processFiles(files, this.token, uploadId) }, + + setScrollStatus(payload) { + this.isChatScrolledToBottom = payload + }, }, } @@ -152,7 +165,7 @@ export default { background: var(--color-primary-light); z-index: 11; display: flex; - box-shadow: 0px 0px 36px var(--color-box-shadow); + box-shadow: 0 0 36px var(--color-box-shadow); border-radius: var(--border-radius); opacity: 90%; } diff --git a/src/components/ConversationSettings/ConversationSettingsDialog.vue b/src/components/ConversationSettings/ConversationSettingsDialog.vue index 6e55e61af..ab479b671 100644 --- a/src/components/ConversationSettings/ConversationSettingsDialog.vue +++ b/src/components/ConversationSettings/ConversationSettingsDialog.vue @@ -136,7 +136,7 @@ export default { margin-top: 25px; &:first-child { - margin-top: 0px; + margin-top: 0; } } </style> diff --git a/src/components/LeftSidebar/NewGroupConversation/NewGroupConversation.vue b/src/components/LeftSidebar/NewGroupConversation/NewGroupConversation.vue index 3135f79f1..4b474b8f4 100644 --- a/src/components/LeftSidebar/NewGroupConversation/NewGroupConversation.vue +++ b/src/components/LeftSidebar/NewGroupConversation/NewGroupConversation.vue @@ -381,7 +381,7 @@ it back */ display: flex; flex: 0 0 40px; height: 50px; - box-shadow: 0px -10px 5px var(--color-main-background); + box-shadow: 0 -10px 5px var(--color-main-background); z-index: 1; // Same as above width: $dialog-width - $dialog-margin * 2; @@ -407,7 +407,7 @@ it back */ margin-top: 25px; &:first-child { - margin-top: 0px; + margin-top: 0; } } diff --git a/src/components/MessagesList/MessagesList.vue b/src/components/MessagesList/MessagesList.vue index fe98af035..6d316f9fb 100644 --- a/src/components/MessagesList/MessagesList.vue +++ b/src/components/MessagesList/MessagesList.vue @@ -52,7 +52,7 @@ get the messagesList array and loop through the list to generate the messages. :count="15" /> </template> <transition name="fade"> - <button v-show="!isScrolledToBottom" + <button v-show="!isChatScrolledToBottom" :aria-label="scrollToBottomAriaLabel" class="scroll-to-bottom" @click="smoothScrollToBottom"> @@ -98,6 +98,11 @@ export default { type: String, required: true, }, + + isChatScrolledToBottom: { + type: Boolean, + required: true, + }, }, data: function() { @@ -115,12 +120,6 @@ export default { */ cancelFetchMessages: () => {}, /** - * Initialised as true as when we open a new conversation we're scrolling to - * the bottom for now. In the future when we'll open the conversation close - * to the scroll position of the last red message, we wil need to change this. - */ - isScrolledToBottom: true, - /** * When scrolling to the top of the div .scroller we start loading previous * messages. This boolean allows us to show/hide the loader. */ @@ -187,7 +186,7 @@ export default { * @returns {boolean} */ isSticky() { - return this.isScrolledToBottom + return this.isChatScrolledToBottom }, /** @@ -544,7 +543,7 @@ export default { debounceHandleScroll: debounce(function() { this.handleScroll() - }, 200), + }, 50), /** * When the div is scrolled, this method checks if it's been scrolled to the top * or to the bottom of the list bottom. @@ -556,7 +555,7 @@ export default { const elementHeight = this.scroller.clientHeight const tolerance = 10 if (scrollOffset < elementHeight + tolerance && scrollOffset > elementHeight - tolerance) { - this.isScrolledToBottom = true + this.setChatScrolledToBottom(true) this.displayMessagesLoader = false this.previousScrollTopValue = scrollTop } else if (scrollHeight > elementHeight && scrollTop < 800 && scrollTop <= this.previousScrollTopValue) { @@ -567,7 +566,7 @@ export default { this.displayMessagesLoader = false this.previousScrollTopValue = scrollTop } else { - this.isScrolledToBottom = false + this.setChatScrolledToBottom(false) this.displayMessagesLoader = false this.previousScrollTopValue = scrollTop } @@ -578,9 +577,9 @@ export default { * @param {boolean} options.force Set to true, if the chat should be scrolled to the bottom even when it was not before */ handleScrollChatToBottomEvent(options) { - if ((options && options.force) || this.isScrolledToBottom) { + if ((options && options.force) || this.isChatScrolledToBottom) { this.scrollToBottom() - this.isScrolledToBottom = true + this.setChatScrolledToBottom(true) } }, @@ -593,7 +592,7 @@ export default { top: this.scroller.scrollHeight, behavior: 'smooth', }) - this.isScrolledToBottom = true + this.setChatScrolledToBottom(true) }) }, /** @@ -602,7 +601,7 @@ export default { scrollToBottom() { this.$nextTick(function() { this.scroller.scrollTop = this.scroller.scrollHeight - this.isScrolledToBottom = true + this.setChatScrolledToBottom(true) }) }, @@ -688,6 +687,10 @@ export default { } } }, + + setChatScrolledToBottom(boolean) { + this.$emit('setChatScrolledToBottom', boolean) + }, }, } </script> diff --git a/src/components/NewMessageForm/AdvancedInput/AdvancedInput.vue b/src/components/NewMessageForm/AdvancedInput/AdvancedInput.vue index a03d3dbe0..8a9b9aac5 100644 --- a/src/components/NewMessageForm/AdvancedInput/AdvancedInput.vue +++ b/src/components/NewMessageForm/AdvancedInput/AdvancedInput.vue @@ -22,6 +22,7 @@ <template> <At ref="at" v-model="text" + class="atwho-wrapper" name-key="label" :members="autoCompleteMentionCandidates" :filter-match="atFilter" @@ -389,6 +390,10 @@ export default { <style lang="scss" scoped> @import '../../../assets/variables'; +.atwho-wrapper { + display: flex; +} + .new-message-form__advancedinput { overflow: visible; width: 100%; @@ -397,12 +402,21 @@ export default { margin-left: 6px !important; word-break: break-word; white-space: pre-wrap; + padding: 8px 16px; } // Support for the placeholder text in the div contenteditable div[contenteditable] { font-size: $chat-font-size; line-height: $chat-line-height; + min-height: $clickable-area; + border-radius: $clickable-area / 2; + border: 1px solid var(--color-border-dark); + &:hover, + &:focus, + &:active { + border: 1px solid var(--color-primary-element) !important; + } } // Support for the placeholder text in the div contenteditable diff --git a/src/components/NewMessageForm/NewMessageForm.vue b/src/components/NewMessageForm/NewMessageForm.vue index d7ee2cc21..d61141bd3 100644 --- a/src/components/NewMessageForm/NewMessageForm.vue +++ b/src/components/NewMessageForm/NewMessageForm.vue @@ -21,7 +21,8 @@ <template> <div - class="wrapper"> + class="wrapper" + :class="{'wrapper--chatScrolledToBottom': isChatScrolledToBottom}"> <!--native file picker, hidden --> <input id="file-upload" ref="fileUploadInput" @@ -76,11 +77,12 @@ </EmojiPicker> </div> <div class="new-message-form__input"> - <Quote - v-if="messageToBeReplied" - :is-new-message-form-quote="true" - :parent-id="messageToBeReplied.id" - v-bind="messageToBeReplied" /> + <div v-if="messageToBeReplied" class="new-message-form__quote"> + <Quote + :is-new-message-form-quote="true" + v-bind="messageToBeReplied" /> + </div> + <AdvancedInput ref="advancedInput" v-model="text" @@ -96,8 +98,12 @@ :disabled="isReadOnly" type="submit" :aria-label="t('spreed', 'Send message')" - class="new-message-form__button submit icon-confirm-fade" - @click.prevent="handleSubmit" /> + class="new-message-form__button submit" + @click.prevent="handleSubmit"> + <Send + :size="20" + decorative /> + </button> </form> </div> </div> @@ -117,6 +123,7 @@ import { processFiles } from '../../utils/fileUpload' import { CONVERSATION } from '../../constants' import createTemporaryMessage from '../../utils/temporaryMessage' import EmoticonOutline from 'vue-material-design-icons/EmoticonOutline' +import Send from 'vue-material-design-icons/Send' const picker = getFilePickerBuilder(t('spreed', 'File to share')) .setMultiSelect(false) @@ -134,6 +141,14 @@ export default { ActionButton, EmojiPicker, EmoticonOutline, + Send, + }, + + props: { + isChatScrolledToBottom: { + type: Boolean, + required: true, + }, }, data: function() { return { @@ -397,32 +412,45 @@ export default { .wrapper { position: sticky; bottom: 0; - background-color: var(--color-main-background); display: flex; justify-content: center; - border-top: 1px solid var(--color-border-dark); - padding: 4px 0; + padding: 12px 0; + border-top: 1px solid var(--color-border); + &--chatScrolledToBottom { + border-top: none; + } } .new-message { - max-width: $messages-list-max-width; + max-width: $messages-list-max-width + 145px; flex: 1 1 100%; &-form { display: flex; - align-items: center; + align-items: flex-end; &__input { flex-grow: 1; max-height: $message-form-max-height; overflow-y: auto; overflow-x: hidden; - max-width: $message-max-width; + max-width: 638px; } &__button { width: 44px; height: 44px; - margin-top: auto; background-color: transparent; border: none; + margin: 0 4px; + color: var(--color-main-text); + opacity: .9; + display: flex; + justify-content: center; + align-items: center; + } + &__quote { + margin: 0 16px 12px 24px; + background-color: var(--color-background-hover); + padding: 8px; + border-radius: var(--border-radius-large); } // put a grey round background when popover is opened diff --git a/src/components/RightSidebar/Description/Description.vue b/src/components/RightSidebar/Description/Description.vue index 82e6b471c..400add171 100644 --- a/src/components/RightSidebar/Description/Description.vue +++ b/src/components/RightSidebar/Description/Description.vue @@ -379,7 +379,7 @@ export default { border-radius: var(--border-radius-pill); position: absolute; top: 0; - right: 0px; + right: 0; display: flex; align-items: center; justify-content: center; diff --git a/src/components/RightSidebar/Participants/CurrentParticipants/CurrentParticipants.vue b/src/components/RightSidebar/Participants/CurrentParticipants/CurrentParticipants.vue index d632f9e5e..97797426a 100644 --- a/src/components/RightSidebar/Participants/CurrentParticipants/CurrentParticipants.vue +++ b/src/components/RightSidebar/Participants/CurrentParticipants/CurrentParticipants.vue @@ -114,6 +114,7 @@ export default { * Sort two participants by: * - online status * - in call + * - who raised hand first * - type (moderators before normal participants) * - user status (dnd at the end) * - display name @@ -151,6 +152,22 @@ export default { return p1inCall ? -1 : 1 } + const p1HandRaised = this.$store.getters.getParticipantRaisedHand(session1) + const p2HandRaised = this.$store.getters.getParticipantRaisedHand(session2) + if (p1HandRaised.state !== p2HandRaised.state) { + return p1HandRaised.state ? -1 : 1 + } + // both had raised hands, then pick whoever raised hand first + if (p1HandRaised) { + // use MAX_VALUE if not defined to avoid zeroes making it look like + // one raised their hands at the birth of time... + const t1 = p1HandRaised.timestamp || Number.MAX_VALUE + const t2 = p2HandRaised.timestamp || Number.MAX_VALUE + if (t1 !== t2) { + return t1 - t2 + } + } + const moderatorTypes = [PARTICIPANT.TYPE.OWNER, PARTICIPANT.TYPE.MODERATOR, PARTICIPANT.TYPE.GUEST_MODERATOR] const moderator1 = moderatorTypes.indexOf(participant1.participantType) !== -1 const moderator2 = moderatorTypes.indexOf(participant2.participantType) !== -1 diff --git a/src/components/RightSidebar/Participants/ParticipantsList/Participant/Participant.vue b/src/components/RightSidebar/Participants/ParticipantsList/Participant/Participant.vue index fe3e75343..6cd1d03b5 100644 --- a/src/components/RightSidebar/Participants/ParticipantsList/Participant/Participant.vue +++ b/src/components/RightSidebar/Participants/ParticipantsList/Participant/Participant.vue @@ -277,18 +277,19 @@ export default { label() { return this.participant.label }, - raisedHand() { + isHandRaised() { if (this.isSearched || this.participant.inCall === PARTICIPANT.CALL_FLAG_DISCONNECTED) { return false } - return this.$store.getters.isParticipantRaisedHand(this.participant.sessionId) + const state = this.$store.getters.isParticipantRaisedHand(this.participant.sessionId) + return state }, callIcon() { if (this.isSearched || this.participant.inCall === PARTICIPANT.CALL_FLAG.DISCONNECTED) { return '' } - if (this.raisedHand) { + if (this.isHandRaised) { return 'hand' } const withVideo = this.participant.inCall & PARTICIPANT.CALL_FLAG.WITH_VIDEO diff --git a/src/store/callViewStore.js b/src/store/callViewStore.js index 76855de8c..5f67569bd 100644 --- a/src/store/callViewStore.js +++ b/src/store/callViewStore.js @@ -53,7 +53,12 @@ const getters = { getBlurRadius: (state) => (width, height) => { return (width * height * state.videoBackgroundBlur) / 1000 }, - isParticipantRaisedHand: (state) => (peerId) => !!state.participantRaisedHands[peerId], + getParticipantRaisedHand: (state) => (sessionId) => { + return state.participantRaisedHands[sessionId] || { state: false, timestamp: null } + }, + isParticipantRaisedHand: (state) => (sessionId) => { + return state.participantRaisedHands[sessionId]?.state + }, } const mutations = { @@ -76,11 +81,14 @@ const mutations = { presentationStarted(state, value) { state.presentationStarted = value }, - setParticipantHandRaised(state, { peerId, raised }) { - if (raised) { - Vue.set(state.participantRaisedHands, peerId, raised) + setParticipantHandRaised(state, { sessionId, raisedHand }) { + if (!sessionId) { + throw new Error('Missing or empty sessionId argument in call to setParticipantHandRaised') + } + if (raisedHand && raisedHand.state) { + Vue.set(state.participantRaisedHands, sessionId, raisedHand) } else { - Vue.delete(state.participantRaisedHands, peerId) + Vue.delete(state.participantRaisedHands, sessionId) } }, clearParticipantHandRaised(state) { @@ -140,8 +148,8 @@ const actions = { } }, - setParticipantHandRaised(context, { peerId, raised }) { - context.commit('setParticipantHandRaised', { peerId, raised }) + setParticipantHandRaised(context, { sessionId, raisedHand }) { + context.commit('setParticipantHandRaised', { sessionId, raisedHand }) }, /** diff --git a/src/utils/webrtc/models/CallParticipantModel.js b/src/utils/webrtc/models/CallParticipantModel.js index 4cc7f6706..159bc5aa3 100644 --- a/src/utils/webrtc/models/CallParticipantModel.js +++ b/src/utils/webrtc/models/CallParticipantModel.js @@ -53,7 +53,10 @@ export default function CallParticipantModel(options) { speaking: undefined, videoAvailable: undefined, screen: null, - raisedHand: false, + raisedHand: { + state: false, + timestamp: null, + }, } this._handlers = [] diff --git a/src/utils/webrtc/models/LocalMediaModel.js b/src/utils/webrtc/models/LocalMediaModel.js index 4c83c2dbd..4ddb185d6 100644 --- a/src/utils/webrtc/models/LocalMediaModel.js +++ b/src/utils/webrtc/models/LocalMediaModel.js @@ -228,7 +228,7 @@ LocalMediaModel.prototype = { this.set('videoAvailable', false) } - this.set('raisedHand', false) + this.set('raisedHand', { state: false, timestamp: Date.now() }) }, _handleLocalStreamChanged: function(localStream) { @@ -441,11 +441,17 @@ LocalMediaModel.prototype = { throw new Error('WebRtc not initialized yet') } - this._webRtc.sendToAll('raiseHand', { raised: raised }) + const raisedHand = { + state: raised, + timestamp: Date.now(), + sessionId: this._webRtc.connection?.nextcloudSessionId, + } + + this._webRtc.sendToAll('raiseHand', raisedHand) // Set state locally too, as even when sending to all the sender will not // receive the message. - this.set('raisedHand', raised) + this.set('raisedHand', raisedHand) }, } diff --git a/src/utils/webrtc/simplewebrtc/peer.js b/src/utils/webrtc/simplewebrtc/peer.js index a6cc32a6c..6790c279a 100644 --- a/src/utils/webrtc/simplewebrtc/peer.js +++ b/src/utils/webrtc/simplewebrtc/peer.js @@ -256,7 +256,7 @@ Peer.prototype.handleMessage = function(message) { this.parent.emit('unshareScreen', { id: message.from }) this.end() } else if (message.type === 'raiseHand') { - this.parent.emit('raisedHand', { id: message.from, raised: message.payload.raised }) + this.parent.emit('raisedHand', { id: message.from, raised: message.payload }) } } diff --git a/src/utils/webrtc/webrtc.js b/src/utils/webrtc/webrtc.js index 39a10a17e..52c117bcd 100644 --- a/src/utils/webrtc/webrtc.js +++ b/src/utils/webrtc/webrtc.js @@ -409,7 +409,10 @@ export default function initWebRTC(signaling, _callParticipantCollection, _local if (callParticipantModel) { callParticipantModel.set('speaking', (event.flags & PARTICIPANT.SIP_FLAG.SPEAKING) > 0) callParticipantModel.set('audioAvailable', (event.flags & PARTICIPANT.SIP_FLAG.MUTE_MICROPHONE) === 0) - callParticipantModel.set('raisedHand', (event.flags & PARTICIPANT.SIP_FLAG.RAISE_HAND) === 0) + callParticipantModel.set('raisedHand', { + state: (event.flags & PARTICIPANT.SIP_FLAG.RAISE_HAND) === 0, + timestamp: Date.now(), + }) } }) signaling.on('usersInRoom', function(users) { diff --git a/tests/psalm-baseline.xml b/tests/psalm-baseline.xml index 3ed9828e5..d072bd8fe 100644 --- a/tests/psalm-baseline.xml +++ b/tests/psalm-baseline.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<files psalm-version="4.1.1@16bfbd9224698bd738c665f33039fade2a1a3977"> +<files psalm-version="4.3.2@57b53ff26237074fdf5cbcb034f7da5172be4524"> <file src="lib/AppInfo/Application.php"> <UndefinedClass occurrences="2"> <code>BeforeTemplateRenderedEvent</code> @@ -173,11 +173,6 @@ <code>ShareNotFound</code> </MissingDependency> </file> - <file src="lib/Controller/GuestController.php"> - <UndefinedClass occurrences="1"> - <code>DBALException</code> - </UndefinedClass> - </file> <file src="lib/Controller/PageController.php"> <MissingDependency occurrences="2"> <code>IRootFolder</code> @@ -244,13 +239,8 @@ <file src="lib/Flow/Operation.php"> <InvalidArgument occurrences="1"/> </file> - <file src="lib/GuestManager.php"> - <UndefinedDocblockClass occurrences="1"> - <code>\Doctrine\DBAL\DBALException</code> - </UndefinedDocblockClass> - </file> <file src="lib/Manager.php"> - <InvalidArgument occurrences="12"/> + <InvalidArgument occurrences="10"/> </file> <file src="lib/MatterbridgeManager.php"> <UndefinedClass occurrences="3"> @@ -269,33 +259,6 @@ <InvalidArrayAccess occurrences="1"> <code>$return['num_rooms']</code> </InvalidArrayAccess> - <UndefinedClass occurrences="2"> - <code>PostgreSqlPlatform</code> - <code>PostgreSqlPlatform</code> - </UndefinedClass> - <UndefinedDocblockClass occurrences="2"> - <code>$this->db->getDatabasePlatform()</code> - <code>$this->db->getDatabasePlatform()</code> - </UndefinedDocblockClass> - </file> - <file src="lib/Migration/Version2001Date20171026134605.php"> - <UndefinedClass occurrences="4"> - <code>PostgreSqlPlatform</code> - <code>TableNotFoundException</code> - <code>TableNotFoundException</code> - <code>TableNotFoundException</code> - </UndefinedClass> - <UndefinedDocblockClass occurrences="1"> - <code>$this->connection->getDatabasePlatform()</code> - </UndefinedDocblockClass> - </file> - <file src="lib/Migration/Version2001Date20180103144447.php"> - <UndefinedClass occurrences="1"> - <code>PostgreSqlPlatform</code> - </UndefinedClass> - <UndefinedDocblockClass occurrences="1"> - <code>$this->connection->getDatabasePlatform()</code> - </UndefinedDocblockClass> </file> <file src="lib/Migration/Version7000Date20190724121136.php"> <InvalidArgument occurrences="1"/> |