From 0614ccd76344a51ebc3b5060ca34a5bb1c6a1f89 Mon Sep 17 00:00:00 2001 From: Ghazi Triki <ghazi.triki@riadvice.tn> Date: Thu, 8 Nov 2018 14:53:00 +0100 Subject: [PATCH] Updated akka-bbb-apps project to use sbt 1.2.6 and scala 2.12.7 --- akka-bbb-apps/build.sbt | 136 +++++------------- akka-bbb-apps/project/Build.scala | 0 akka-bbb-apps/project/Dependencies.scala | 88 ++++++++++++ akka-bbb-apps/project/build.properties | 2 +- akka-bbb-apps/project/plugins.sbt | 8 +- .../apps/users/RegisterUserReqMsgHdlr.scala | 1 - .../bigbluebutton/core/AppsTestFixtures.scala | 24 ++-- .../MeetingInactivityTrackerTests.scala | 1 - .../core/models/GroupsChatTests.scala | 15 +- .../ReceivedJsonMsgHandlerTraitTests.scala | 2 +- .../core2/testdata/TestDataGen.scala | 4 +- 11 files changed, 147 insertions(+), 134 deletions(-) delete mode 100755 akka-bbb-apps/project/Build.scala create mode 100644 akka-bbb-apps/project/Dependencies.scala diff --git a/akka-bbb-apps/build.sbt b/akka-bbb-apps/build.sbt index af6c93edc0..892a77e541 100755 --- a/akka-bbb-apps/build.sbt +++ b/akka-bbb-apps/build.sbt @@ -1,33 +1,34 @@ -enablePlugins(JavaServerAppPackaging) - -name := "bbb-apps-akka" - -organization := "org.bigbluebutton" +import org.bigbluebutton.build._ -version := "0.0.2" +import scalariform.formatter.preferences._ +import com.typesafe.sbt.SbtScalariform +import com.typesafe.sbt.SbtScalariform.ScalariformKeys -scalaVersion := "2.12.6" +import com.typesafe.sbt.SbtNativePackager.autoImport._ -scalacOptions ++= Seq( - "-unchecked", - "-deprecation", - "-Xlint", - "-Ywarn-dead-code", - "-language:_", - "-target:jvm-1.8", - "-encoding", "UTF-8" -) +enablePlugins(JavaServerAppPackaging) -resolvers ++= Seq( - "spray repo" at "http://repo.spray.io/", - "rediscala" at "http://dl.bintray.com/etaty/maven", - "blindside-repos" at "http://blindside.googlecode.com/svn/repository/" +version := "0.0.3" + +val compileSettings = Seq( + organization := "org.bigbluebutton", + + scalacOptions ++= List( + "-unchecked", + "-deprecation", + "-Xlint", + "-Ywarn-dead-code", + "-language:_", + "-target:jvm-1.8", + "-encoding", "UTF-8" + ), + javacOptions ++= List( + "-Xlint:unchecked", + "-Xlint:deprecation" + ) ) -resolvers += Resolver.sonatypeRepo("releases") -resolvers += Resolver.typesafeRepo("releases") - -publishTo := Some(Resolver.file("file", new File(Path.userHome.absolutePath+"/dev/repo/maven-repo/releases" )) ) +publishTo := Some(Resolver.file("file", new File(Path.userHome.absolutePath + "/dev/repo/maven-repo/releases"))) // We want to have our jar files in lib_managed dir. // This way we'll have the right path when we import @@ -38,75 +39,15 @@ testOptions in Test += Tests.Argument(TestFrameworks.Specs2, "html", "console", testOptions in Test += Tests.Argument(TestFrameworks.ScalaTest, "-h", "target/scalatest-reports") -val akkaVersion = "2.5.14" -val scalaTestVersion = "3.0.5" - -libraryDependencies ++= { - Seq( - "ch.qos.logback" % "logback-classic" % "1.2.3" % "runtime", - "junit" % "junit" % "4.11", - "commons-codec" % "commons-codec" % "1.11", - "org.apache.commons" % "commons-lang3" % "3.7" - ) -} - -libraryDependencies += "org.bigbluebutton" % "bbb-common-message_2.12" % "0.0.19-SNAPSHOT" - -// https://mvnrepository.com/artifact/org.scala-lang/scala-library -libraryDependencies += "org.scala-lang" % "scala-library" % scalaVersion.value -// https://mvnrepository.com/artifact/org.scala-lang/scala-compiler -libraryDependencies += "org.scala-lang" % "scala-compiler" % scalaVersion.value - -// https://mvnrepository.com/artifact/com.typesafe.akka/akka-actor_2.12 -libraryDependencies += "com.typesafe.akka" % "akka-actor_2.12" % akkaVersion - -// https://mvnrepository.com/artifact/com.typesafe.akka/akka-slf4j_2.12 -libraryDependencies += "com.typesafe.akka" % "akka-slf4j_2.12" % akkaVersion - -// https://mvnrepository.com/artifact/com.github.etaty/rediscala_2.12 -libraryDependencies += "com.github.etaty" % "rediscala_2.12" % "1.8.0" - -libraryDependencies += "com.softwaremill.quicklens" %% "quicklens" % "1.4.11" -libraryDependencies += "com.google.code.gson" % "gson" % "2.8.5" -libraryDependencies += "joda-time" % "joda-time" % "2.10" -libraryDependencies += "io.spray" % "spray-json_2.12" % "1.3.4" -libraryDependencies += "org.parboiled" % "parboiled-scala_2.12" % "1.1.8" +lazy val bbbAppsAkka = (project in file(".")).settings(name := "bbb-apps-akka", libraryDependencies ++= Dependencies.runtime).settings(compileSettings) -// https://mvnrepository.com/artifact/com.fasterxml.jackson.module/jackson-module-scala_2.12 -libraryDependencies += "com.fasterxml.jackson.module" % "jackson-module-scala_2.12" % "2.9.6" +scalariformAutoformat := false - -// For generating test reports -libraryDependencies += "org.pegdown" % "pegdown" % "1.6.0" % "test" -// https://mvnrepository.com/artifact/com.typesafe.akka/akka-testkit_2.12 -libraryDependencies += "com.typesafe.akka" % "akka-testkit_2.12" % akkaVersion % "test" - -// https://mvnrepository.com/artifact/org.scalactic/scalactic_2.12 -libraryDependencies += "org.scalactic" % "scalactic_2.12" % "3.0.3" % "test" - -// https://mvnrepository.com/artifact/org.scalatest/scalatest_2.12 -libraryDependencies += "org.scalatest" % "scalatest_2.12" % scalaTestVersion % "test" - -libraryDependencies += "org.mockito" % "mockito-core" % "2.21.0" % "test" - - - - -import com.typesafe.sbt.SbtScalariform - -import scalariform.formatter.preferences._ -import com.typesafe.sbt.SbtScalariform.ScalariformKeys - -SbtScalariform.defaultScalariformSettings - -ScalariformKeys.preferences := ScalariformKeys.preferences.value +scalariformPreferences := scalariformPreferences.value .setPreference(AlignSingleLineCaseStatements, true) - .setPreference(DoubleIndentClassDeclaration, true) + .setPreference(DoubleIndentConstructorArguments, true) .setPreference(AlignParameters, true) - - - //----------- // Packaging // @@ -127,19 +68,10 @@ val user = "bigbluebutton" val group = "bigbluebutton" // user which will execute the application -daemonUser in Linux := user +daemonUser in Linux := user // group which will execute the application -daemonGroup in Linux := group - -mappings in Universal <+= (packageBin in Compile, sourceDirectory ) map { (_, src) => - // Move the application.conf so the user can override settings here - val appConf = src / "main" / "resources" / "application.conf" - appConf -> "conf/application.conf" -} - -mappings in Universal <+= (packageBin in Compile, sourceDirectory ) map { (_, src) => - // Move logback.xml so the user can override settings here - val logConf = src / "main" / "resources" / "logback.xml" - logConf -> "conf/logback.xml" -} +daemonGroup in Linux := group + +mappings in(Universal, packageBin) += file("src/main/resources/application.conf") -> "conf/application.conf" +mappings in(Universal, packageBin) += file("src/main/resources/logback.xml") -> "conf/logback.xml" diff --git a/akka-bbb-apps/project/Build.scala b/akka-bbb-apps/project/Build.scala deleted file mode 100755 index e69de29bb2..0000000000 diff --git a/akka-bbb-apps/project/Dependencies.scala b/akka-bbb-apps/project/Dependencies.scala new file mode 100644 index 0000000000..aacd004a00 --- /dev/null +++ b/akka-bbb-apps/project/Dependencies.scala @@ -0,0 +1,88 @@ +package org.bigbluebutton.build + +import sbt._ +import Keys._ + +object Dependencies { + + object Versions { + // Scala + val scala = "2.12.7" + val junit = "4.12" + val junitInterface = "0.11" + val scalactic = "3.0.3" + + // Libraries + val akkaVersion = "2.5.17" + val gson = "2.8.5" + val jackson = "2.9.7" + val logback = "1.2.3" + val quicklens = "1.4.11" + val spray = "1.3.4" + + // Apache Commons + val lang = "3.8.1" + val codec = "1.11" + + // Redis + val redisScala = "1.8.0" + + // BigBlueButton + val bbbCommons = "0.0.20-SNAPSHOT" + + // Test + val scalaTest = "3.0.5" + val mockito = "2.23.0" + val akkaTestKit = "2.5.18" + } + + object Compile { + val scalaLibrary = "org.scala-lang" % "scala-library" % Versions.scala + val scalaCompiler = "org.scala-lang" % "scala-compiler" % Versions.scala + + val akkaActor = "com.typesafe.akka" % "akka-actor_2.12" % Versions.akkaVersion + val akkaSl4fj = "com.typesafe.akka" % "akka-slf4j_2.12" % Versions.akkaVersion + + val googleGson = "com.google.code.gson" % "gson" % Versions.gson + val jacksonModule = "com.fasterxml.jackson.module" %% "jackson-module-scala" % Versions.jackson + val quicklens = "com.softwaremill.quicklens" %% "quicklens" % Versions.quicklens + val logback = "ch.qos.logback" % "logback-classic" % Versions.logback % "runtime" + val commonsCodec = "commons-codec" % "commons-codec" % Versions.codec + val sprayJson = "io.spray" % "spray-json_2.12" % Versions.spray + + val apacheLang = "org.apache.commons" % "commons-lang3" % Versions.lang + + val redisScala = "com.github.etaty" % "rediscala_2.12" % Versions.redisScala + + val bbbCommons = "org.bigbluebutton" % "bbb-common-message_2.12" % Versions.bbbCommons + } + + object Test { + val scalaTest = "org.scalatest" %% "scalatest" % Versions.scalaTest % "test" + val junit = "junit" % "junit" % Versions.junit % "test" + val mockitoCore = "org.mockito" % "mockito-core" % Versions.mockito % "test" + val scalactic = "org.scalactic" % "scalactic_2.12" % Versions.scalactic % "test" + val akkaTestKit = "com.typesafe.akka" %% "akka-testkit" % Versions.akkaTestKit % "test" + } + + val testing = Seq( + Test.scalaTest, + Test.junit, + Test.mockitoCore, + Test.scalactic, + Test.akkaTestKit) + + val runtime = Seq( + Compile.scalaLibrary, + Compile.scalaCompiler, + Compile.akkaActor, + Compile.googleGson, + Compile.jacksonModule, + Compile.quicklens, + Compile.logback, + Compile.commonsCodec, + Compile.sprayJson, + Compile.apacheLang, + Compile.redisScala, + Compile.bbbCommons) ++ testing +} \ No newline at end of file diff --git a/akka-bbb-apps/project/build.properties b/akka-bbb-apps/project/build.properties index a6e117b610..2e6e3d2460 100755 --- a/akka-bbb-apps/project/build.properties +++ b/akka-bbb-apps/project/build.properties @@ -1 +1 @@ -sbt.version=0.13.8 +sbt.version=1.2.6 \ No newline at end of file diff --git a/akka-bbb-apps/project/plugins.sbt b/akka-bbb-apps/project/plugins.sbt index ec155bbffc..bc8c448553 100755 --- a/akka-bbb-apps/project/plugins.sbt +++ b/akka-bbb-apps/project/plugins.sbt @@ -1,11 +1,11 @@ addSbtPlugin("io.spray" % "sbt-revolver" % "0.9.1") -addSbtPlugin("org.scalariform" % "sbt-scalariform" % "1.8.2") +addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "5.2.4") -addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "2.2.0") +addSbtPlugin("org.scalariform" % "sbt-scalariform" % "1.8.2") -addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.3.6") +addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.3.12") -addSbtPlugin("net.vonbuchholtz" % "sbt-dependency-check" % "0.2.7") +addSbtPlugin("net.vonbuchholtz" % "sbt-dependency-check" % "0.2.8") addSbtPlugin("org.scalastyle" %% "scalastyle-sbt-plugin" % "1.0.0") diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/users/RegisterUserReqMsgHdlr.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/users/RegisterUserReqMsgHdlr.scala index b9ed646793..1659cea34f 100755 --- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/users/RegisterUserReqMsgHdlr.scala +++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/users/RegisterUserReqMsgHdlr.scala @@ -22,7 +22,6 @@ trait RegisterUserReqMsgHdlr { BbbCommonEnvCoreMsg(envelope, event) } - val guestPolicy = liveMeeting.guestsWaiting.getGuestPolicy().policy val guestStatus = msg.body.guestStatus val regUser = RegisteredUsers.create(msg.body.intUserId, msg.body.extUserId, diff --git a/akka-bbb-apps/src/test/scala/org/bigbluebutton/core/AppsTestFixtures.scala b/akka-bbb-apps/src/test/scala/org/bigbluebutton/core/AppsTestFixtures.scala index fb2b3f5e76..3e57891347 100755 --- a/akka-bbb-apps/src/test/scala/org/bigbluebutton/core/AppsTestFixtures.scala +++ b/akka-bbb-apps/src/test/scala/org/bigbluebutton/core/AppsTestFixtures.scala @@ -15,10 +15,16 @@ trait AppsTestFixtures { val meetingName = "test meeting" val record = false val voiceConfId = "85115" + val muteOnStart = true val deskshareConfId = "85115-DESKSHARE" val durationInMinutes = 10 val maxInactivityTimeoutMinutes = 120 - val warnMinutesBeforeMax = 5 + val warnMinutesBeforeMax = 30 + val meetingExpireIfNoUserJoinedInMinutes = 5 + val meetingExpireWhenLastUserLeftInMinutes = 10 + val userInactivityInspectTimerInMinutes = 60 + val userInactivityThresholdInMinutes = 10 + val userActivitySignResponseDelayInMinutes = 5 val autoStartRecording = false val allowStartStopRecording = false val webcamsOnlyForModerator = false; @@ -38,24 +44,19 @@ trait AppsTestFixtures { val red5DeskShareAppTestFixtures = "red5App" val metadata: collection.immutable.Map[String, String] = Map("foo" -> "bar", "bar" -> "baz", "baz" -> "foo") val screenshareProps = ScreenshareProps("TODO", "TODO", "TODO") - val breakoutProps = BreakoutProps(parentMeetingId, sequence, Vector()) + val breakoutProps = BreakoutProps(parentId = parentMeetingId, sequence = sequence, freeJoin = false, breakoutRooms = Vector()) val meetingProp = MeetingProp(name = meetingName, extId = externalMeetingId, intId = meetingId, isBreakout = isBreakout.booleanValue()) - val durationProps = DurationProps( - duration = durationInMinutes, - createdTime = createTime, createdDate = createDate, - maxInactivityTimeoutMinutes = maxInactivityTimeoutMinutes, - warnMinutesBeforeMax = warnMinutesBeforeMax, - meetingExpireIfNoUserJoinedInMinutes = 5, - meetingExpireWhenLastUserLeftInMinutes = 1 - ) + val durationProps = DurationProps(duration = durationInMinutes, createdTime = createTime, createdDate = createDate, maxInactivityTimeoutMinutes = maxInactivityTimeoutMinutes, warnMinutesBeforeMax = warnMinutesBeforeMax, + meetingExpireIfNoUserJoinedInMinutes = meetingExpireIfNoUserJoinedInMinutes, meetingExpireWhenLastUserLeftInMinutes = meetingExpireWhenLastUserLeftInMinutes, + userInactivityInspectTimerInMinutes = userInactivityInspectTimerInMinutes, userInactivityThresholdInMinutes = userInactivityInspectTimerInMinutes, userActivitySignResponseDelayInMinutes = userActivitySignResponseDelayInMinutes) val password = PasswordProp(moderatorPass = moderatorPassword, viewerPass = viewerPassword) val recordProp = RecordProp(record = record, autoStartRecording = autoStartRecording, allowStartStopRecording = allowStartStopRecording) val welcomeProp = WelcomeProp(welcomeMsgTemplate = welcomeMsgTemplate, welcomeMsg = welcomeMsg, modOnlyMessage = modOnlyMessage) - val voiceProp = VoiceProp(telVoice = voiceConfId, voiceConf = voiceConfId, dialNumber = dialNumber) + val voiceProp = VoiceProp(telVoice = voiceConfId, voiceConf = voiceConfId, dialNumber = dialNumber, muteOnStart = muteOnStart) val usersProp = UsersProp(maxUsers = maxUsers, webcamsOnlyForModerator = webcamsOnlyForModerator, guestPolicy = guestPolicy) val metadataProp = new MetadataProp(metadata) @@ -84,7 +85,6 @@ trait AppsTestFixtures { val layouts = new Layouts() val wbModel = new WhiteboardModel() val presModel = new PresentationModel() - val breakoutRooms = new BreakoutRooms() val captionModel = new CaptionModel() val notesModel = new SharedNotesModel() val registeredUsers = new RegisteredUsers diff --git a/akka-bbb-apps/src/test/scala/org/bigbluebutton/core/domain/MeetingInactivityTrackerTests.scala b/akka-bbb-apps/src/test/scala/org/bigbluebutton/core/domain/MeetingInactivityTrackerTests.scala index 6a09dc346b..95f8ab07d9 100755 --- a/akka-bbb-apps/src/test/scala/org/bigbluebutton/core/domain/MeetingInactivityTrackerTests.scala +++ b/akka-bbb-apps/src/test/scala/org/bigbluebutton/core/domain/MeetingInactivityTrackerTests.scala @@ -1,7 +1,6 @@ package org.bigbluebutton.core.domain import org.bigbluebutton.core.UnitSpec -import org.bigbluebutton.core.running.MeetingExpiryTrackerHelper import org.bigbluebutton.core.util.TimeUtil class MeetingInactivityTrackerTests extends UnitSpec { diff --git a/akka-bbb-apps/src/test/scala/org/bigbluebutton/core/models/GroupsChatTests.scala b/akka-bbb-apps/src/test/scala/org/bigbluebutton/core/models/GroupsChatTests.scala index ca600fa0a2..60246a571a 100755 --- a/akka-bbb-apps/src/test/scala/org/bigbluebutton/core/models/GroupsChatTests.scala +++ b/akka-bbb-apps/src/test/scala/org/bigbluebutton/core/models/GroupsChatTests.scala @@ -2,7 +2,6 @@ package org.bigbluebutton.core.models import org.bigbluebutton.common2.msgs.{ GroupChatAccess, GroupChatUser } import org.bigbluebutton.core.UnitSpec -import org.bigbluebutton.core.domain.BbbSystemConst class GroupsChatTests extends UnitSpec { @@ -10,7 +9,7 @@ class GroupsChatTests extends UnitSpec { val gcId = "gc-id" val chatName = "Public" val userId = "uid-1" - val createBy = GroupChatUser(BbbSystemConst.SYSTEM_USER, BbbSystemConst.SYSTEM_USER) + val createBy = GroupChatUser("groupId", "groupname") val gc = GroupChatFactory.create(gcId, chatName, GroupChatAccess.PUBLIC, createBy, Vector.empty, Vector.empty) val user = GroupChatUser(userId, "User 1") val gc2 = gc.add(user) @@ -25,18 +24,16 @@ class GroupsChatTests extends UnitSpec { } "A GroupChat" should "be able to add, update, and remove msg" in { - val createBy = GroupChatUser(BbbSystemConst.SYSTEM_USER, BbbSystemConst.SYSTEM_USER) + val createBy = GroupChatUser("groupId", "groupname") val gcId = "gc-id" val chatName = "Public" - val userId = "uid-1" val gc = GroupChatFactory.create(gcId, chatName, GroupChatAccess.PUBLIC, createBy, Vector.empty, Vector.empty) val msgId1 = "msgid-1" val ts = System.currentTimeMillis() val hello = "Hello World!" val msg1 = GroupChatMessage(id = msgId1, timestamp = ts, correlationId = "cordId1", createdOn = ts, - updatedOn = ts, sender = createBy, - font = "arial", size = 12, color = "red", message = hello) + updatedOn = ts, sender = createBy, color = "red", message = hello) val gc2 = gc.add(msg1) assert(gc2.msgs.size == 1) @@ -45,8 +42,7 @@ class GroupsChatTests extends UnitSpec { val foo = "Foo bar" val ts2 = System.currentTimeMillis() val msg2 = GroupChatMessage(id = msgId2, timestamp = ts2, correlationId = "cordId2", createdOn = ts2, - updatedOn = ts2, sender = createBy, - font = "arial", size = 12, color = "red", message = foo) + updatedOn = ts2, sender = createBy, color = "red", message = foo) val gc3 = gc2.add(msg2) assert(gc3.msgs.size == 2) @@ -55,8 +51,7 @@ class GroupsChatTests extends UnitSpec { val msgId3 = "msgid-3" val ts3 = System.currentTimeMillis() val msg3 = GroupChatMessage(id = msgId3, timestamp = ts3, correlationId = "cordId3", createdOn = ts3, - updatedOn = ts3, sender = createBy, - font = "arial", size = 12, color = "red", message = baz) + updatedOn = ts3, sender = createBy, color = "red", message = baz) val gc4 = gc3.update(msg3) gc4.findMsgWithId(msgId3) match { diff --git a/akka-bbb-apps/src/test/scala/org/bigbluebutton/core/pubsub/sender/ReceivedJsonMsgHandlerTraitTests.scala b/akka-bbb-apps/src/test/scala/org/bigbluebutton/core/pubsub/sender/ReceivedJsonMsgHandlerTraitTests.scala index 8de72a97a5..cc0977ada4 100755 --- a/akka-bbb-apps/src/test/scala/org/bigbluebutton/core/pubsub/sender/ReceivedJsonMsgHandlerTraitTests.scala +++ b/akka-bbb-apps/src/test/scala/org/bigbluebutton/core/pubsub/sender/ReceivedJsonMsgHandlerTraitTests.scala @@ -3,7 +3,7 @@ package org.bigbluebutton.core.pubsub.sender import org.bigbluebutton.SystemConfiguration import org.bigbluebutton.common2.msgs._ import org.bigbluebutton.core.{ AppsTestFixtures, UnitSpec } -import org.bigbluebutton.core.bus.{ BbbMsgEvent, BbbMsgRouterEventBus, ReceivedJsonMessage } +import org.bigbluebutton.core.bus.{ BbbMsgEvent, BbbMsgRouterEventBus } import org.bigbluebutton.core2.ReceivedMessageRouter import org.mockito.Mockito._ import org.scalatest.mockito.MockitoSugar diff --git a/akka-bbb-apps/src/test/scala/org/bigbluebutton/core2/testdata/TestDataGen.scala b/akka-bbb-apps/src/test/scala/org/bigbluebutton/core2/testdata/TestDataGen.scala index d4789a4373..907d352379 100755 --- a/akka-bbb-apps/src/test/scala/org/bigbluebutton/core2/testdata/TestDataGen.scala +++ b/akka-bbb-apps/src/test/scala/org/bigbluebutton/core2/testdata/TestDataGen.scala @@ -46,9 +46,9 @@ object TestDataGen { def createUserFor(liveMeeting: LiveMeeting, regUser: RegisteredUser, presenter: Boolean): UserState = { val u = UserState(intId = regUser.id, extId = regUser.externId, name = regUser.name, role = regUser.role, guest = regUser.guest, authed = regUser.authed, guestStatus = regUser.guestStatus, - emoji = "none", locked = false, presenter, avatar = regUser.avatarURL) + emoji = "none", locked = false, presenter = false, avatar = regUser.avatarURL, clientType = "unknown", + userLeftFlag = UserLeftFlag(false, 0)) Users2x.add(liveMeeting.users2x, u) - u } } -- GitLab