Compare commits
51 Commits
develop
...
new.change
Author | SHA1 | Date |
---|---|---|
|
0fde16159d | |
|
e95102d38e | |
|
b2b2989e46 | |
|
de9551c78a | |
|
159d527796 | |
|
a5da4999e1 | |
|
8903c52ddb | |
|
ed92eb80f3 | |
|
dfcea278de | |
|
6d22747707 | |
|
1255f4ac3b | |
|
e8672ce827 | |
|
0393aecbdd | |
|
3db96db70c | |
|
2dc8a0c355 | |
|
af2b2a6185 | |
|
dee200ba3f | |
|
759504e46f | |
|
fe35747b52 | |
|
0ea494e3e7 | |
|
65dc56ad2d | |
|
ea20167981 | |
|
e8aab76148 | |
|
22230e0584 | |
|
9c073fa6dc | |
|
80c358838f | |
|
d46c86778c | |
|
ac8e30387f | |
|
2a4195c10a | |
|
7e1dec41e9 | |
|
34993dace2 | |
|
1e29a8efac | |
|
744565ad21 | |
|
0ce1fdcbf2 | |
|
2d8751c4bb | |
|
0cb7e3020a | |
|
a2dfbcbe30 | |
|
84d0401e3c | |
|
84b16b2d97 | |
|
4651a2fb91 | |
|
a7a4d9bb00 | |
|
e48b174118 | |
|
13f5075f7c | |
|
a478f1ff52 | |
|
a283f41022 | |
|
90984de444 | |
|
c4f09d8b7a | |
|
7813efbb26 | |
|
5e1f1c89da | |
|
cc9a9d523d | |
|
49f2c28b3e |
|
@ -1,9 +1,6 @@
|
||||||
defaults: &defaults
|
defaults: &defaults
|
||||||
working_directory: ~/repo
|
working_directory: ~/repo
|
||||||
|
|
||||||
orbs:
|
|
||||||
android: circleci/android@2.1.2
|
|
||||||
|
|
||||||
macos: &macos
|
macos: &macos
|
||||||
macos:
|
macos:
|
||||||
xcode: "14.2.0"
|
xcode: "14.2.0"
|
||||||
|
@ -330,14 +327,6 @@ commands:
|
||||||
working_directory: ios
|
working_directory: ios
|
||||||
- save_cache: *save-gems-cache
|
- save_cache: *save-gems-cache
|
||||||
|
|
||||||
create-e2e-account-file:
|
|
||||||
description: "Create e2e account file"
|
|
||||||
steps:
|
|
||||||
- run:
|
|
||||||
command: |
|
|
||||||
echo $E2E_ACCOUNT | base64 --decode > ./e2e_account.ts
|
|
||||||
working_directory: e2e
|
|
||||||
|
|
||||||
version: 2.1
|
version: 2.1
|
||||||
|
|
||||||
# EXECUTORS
|
# EXECUTORS
|
||||||
|
@ -449,94 +438,6 @@ jobs:
|
||||||
- upload-to-google-play-beta:
|
- upload-to-google-play-beta:
|
||||||
official: true
|
official: true
|
||||||
|
|
||||||
e2e-build-android:
|
|
||||||
<<: *defaults
|
|
||||||
executor:
|
|
||||||
name: android/android-machine
|
|
||||||
resource-class: xlarge
|
|
||||||
tag: 2022.12.1
|
|
||||||
environment:
|
|
||||||
<<: *android-env
|
|
||||||
steps:
|
|
||||||
- checkout
|
|
||||||
- restore_cache: *restore-npm-cache-linux
|
|
||||||
- run: *install-npm-modules
|
|
||||||
- save_cache: *save-npm-cache-linux
|
|
||||||
- restore_cache: *restore-gradle-cache
|
|
||||||
- run:
|
|
||||||
name: Configure Gradle
|
|
||||||
command: |
|
|
||||||
echo -e "" > ./gradle.properties
|
|
||||||
# echo -e "android.enableAapt2=false" >> ./gradle.properties
|
|
||||||
echo -e "android.useAndroidX=true" >> ./gradle.properties
|
|
||||||
echo -e "android.enableJetifier=true" >> ./gradle.properties
|
|
||||||
echo -e "newArchEnabled=false" >> ./gradle.properties
|
|
||||||
echo -e "FLIPPER_VERSION=0.125.0" >> ./gradle.properties
|
|
||||||
echo -e "VERSIONCODE=$CIRCLE_BUILD_NUM" >> ./gradle.properties
|
|
||||||
echo -e "APPLICATION_ID=chat.rocket.reactnative" >> ./gradle.properties
|
|
||||||
echo -e "BugsnagAPIKey=$BUGSNAG_KEY" >> ./gradle.properties
|
|
||||||
echo $KEYSTORE_EXPERIMENTAL_BASE64 | base64 --decode > ./app/$KEYSTORE_EXPERIMENTAL
|
|
||||||
echo -e "KEYSTORE=$KEYSTORE_EXPERIMENTAL" >> ./gradle.properties
|
|
||||||
echo -e "KEYSTORE_PASSWORD=$KEYSTORE_EXPERIMENTAL_PASSWORD" >> ./gradle.properties
|
|
||||||
echo -e "KEY_ALIAS=$KEYSTORE_EXPERIMENTAL_ALIAS" >> ./gradle.properties
|
|
||||||
echo -e "KEY_PASSWORD=$KEYSTORE_EXPERIMENTAL_PASSWORD" >> ./gradle.properties
|
|
||||||
working_directory: android
|
|
||||||
- run:
|
|
||||||
name: Build Android
|
|
||||||
command: |
|
|
||||||
echo "RUNNING_E2E_TESTS=true" > ./.env
|
|
||||||
yarn e2e:android-build
|
|
||||||
- save_cache: *save-gradle-cache
|
|
||||||
- store_artifacts:
|
|
||||||
path: android/app/build/outputs/apk/experimentalPlay/release/app-experimental-play-release.apk
|
|
||||||
- store_artifacts:
|
|
||||||
path: android/app/build/outputs/apk/androidTest/experimentalPlay/release/app-experimental-play-release-androidTest.apk
|
|
||||||
- persist_to_workspace:
|
|
||||||
root: /home/circleci/repo
|
|
||||||
paths:
|
|
||||||
- android/app/build/outputs/apk/
|
|
||||||
|
|
||||||
e2e-test-android:
|
|
||||||
<<: *defaults
|
|
||||||
executor:
|
|
||||||
name: android/android-machine
|
|
||||||
resource-class: xlarge
|
|
||||||
tag: 2022.12.1
|
|
||||||
parallelism: 4
|
|
||||||
steps:
|
|
||||||
- checkout
|
|
||||||
- attach_workspace:
|
|
||||||
at: /home/circleci/repo
|
|
||||||
- restore_cache: *restore-npm-cache-linux
|
|
||||||
- run: *install-npm-modules
|
|
||||||
- save_cache: *save-npm-cache-linux
|
|
||||||
- run: mkdir ~/junit
|
|
||||||
- create-e2e-account-file
|
|
||||||
- android/create-avd:
|
|
||||||
avd-name: Pixel_API_31_AOSP
|
|
||||||
install: true
|
|
||||||
system-image: system-images;android-31;default;x86_64
|
|
||||||
- run:
|
|
||||||
name: Setup emulator
|
|
||||||
command: |
|
|
||||||
echo "hw.lcd.density = 440" >> ~/.android/avd/Pixel_API_31_AOSP.avd/config.ini
|
|
||||||
echo "hw.lcd.height = 2280" >> ~/.android/avd/Pixel_API_31_AOSP.avd/config.ini
|
|
||||||
echo "hw.lcd.width = 1080" >> ~/.android/avd/Pixel_API_31_AOSP.avd/config.ini
|
|
||||||
- run:
|
|
||||||
name: Run Detox Tests
|
|
||||||
command: |
|
|
||||||
TEST=$(circleci tests glob "e2e/tests/**/*.ts" | circleci tests split --split-by=timings)
|
|
||||||
yarn e2e:android-test $TEST
|
|
||||||
- store_artifacts:
|
|
||||||
path: artifacts
|
|
||||||
- run:
|
|
||||||
command: cp junit.xml ~/junit/
|
|
||||||
when: always
|
|
||||||
- store_test_results:
|
|
||||||
path: ~/junit
|
|
||||||
- store_artifacts:
|
|
||||||
path: ~/junit
|
|
||||||
|
|
||||||
# iOS builds
|
# iOS builds
|
||||||
ios-build-experimental:
|
ios-build-experimental:
|
||||||
executor: mac-env
|
executor: mac-env
|
||||||
|
@ -560,89 +461,11 @@ jobs:
|
||||||
- upload-to-testflight:
|
- upload-to-testflight:
|
||||||
official: true
|
official: true
|
||||||
|
|
||||||
e2e-build-ios:
|
|
||||||
executor: mac-env
|
|
||||||
steps:
|
|
||||||
- checkout
|
|
||||||
- restore_cache: *restore-gems-cache
|
|
||||||
- restore_cache: *restore-npm-cache-mac
|
|
||||||
- run: *install-npm-modules
|
|
||||||
- run: *update-fastlane-ios
|
|
||||||
- save_cache: *save-npm-cache-mac
|
|
||||||
- save_cache: *save-gems-cache
|
|
||||||
- manage-pods
|
|
||||||
- run:
|
|
||||||
name: Configure Detox
|
|
||||||
command: |
|
|
||||||
brew tap wix/brew
|
|
||||||
brew install applesimutils
|
|
||||||
- run:
|
|
||||||
name: Build
|
|
||||||
command: |
|
|
||||||
/usr/libexec/PlistBuddy -c "Set :bugsnag:apiKey $BUGSNAG_KEY" ./ios/RocketChatRN/Info.plist
|
|
||||||
/usr/libexec/PlistBuddy -c "Set :bugsnag:apiKey $BUGSNAG_KEY" ./ios/ShareRocketChatRN/Info.plist
|
|
||||||
yarn detox clean-framework-cache && yarn detox build-framework-cache
|
|
||||||
echo "RUNNING_E2E_TESTS=true" > ./.env
|
|
||||||
yarn e2e:ios-build
|
|
||||||
- persist_to_workspace:
|
|
||||||
root: /Users/distiller/project
|
|
||||||
paths:
|
|
||||||
- ios/build/Build/Products/Release-iphonesimulator/Rocket.Chat Experimental.app
|
|
||||||
|
|
||||||
e2e-test-ios:
|
|
||||||
executor: mac-env
|
|
||||||
parallelism: 5
|
|
||||||
steps:
|
|
||||||
- checkout
|
|
||||||
- attach_workspace:
|
|
||||||
at: /Users/distiller/project
|
|
||||||
- restore_cache: *restore-npm-cache-mac
|
|
||||||
- run: *install-npm-modules
|
|
||||||
- save_cache: *save-npm-cache-mac
|
|
||||||
- run: mkdir ~/junit
|
|
||||||
- run:
|
|
||||||
name: Configure Detox
|
|
||||||
command: |
|
|
||||||
brew tap wix/brew
|
|
||||||
brew install applesimutils
|
|
||||||
yarn detox clean-framework-cache && yarn detox build-framework-cache
|
|
||||||
- create-e2e-account-file
|
|
||||||
- run:
|
|
||||||
name: Run tests
|
|
||||||
command: |
|
|
||||||
TEST=$(circleci tests glob "e2e/tests/**/*.ts" | circleci tests split --split-by=timings)
|
|
||||||
yarn e2e:ios-test $TEST
|
|
||||||
- store_artifacts:
|
|
||||||
path: artifacts
|
|
||||||
- run:
|
|
||||||
command: cp junit.xml ~/junit/
|
|
||||||
when: always
|
|
||||||
- store_test_results:
|
|
||||||
path: ~/junit
|
|
||||||
- store_artifacts:
|
|
||||||
path: ~/junit
|
|
||||||
|
|
||||||
workflows:
|
workflows:
|
||||||
build-and-test:
|
build-and-test:
|
||||||
jobs:
|
jobs:
|
||||||
- lint-testunit
|
- lint-testunit
|
||||||
|
|
||||||
# E2E tests
|
|
||||||
- e2e-hold:
|
|
||||||
type: approval
|
|
||||||
- e2e-build-ios:
|
|
||||||
requires:
|
|
||||||
- e2e-hold
|
|
||||||
- e2e-test-ios:
|
|
||||||
requires:
|
|
||||||
- e2e-build-ios
|
|
||||||
- e2e-build-android:
|
|
||||||
requires:
|
|
||||||
- e2e-hold
|
|
||||||
- e2e-test-android:
|
|
||||||
requires:
|
|
||||||
- e2e-build-android
|
|
||||||
|
|
||||||
# iOS Experimental
|
# iOS Experimental
|
||||||
- ios-hold-build-experimental:
|
- ios-hold-build-experimental:
|
||||||
type: approval
|
type: approval
|
||||||
|
|
91
.detoxrc.js
91
.detoxrc.js
|
@ -1,91 +0,0 @@
|
||||||
/** @type {Detox.DetoxConfig} */
|
|
||||||
module.exports = {
|
|
||||||
testRunner: {
|
|
||||||
args: {
|
|
||||||
$0: 'jest',
|
|
||||||
config: 'e2e/jest.config.js'
|
|
||||||
},
|
|
||||||
retries: process.env.CI ? 3 : 0
|
|
||||||
},
|
|
||||||
artifacts: {
|
|
||||||
plugins: {
|
|
||||||
screenshot: 'failing',
|
|
||||||
video: 'failing',
|
|
||||||
uiHierarchy: 'enabled'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
apps: {
|
|
||||||
'ios.debug': {
|
|
||||||
type: 'ios.app',
|
|
||||||
binaryPath: 'ios/build/Build/Products/Debug-iphonesimulator/Rocket.Chat Experimental.app',
|
|
||||||
build:
|
|
||||||
'xcodebuild -workspace ios/RocketChatRN.xcworkspace -scheme RocketChatRN -configuration Debug -sdk iphonesimulator -derivedDataPath ios/build'
|
|
||||||
},
|
|
||||||
'ios.release': {
|
|
||||||
type: 'ios.app',
|
|
||||||
binaryPath: 'ios/build/Build/Products/Release-iphonesimulator/Rocket.Chat Experimental.app',
|
|
||||||
build:
|
|
||||||
'xcodebuild -workspace ios/RocketChatRN.xcworkspace -scheme RocketChatRN -configuration Release -sdk iphonesimulator -derivedDataPath ios/build'
|
|
||||||
},
|
|
||||||
'android.debug': {
|
|
||||||
type: 'android.apk',
|
|
||||||
binaryPath: 'android/app/build/outputs/apk/experimentalPlay/debug/app-experimental-play-debug.apk',
|
|
||||||
build:
|
|
||||||
'cd android ; ./gradlew assembleExperimentalPlayDebug assembleExperimentalPlayDebugAndroidTest -DtestBuildType=debug ; cd -',
|
|
||||||
reversePorts: [8081]
|
|
||||||
},
|
|
||||||
'android.release': {
|
|
||||||
type: 'android.apk',
|
|
||||||
binaryPath: 'android/app/build/outputs/apk/experimentalPlay/release/app-experimental-play-release.apk',
|
|
||||||
build:
|
|
||||||
'cd android ; ./gradlew assembleExperimentalPlayRelease assembleExperimentalPlayReleaseAndroidTest -DtestBuildType=release ; cd -'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
devices: {
|
|
||||||
simulator: {
|
|
||||||
type: 'ios.simulator',
|
|
||||||
device: {
|
|
||||||
type: 'iPhone 14'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
attached: {
|
|
||||||
type: 'android.attached',
|
|
||||||
device: {
|
|
||||||
adbName: '.*'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
emulator: {
|
|
||||||
type: 'android.emulator',
|
|
||||||
device: {
|
|
||||||
avdName: 'Pixel_API_31_AOSP'
|
|
||||||
},
|
|
||||||
headless: process.env.CI ? true : false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
configurations: {
|
|
||||||
'ios.sim.debug': {
|
|
||||||
device: 'simulator',
|
|
||||||
app: 'ios.debug'
|
|
||||||
},
|
|
||||||
'ios.sim.release': {
|
|
||||||
device: 'simulator',
|
|
||||||
app: 'ios.release'
|
|
||||||
},
|
|
||||||
'android.att.debug': {
|
|
||||||
device: 'attached',
|
|
||||||
app: 'android.debug'
|
|
||||||
},
|
|
||||||
'android.att.release': {
|
|
||||||
device: 'attached',
|
|
||||||
app: 'android.release'
|
|
||||||
},
|
|
||||||
'android.emu.debug': {
|
|
||||||
device: 'emulator',
|
|
||||||
app: 'android.debug'
|
|
||||||
},
|
|
||||||
'android.emu.release': {
|
|
||||||
device: 'emulator',
|
|
||||||
app: 'android.release'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
13
.eslintrc.js
13
.eslintrc.js
|
@ -240,8 +240,19 @@ module.exports = {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
files: ['e2e/**'],
|
files: ['e2e/**'],
|
||||||
|
globals: {
|
||||||
|
by: true,
|
||||||
|
detox: true,
|
||||||
|
device: true,
|
||||||
|
element: true,
|
||||||
|
waitFor: true
|
||||||
|
},
|
||||||
rules: {
|
rules: {
|
||||||
'no-await-in-loop': 0
|
'import/no-extraneous-dependencies': 0,
|
||||||
|
'no-await-in-loop': 0,
|
||||||
|
'no-restricted-syntax': 0,
|
||||||
|
// TODO: remove this rule when update Detox to 20 and test if the namespace Detox is available
|
||||||
|
'no-undef': 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
|
@ -67,6 +67,5 @@ e2e/docker/rc_test_env/docker-compose.yml
|
||||||
e2e/docker/data/db
|
e2e/docker/data/db
|
||||||
e2e/e2e_account.js
|
e2e/e2e_account.js
|
||||||
e2e/e2e_account.ts
|
e2e/e2e_account.ts
|
||||||
junit.xml
|
|
||||||
|
|
||||||
*.p8
|
*.p8
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -147,7 +147,7 @@ android {
|
||||||
minSdkVersion rootProject.ext.minSdkVersion
|
minSdkVersion rootProject.ext.minSdkVersion
|
||||||
targetSdkVersion rootProject.ext.targetSdkVersion
|
targetSdkVersion rootProject.ext.targetSdkVersion
|
||||||
versionCode VERSIONCODE as Integer
|
versionCode VERSIONCODE as Integer
|
||||||
versionName "4.37.0"
|
versionName "4.36.0"
|
||||||
vectorDrawables.useSupportLibrary = true
|
vectorDrawables.useSupportLibrary = true
|
||||||
if (!isFoss) {
|
if (!isFoss) {
|
||||||
manifestPlaceholders = [BugsnagAPIKey: BugsnagAPIKey as String]
|
manifestPlaceholders = [BugsnagAPIKey: BugsnagAPIKey as String]
|
||||||
|
@ -250,7 +250,6 @@ android {
|
||||||
release {
|
release {
|
||||||
minifyEnabled enableProguardInReleaseBuilds
|
minifyEnabled enableProguardInReleaseBuilds
|
||||||
setProguardFiles([getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'])
|
setProguardFiles([getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'])
|
||||||
proguardFile "${rootProject.projectDir}/../node_modules/detox/android/detox/proguard-rules-app.pro"
|
|
||||||
signingConfig signingConfigs.release
|
signingConfig signingConfigs.release
|
||||||
if (!isFoss) {
|
if (!isFoss) {
|
||||||
firebaseCrashlytics {
|
firebaseCrashlytics {
|
||||||
|
@ -269,11 +268,6 @@ android {
|
||||||
// pickFirst '**/x86_64/libc++_shared.so'
|
// pickFirst '**/x86_64/libc++_shared.so'
|
||||||
// }
|
// }
|
||||||
|
|
||||||
// FIXME: Remove when we update RN
|
|
||||||
packagingOptions {
|
|
||||||
pickFirst '**/*.so'
|
|
||||||
}
|
|
||||||
|
|
||||||
// applicationVariants are e.g. debug, release
|
// applicationVariants are e.g. debug, release
|
||||||
|
|
||||||
flavorDimensions "app", "type"
|
flavorDimensions "app", "type"
|
||||||
|
@ -286,6 +280,10 @@ android {
|
||||||
dimension = "app"
|
dimension = "app"
|
||||||
buildConfigField "boolean", "IS_OFFICIAL", "false"
|
buildConfigField "boolean", "IS_OFFICIAL", "false"
|
||||||
}
|
}
|
||||||
|
e2e {
|
||||||
|
dimension = "app"
|
||||||
|
buildConfigField "boolean", "IS_OFFICIAL", "false"
|
||||||
|
}
|
||||||
foss {
|
foss {
|
||||||
dimension = "type"
|
dimension = "type"
|
||||||
buildConfigField "boolean", "FDROID_BUILD", "true"
|
buildConfigField "boolean", "FDROID_BUILD", "true"
|
||||||
|
@ -313,6 +311,16 @@ android {
|
||||||
java.srcDirs = ['src/main/java', 'src/play/java']
|
java.srcDirs = ['src/main/java', 'src/play/java']
|
||||||
manifest.srcFile 'src/play/AndroidManifest.xml'
|
manifest.srcFile 'src/play/AndroidManifest.xml'
|
||||||
}
|
}
|
||||||
|
e2ePlayDebug {
|
||||||
|
java.srcDirs = ['src/main/java', 'src/play/java']
|
||||||
|
res.srcDirs = ['src/experimental/res']
|
||||||
|
manifest.srcFile 'src/play/AndroidManifest.xml'
|
||||||
|
}
|
||||||
|
e2ePlayRelease {
|
||||||
|
java.srcDirs = ['src/main/java', 'src/play/java']
|
||||||
|
res.srcDirs = ['src/experimental/res']
|
||||||
|
manifest.srcFile 'src/play/AndroidManifest.xml'
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
applicationVariants.all { variant ->
|
applicationVariants.all { variant ->
|
||||||
|
@ -377,9 +385,8 @@ dependencies {
|
||||||
implementation "com.github.bumptech.glide:glide:4.9.0"
|
implementation "com.github.bumptech.glide:glide:4.9.0"
|
||||||
annotationProcessor "com.github.bumptech.glide:compiler:4.9.0"
|
annotationProcessor "com.github.bumptech.glide:compiler:4.9.0"
|
||||||
implementation "com.tencent:mmkv-static:1.2.10"
|
implementation "com.tencent:mmkv-static:1.2.10"
|
||||||
androidTestImplementation('com.wix:detox:+')
|
androidTestImplementation('com.wix:detox:+') { transitive = true }
|
||||||
implementation 'androidx.appcompat:appcompat:1.1.0'
|
androidTestImplementation 'junit:junit:4.12'
|
||||||
implementation 'com.facebook.soloader:soloader:0.10.4'
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isNewArchitectureEnabled()) {
|
if (isNewArchitectureEnabled()) {
|
||||||
|
|
|
@ -18,7 +18,7 @@ public class DetoxTest {
|
||||||
@Rule
|
@Rule
|
||||||
// Replace 'MainActivity' with the value of android:name entry in
|
// Replace 'MainActivity' with the value of android:name entry in
|
||||||
// <activity> in AndroidManifest.xml
|
// <activity> in AndroidManifest.xml
|
||||||
public ActivityTestRule<chat.rocket.reactnative.MainActivity> mActivityRule = new ActivityTestRule<>(chat.rocket.reactnative.MainActivity.class, false, false);
|
public ActivityTestRule<MainActivity> mActivityRule = new ActivityTestRule<>(MainActivity.class, false, false);
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void runDetoxTests() {
|
public void runDetoxTests() {
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<network-security-config xmlns:tools="http://schemas.android.com/tools">
|
||||||
|
<base-config cleartextTrafficPermitted="true">
|
||||||
|
<trust-anchors>
|
||||||
|
<certificates src="system" />
|
||||||
|
<certificates src="user"
|
||||||
|
tools:ignore="AcceptsUserCertificates" />
|
||||||
|
</trust-anchors>
|
||||||
|
</base-config>
|
||||||
|
</network-security-config>
|
|
@ -12,7 +12,13 @@
|
||||||
<uses-permission android:name="android.permission.AUDIO_CAPTURE" />
|
<uses-permission android:name="android.permission.AUDIO_CAPTURE" />
|
||||||
|
|
||||||
<!-- permissions related to jitsi call -->
|
<!-- permissions related to jitsi call -->
|
||||||
<uses-permission android:name="android.permission.BLUETOOTH" />
|
<uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30" />
|
||||||
|
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30" />
|
||||||
|
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" android:usesPermissionFlags="neverForLocation" tools:targetApi="s" />
|
||||||
|
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
|
||||||
|
<uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" />
|
||||||
|
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" android:maxSdkVersion="28"/>
|
||||||
|
<uses-permission-sdk-23 android:name="android.permission.ACCESS_FINE_LOCATION" tools:targetApi="Q"/>
|
||||||
|
|
||||||
<application
|
<application
|
||||||
android:name="chat.rocket.reactnative.MainApplication"
|
android:name="chat.rocket.reactnative.MainApplication"
|
||||||
|
|
|
@ -7,8 +7,4 @@
|
||||||
tools:ignore="AcceptsUserCertificates" />
|
tools:ignore="AcceptsUserCertificates" />
|
||||||
</trust-anchors>
|
</trust-anchors>
|
||||||
</base-config>
|
</base-config>
|
||||||
<domain-config cleartextTrafficPermitted="true">
|
|
||||||
<domain includeSubdomains="true">10.0.2.2</domain>
|
|
||||||
<domain includeSubdomains="true">localhost</domain>
|
|
||||||
</domain-config>
|
|
||||||
</network-security-config>
|
</network-security-config>
|
|
@ -1,5 +1,9 @@
|
||||||
import org.apache.tools.ant.taskdefs.condition.Os
|
import org.apache.tools.ant.taskdefs.condition.Os
|
||||||
|
|
||||||
|
def safeExtGet(prop, fallback) {
|
||||||
|
rootProject.ext.has(prop) ? rootProject.ext.get(prop) : fallback
|
||||||
|
}
|
||||||
|
|
||||||
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
||||||
buildscript {
|
buildscript {
|
||||||
def taskRequests = getGradle().getStartParameter().getTaskRequests().toString().toLowerCase()
|
def taskRequests = getGradle().getStartParameter().getTaskRequests().toString().toLowerCase()
|
||||||
|
@ -71,38 +75,5 @@ allprojects {
|
||||||
google()
|
google()
|
||||||
maven { url 'https://maven.google.com' }
|
maven { url 'https://maven.google.com' }
|
||||||
maven { url 'https://www.jitpack.io' }
|
maven { url 'https://www.jitpack.io' }
|
||||||
|
|
||||||
// https://stackoverflow.com/a/74333788/5447468
|
|
||||||
// TODO: remove once we update RN
|
|
||||||
exclusiveContent {
|
|
||||||
// We get React Native's Android binaries exclusively through npm,
|
|
||||||
// from a local Maven repo inside node_modules/react-native/.
|
|
||||||
// (The use of exclusiveContent prevents looking elsewhere like Maven Central
|
|
||||||
// and potentially getting a wrong version.)
|
|
||||||
filter {
|
|
||||||
includeGroup "com.facebook.react"
|
|
||||||
}
|
|
||||||
forRepository {
|
|
||||||
maven {
|
|
||||||
// NOTE: if you are in a monorepo, you may have "$rootDir/../../../node_modules/react-native/android"
|
|
||||||
url "$rootDir/../node_modules/react-native/android"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
subprojects { subproject ->
|
|
||||||
afterEvaluate {
|
|
||||||
if (!project.name.equalsIgnoreCase("app") && project.hasProperty("android")) {
|
|
||||||
android {
|
|
||||||
compileSdkVersion 31
|
|
||||||
buildToolsVersion "31.0.0"
|
|
||||||
defaultConfig {
|
|
||||||
minSdkVersion 23
|
|
||||||
targetSdkVersion 31
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,13 +1,11 @@
|
||||||
import { Q } from '@nozbe/watermelondb';
|
import React from 'react';
|
||||||
import React, { useEffect, useRef, useState } from 'react';
|
|
||||||
import { shallowEqual, useSelector } from 'react-redux';
|
import { shallowEqual, useSelector } from 'react-redux';
|
||||||
import { Observable, Subscription } from 'rxjs';
|
|
||||||
|
|
||||||
import { IApplicationState, TSubscriptionModel, TUserModel } from '../../definitions';
|
import { IApplicationState } from '../../definitions';
|
||||||
import database from '../../lib/database';
|
|
||||||
import { getUserSelector } from '../../selectors/login';
|
import { getUserSelector } from '../../selectors/login';
|
||||||
import Avatar from './Avatar';
|
import Avatar from './Avatar';
|
||||||
import { IAvatar } from './interfaces';
|
import { IAvatar } from './interfaces';
|
||||||
|
import { useAvatarETag } from './useAvatarETag';
|
||||||
|
|
||||||
const AvatarContainer = ({
|
const AvatarContainer = ({
|
||||||
style,
|
style,
|
||||||
|
@ -23,17 +21,13 @@ const AvatarContainer = ({
|
||||||
isStatic,
|
isStatic,
|
||||||
rid
|
rid
|
||||||
}: IAvatar): React.ReactElement => {
|
}: IAvatar): React.ReactElement => {
|
||||||
const subscription = useRef<Subscription>();
|
|
||||||
const [avatarETag, setAvatarETag] = useState<string | undefined>('');
|
|
||||||
|
|
||||||
const isDirect = () => type === 'd';
|
|
||||||
|
|
||||||
const server = useSelector((state: IApplicationState) => state.share.server.server || state.server.server);
|
const server = useSelector((state: IApplicationState) => state.share.server.server || state.server.server);
|
||||||
const serverVersion = useSelector((state: IApplicationState) => state.share.server.version || state.server.version);
|
const serverVersion = useSelector((state: IApplicationState) => state.share.server.version || state.server.version);
|
||||||
const { id, token } = useSelector(
|
const { id, token, username } = useSelector(
|
||||||
(state: IApplicationState) => ({
|
(state: IApplicationState) => ({
|
||||||
id: getUserSelector(state).id,
|
id: getUserSelector(state).id,
|
||||||
token: getUserSelector(state).token
|
token: getUserSelector(state).token,
|
||||||
|
username: getUserSelector(state).username
|
||||||
}),
|
}),
|
||||||
shallowEqual
|
shallowEqual
|
||||||
);
|
);
|
||||||
|
@ -48,41 +42,7 @@ const AvatarContainer = ({
|
||||||
true
|
true
|
||||||
);
|
);
|
||||||
|
|
||||||
const init = async () => {
|
const { avatarETag } = useAvatarETag({ username, text, type, rid, id });
|
||||||
const db = database.active;
|
|
||||||
const usersCollection = db.get('users');
|
|
||||||
const subsCollection = db.get('subscriptions');
|
|
||||||
|
|
||||||
let record;
|
|
||||||
try {
|
|
||||||
if (isDirect()) {
|
|
||||||
const [user] = await usersCollection.query(Q.where('username', text)).fetch();
|
|
||||||
record = user;
|
|
||||||
} else if (rid) {
|
|
||||||
record = await subsCollection.find(rid);
|
|
||||||
}
|
|
||||||
} catch {
|
|
||||||
// Record not found
|
|
||||||
}
|
|
||||||
|
|
||||||
if (record) {
|
|
||||||
const observable = record.observe() as Observable<TSubscriptionModel | TUserModel>;
|
|
||||||
subscription.current = observable.subscribe(r => {
|
|
||||||
setAvatarETag(r.avatarETag);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
if (!avatarETag) {
|
|
||||||
init();
|
|
||||||
}
|
|
||||||
return () => {
|
|
||||||
if (subscription?.current?.unsubscribe) {
|
|
||||||
subscription.current.unsubscribe();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}, [text, type, size, avatarETag, externalProviderUrl]);
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Avatar
|
<Avatar
|
|
@ -0,0 +1,85 @@
|
||||||
|
import React from 'react';
|
||||||
|
import { StyleSheet } from 'react-native';
|
||||||
|
|
||||||
|
import Button from '../Button';
|
||||||
|
import AvatarContainer from './AvatarContainer';
|
||||||
|
import { IAvatar } from './interfaces';
|
||||||
|
import I18n from '../../i18n';
|
||||||
|
import { useTheme } from '../../theme';
|
||||||
|
import { BUTTON_HIT_SLOP } from '../message/utils';
|
||||||
|
import { useAppSelector } from '../../lib/hooks';
|
||||||
|
import { compareServerVersion } from '../../lib/methods/helpers';
|
||||||
|
import sharedStyles from '../../views/Styles';
|
||||||
|
|
||||||
|
const styles = StyleSheet.create({
|
||||||
|
editAvatarButton: {
|
||||||
|
marginTop: 8,
|
||||||
|
paddingVertical: 8,
|
||||||
|
paddingHorizontal: 12,
|
||||||
|
marginBottom: 0,
|
||||||
|
height: undefined
|
||||||
|
},
|
||||||
|
textButton: {
|
||||||
|
fontSize: 12,
|
||||||
|
...sharedStyles.textSemibold
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
interface IAvatarContainer extends Omit<IAvatar, 'size'> {
|
||||||
|
handleEdit?: () => void;
|
||||||
|
}
|
||||||
|
|
||||||
|
const AvatarWithEdit = ({
|
||||||
|
style,
|
||||||
|
text = '',
|
||||||
|
avatar,
|
||||||
|
emoji,
|
||||||
|
borderRadius,
|
||||||
|
type,
|
||||||
|
children,
|
||||||
|
onPress,
|
||||||
|
getCustomEmoji,
|
||||||
|
isStatic,
|
||||||
|
rid,
|
||||||
|
handleEdit
|
||||||
|
}: IAvatarContainer): React.ReactElement => {
|
||||||
|
const { colors } = useTheme();
|
||||||
|
|
||||||
|
const { serverVersion } = useAppSelector(state => ({
|
||||||
|
serverVersion: state.server.version
|
||||||
|
}));
|
||||||
|
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<AvatarContainer
|
||||||
|
style={style}
|
||||||
|
text={text}
|
||||||
|
avatar={avatar}
|
||||||
|
emoji={emoji}
|
||||||
|
size={120}
|
||||||
|
borderRadius={borderRadius}
|
||||||
|
type={type}
|
||||||
|
children={children}
|
||||||
|
onPress={onPress}
|
||||||
|
getCustomEmoji={getCustomEmoji}
|
||||||
|
isStatic={isStatic}
|
||||||
|
rid={rid}
|
||||||
|
/>
|
||||||
|
{handleEdit && serverVersion && compareServerVersion(serverVersion, 'greaterThanOrEqualTo', '3.6.0') ? (
|
||||||
|
<Button
|
||||||
|
title={I18n.t('Edit')}
|
||||||
|
type='secondary'
|
||||||
|
backgroundColor={colors.editAndUploadButtonAvatar}
|
||||||
|
onPress={handleEdit}
|
||||||
|
testID='avatar-edit-button'
|
||||||
|
style={styles.editAvatarButton}
|
||||||
|
styleText={styles.textButton}
|
||||||
|
color={colors.titleText}
|
||||||
|
hitSlop={BUTTON_HIT_SLOP}
|
||||||
|
/>
|
||||||
|
) : null}
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default AvatarWithEdit;
|
|
@ -0,0 +1,5 @@
|
||||||
|
import Avatar from './AvatarContainer';
|
||||||
|
|
||||||
|
export { default as AvatarWithEdit } from './AvatarWithEdit';
|
||||||
|
|
||||||
|
export default Avatar;
|
|
@ -0,0 +1,67 @@
|
||||||
|
import { Q } from '@nozbe/watermelondb';
|
||||||
|
import { useEffect, useState } from 'react';
|
||||||
|
import { Observable, Subscription } from 'rxjs';
|
||||||
|
|
||||||
|
import { TLoggedUserModel, TSubscriptionModel, TUserModel } from '../../definitions';
|
||||||
|
import database from '../../lib/database';
|
||||||
|
|
||||||
|
export const useAvatarETag = ({
|
||||||
|
username,
|
||||||
|
text,
|
||||||
|
type = '',
|
||||||
|
rid,
|
||||||
|
id
|
||||||
|
}: {
|
||||||
|
type?: string;
|
||||||
|
username: string;
|
||||||
|
text: string;
|
||||||
|
rid?: string;
|
||||||
|
id: string;
|
||||||
|
}) => {
|
||||||
|
const [avatarETag, setAvatarETag] = useState<string | undefined>('');
|
||||||
|
|
||||||
|
const isDirect = () => type === 'd';
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
let subscription: Subscription;
|
||||||
|
if (!avatarETag) {
|
||||||
|
const observeAvatarETag = async () => {
|
||||||
|
const db = database.active;
|
||||||
|
const usersCollection = db.get('users');
|
||||||
|
const subsCollection = db.get('subscriptions');
|
||||||
|
|
||||||
|
let record;
|
||||||
|
try {
|
||||||
|
if (username === text) {
|
||||||
|
const serversDB = database.servers;
|
||||||
|
const userCollections = serversDB.get('users');
|
||||||
|
const user = await userCollections.find(id);
|
||||||
|
record = user;
|
||||||
|
} else if (isDirect()) {
|
||||||
|
const [user] = await usersCollection.query(Q.where('username', text)).fetch();
|
||||||
|
record = user;
|
||||||
|
} else if (rid) {
|
||||||
|
record = await subsCollection.find(rid);
|
||||||
|
}
|
||||||
|
} catch {
|
||||||
|
// Record not found
|
||||||
|
}
|
||||||
|
|
||||||
|
if (record) {
|
||||||
|
const observable = record.observe() as Observable<TSubscriptionModel | TUserModel | TLoggedUserModel>;
|
||||||
|
subscription = observable.subscribe(r => {
|
||||||
|
setAvatarETag(r.avatarETag);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
observeAvatarETag();
|
||||||
|
return () => {
|
||||||
|
if (subscription?.unsubscribe) {
|
||||||
|
subscription.unsubscribe();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}, [text]);
|
||||||
|
|
||||||
|
return { avatarETag };
|
||||||
|
};
|
|
@ -14,7 +14,7 @@ interface IButtonProps extends PlatformTouchableProps {
|
||||||
loading?: boolean;
|
loading?: boolean;
|
||||||
color?: string;
|
color?: string;
|
||||||
fontSize?: number;
|
fontSize?: number;
|
||||||
styleText?: StyleProp<TextStyle>[];
|
styleText?: StyleProp<TextStyle> | StyleProp<TextStyle>[];
|
||||||
}
|
}
|
||||||
|
|
||||||
const styles = StyleSheet.create({
|
const styles = StyleSheet.create({
|
||||||
|
|
|
@ -1,31 +1,34 @@
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
import { useWindowDimensions } from 'react-native';
|
||||||
import { FlatList } from 'react-native-gesture-handler';
|
import { FlatList } from 'react-native-gesture-handler';
|
||||||
|
|
||||||
import { IEmoji } from '../../definitions/IEmoji';
|
|
||||||
import scrollPersistTaps from '../../lib/methods/helpers/scrollPersistTaps';
|
|
||||||
import { PressableEmoji } from './PressableEmoji';
|
|
||||||
import { EMOJI_BUTTON_SIZE } from './styles';
|
import { EMOJI_BUTTON_SIZE } from './styles';
|
||||||
|
import scrollPersistTaps from '../../lib/methods/helpers/scrollPersistTaps';
|
||||||
|
import { IEmoji } from '../../definitions/IEmoji';
|
||||||
|
import { PressableEmoji } from './PressableEmoji';
|
||||||
|
|
||||||
interface IEmojiCategoryProps {
|
interface IEmojiCategoryProps {
|
||||||
emojis: IEmoji[];
|
emojis: IEmoji[];
|
||||||
onEmojiSelected: (emoji: IEmoji) => void;
|
onEmojiSelected: (emoji: IEmoji) => void;
|
||||||
tabLabel?: string; // needed for react-native-scrollable-tab-view only
|
tabLabel?: string; // needed for react-native-scrollable-tab-view only
|
||||||
parentWidth: number;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const EmojiCategory = ({ onEmojiSelected, emojis, parentWidth }: IEmojiCategoryProps): React.ReactElement | null => {
|
const EmojiCategory = ({ onEmojiSelected, emojis }: IEmojiCategoryProps): React.ReactElement | null => {
|
||||||
if (!parentWidth) {
|
const { width } = useWindowDimensions();
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
const numColumns = Math.trunc(parentWidth / EMOJI_BUTTON_SIZE);
|
const numColumns = Math.trunc(width / EMOJI_BUTTON_SIZE);
|
||||||
const marginHorizontal = (parentWidth % EMOJI_BUTTON_SIZE) / 2;
|
const marginHorizontal = (width % EMOJI_BUTTON_SIZE) / 2;
|
||||||
|
|
||||||
const renderItem = ({ item }: { item: IEmoji }) => <PressableEmoji emoji={item} onPress={onEmojiSelected} />;
|
const renderItem = ({ item }: { item: IEmoji }) => <PressableEmoji emoji={item} onPress={onEmojiSelected} />;
|
||||||
|
|
||||||
|
if (!width) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<FlatList
|
<FlatList
|
||||||
key={`emoji-category-${parentWidth}`}
|
// needed to update the numColumns when the width changes
|
||||||
|
key={`emoji-category-${width}`}
|
||||||
keyExtractor={item => (typeof item === 'string' ? item : item.name)}
|
keyExtractor={item => (typeof item === 'string' ? item : item.name)}
|
||||||
data={emojis}
|
data={emojis}
|
||||||
renderItem={renderItem}
|
renderItem={renderItem}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import React, { useState } from 'react';
|
import React from 'react';
|
||||||
import { View } from 'react-native';
|
import { View } from 'react-native';
|
||||||
import ScrollableTabView from 'react-native-scrollable-tab-view';
|
import ScrollableTabView from 'react-native-scrollable-tab-view';
|
||||||
|
|
||||||
|
@ -20,8 +20,6 @@ const EmojiPicker = ({
|
||||||
searchedEmojis = []
|
searchedEmojis = []
|
||||||
}: IEmojiPickerProps): React.ReactElement | null => {
|
}: IEmojiPickerProps): React.ReactElement | null => {
|
||||||
const { colors } = useTheme();
|
const { colors } = useTheme();
|
||||||
const [parentWidth, setParentWidth] = useState(0);
|
|
||||||
|
|
||||||
const { frequentlyUsed, loaded } = useFrequentlyUsedEmoji();
|
const { frequentlyUsed, loaded } = useFrequentlyUsedEmoji();
|
||||||
|
|
||||||
const allCustomEmojis: ICustomEmojis = useAppSelector(
|
const allCustomEmojis: ICustomEmojis = useAppSelector(
|
||||||
|
@ -52,14 +50,7 @@ const EmojiPicker = ({
|
||||||
if (!emojis.length) {
|
if (!emojis.length) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return (
|
return <EmojiCategory emojis={emojis} onEmojiSelected={(emoji: IEmoji) => handleEmojiSelect(emoji)} tabLabel={label} />;
|
||||||
<EmojiCategory
|
|
||||||
parentWidth={parentWidth}
|
|
||||||
emojis={emojis}
|
|
||||||
onEmojiSelected={(emoji: IEmoji) => handleEmojiSelect(emoji)}
|
|
||||||
tabLabel={label}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
if (!loaded) {
|
if (!loaded) {
|
||||||
|
@ -67,13 +58,9 @@ const EmojiPicker = ({
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<View style={styles.emojiPickerContainer} onLayout={e => setParentWidth(e.nativeEvent.layout.width)}>
|
<View style={styles.emojiPickerContainer}>
|
||||||
{searching ? (
|
{searching ? (
|
||||||
<EmojiCategory
|
<EmojiCategory emojis={searchedEmojis} onEmojiSelected={(emoji: IEmoji) => handleEmojiSelect(emoji)} />
|
||||||
emojis={searchedEmojis}
|
|
||||||
onEmojiSelected={(emoji: IEmoji) => handleEmojiSelect(emoji)}
|
|
||||||
parentWidth={parentWidth}
|
|
||||||
/>
|
|
||||||
) : (
|
) : (
|
||||||
<ScrollableTabView
|
<ScrollableTabView
|
||||||
renderTabBar={() => <TabBar />}
|
renderTabBar={() => <TabBar />}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import React, { useState } from 'react';
|
import React from 'react';
|
||||||
import { StyleProp, ViewStyle } from 'react-native';
|
import { StyleProp, ViewStyle } from 'react-native';
|
||||||
import { SvgUri } from 'react-native-svg';
|
import { SvgUri } from 'react-native-svg';
|
||||||
|
|
||||||
|
@ -29,12 +29,22 @@ interface IOmnichannelRoomIconProps {
|
||||||
}
|
}
|
||||||
|
|
||||||
export const OmnichannelRoomIcon = ({ size, style, sourceType, status }: IOmnichannelRoomIconProps) => {
|
export const OmnichannelRoomIcon = ({ size, style, sourceType, status }: IOmnichannelRoomIconProps) => {
|
||||||
const [loading, setLoading] = useState(true);
|
|
||||||
const [svgError, setSvgError] = useState(false);
|
|
||||||
const baseUrl = useAppSelector(state => state.server?.server);
|
const baseUrl = useAppSelector(state => state.server?.server);
|
||||||
const connected = useAppSelector(state => state.meteor?.connected);
|
const connected = useAppSelector(state => state.meteor?.connected);
|
||||||
|
|
||||||
const customIcon = (
|
if (sourceType?.type === OmnichannelSourceType.APP && sourceType.id && sourceType.sidebarIcon && connected) {
|
||||||
|
return (
|
||||||
|
<SvgUri
|
||||||
|
height={size}
|
||||||
|
width={size}
|
||||||
|
color={STATUS_COLORS[status || 'offline']}
|
||||||
|
uri={`${baseUrl}/api/apps/public/${sourceType.id}/get-sidebar-icon?icon=${sourceType.sidebarIcon}`}
|
||||||
|
style={style}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
<CustomIcon
|
<CustomIcon
|
||||||
name={iconMap[sourceType?.type || 'other']}
|
name={iconMap[sourceType?.type || 'other']}
|
||||||
size={size}
|
size={size}
|
||||||
|
@ -42,23 +52,4 @@ export const OmnichannelRoomIcon = ({ size, style, sourceType, status }: IOmnich
|
||||||
color={STATUS_COLORS[status || 'offline']}
|
color={STATUS_COLORS[status || 'offline']}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
|
|
||||||
if (!svgError && sourceType?.type === OmnichannelSourceType.APP && sourceType.id && sourceType.sidebarIcon && connected) {
|
|
||||||
return (
|
|
||||||
<>
|
|
||||||
<SvgUri
|
|
||||||
height={size}
|
|
||||||
width={size}
|
|
||||||
color={STATUS_COLORS[status || 'offline']}
|
|
||||||
uri={`${baseUrl}/api/apps/public/${sourceType.id}/get-sidebar-icon?icon=${sourceType.sidebarIcon}`}
|
|
||||||
style={style}
|
|
||||||
onError={() => setSvgError(true)}
|
|
||||||
onLoad={() => setLoading(false)}
|
|
||||||
/>
|
|
||||||
{loading ? customIcon : null}
|
|
||||||
</>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
return customIcon;
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -6,6 +6,7 @@ import i18n from '../../../../i18n';
|
||||||
import { getSubscriptionByRoomId } from '../../../../lib/database/services/Subscription';
|
import { getSubscriptionByRoomId } from '../../../../lib/database/services/Subscription';
|
||||||
import { useAppSelector } from '../../../../lib/hooks';
|
import { useAppSelector } from '../../../../lib/hooks';
|
||||||
import { getRoomAvatar, getUidDirectMessage } from '../../../../lib/methods/helpers';
|
import { getRoomAvatar, getUidDirectMessage } from '../../../../lib/methods/helpers';
|
||||||
|
import { videoConfStartAndJoin } from '../../../../lib/methods/videoConf';
|
||||||
import { useTheme } from '../../../../theme';
|
import { useTheme } from '../../../../theme';
|
||||||
import { useActionSheet } from '../../../ActionSheet';
|
import { useActionSheet } from '../../../ActionSheet';
|
||||||
import AvatarContainer from '../../../Avatar';
|
import AvatarContainer from '../../../Avatar';
|
||||||
|
@ -15,12 +16,12 @@ import { BUTTON_HIT_SLOP } from '../../../message/utils';
|
||||||
import StatusContainer from '../../../Status';
|
import StatusContainer from '../../../Status';
|
||||||
import useStyle from './styles';
|
import useStyle from './styles';
|
||||||
|
|
||||||
export default function StartACallActionSheet({ rid, initCall }: { rid: string; initCall: Function }): React.ReactElement {
|
export default function CallAgainActionSheet({ rid }: { rid: string }): React.ReactElement {
|
||||||
const style = useStyle();
|
const style = useStyle();
|
||||||
const { colors } = useTheme();
|
const { colors } = useTheme();
|
||||||
const [user, setUser] = useState({ username: '', avatar: '', uid: '' });
|
const [user, setUser] = useState({ username: '', avatar: '', uid: '', rid: '' });
|
||||||
const [mic, setMic] = useState(true);
|
const [phone, setPhone] = useState(true);
|
||||||
const [cam, setCam] = useState(false);
|
const [camera, setCamera] = useState(false);
|
||||||
const username = useAppSelector(state => state.login.user.username);
|
const username = useAppSelector(state => state.login.user.username);
|
||||||
|
|
||||||
const { hideActionSheet } = useActionSheet();
|
const { hideActionSheet } = useActionSheet();
|
||||||
|
@ -30,7 +31,7 @@ export default function StartACallActionSheet({ rid, initCall }: { rid: string;
|
||||||
const room = await getSubscriptionByRoomId(rid);
|
const room = await getSubscriptionByRoomId(rid);
|
||||||
const uid = (await getUidDirectMessage(room)) as string;
|
const uid = (await getUidDirectMessage(room)) as string;
|
||||||
const avt = getRoomAvatar(room);
|
const avt = getRoomAvatar(room);
|
||||||
setUser({ uid, username: room?.name || '', avatar: avt });
|
setUser({ uid, username: room?.name || '', avatar: avt, rid: room?.id || '' });
|
||||||
})();
|
})();
|
||||||
}, [rid]);
|
}, [rid]);
|
||||||
|
|
||||||
|
@ -42,27 +43,25 @@ export default function StartACallActionSheet({ rid, initCall }: { rid: string;
|
||||||
<Text style={style.actionSheetHeaderTitle}>{i18n.t('Start_a_call')}</Text>
|
<Text style={style.actionSheetHeaderTitle}>{i18n.t('Start_a_call')}</Text>
|
||||||
<View style={style.actionSheetHeaderButtons}>
|
<View style={style.actionSheetHeaderButtons}>
|
||||||
<Touchable
|
<Touchable
|
||||||
onPress={() => setCam(!cam)}
|
onPress={() => setCamera(!camera)}
|
||||||
style={[style.iconCallContainer, cam && style.enabledBackground, { marginRight: 6 }]}
|
style={[style.iconCallContainer, camera && style.enabledBackground, { marginRight: 6 }]}
|
||||||
hitSlop={BUTTON_HIT_SLOP}
|
hitSlop={BUTTON_HIT_SLOP}
|
||||||
>
|
>
|
||||||
<CustomIcon name={cam ? 'camera' : 'camera-disabled'} size={20} color={handleColor(cam)} />
|
<CustomIcon name={camera ? 'camera' : 'camera-disabled'} size={16} color={handleColor(camera)} />
|
||||||
</Touchable>
|
</Touchable>
|
||||||
<Touchable
|
<Touchable
|
||||||
onPress={() => setMic(!mic)}
|
onPress={() => setPhone(!phone)}
|
||||||
style={[style.iconCallContainer, mic && style.enabledBackground]}
|
style={[style.iconCallContainer, phone && style.enabledBackground]}
|
||||||
hitSlop={BUTTON_HIT_SLOP}
|
hitSlop={BUTTON_HIT_SLOP}
|
||||||
>
|
>
|
||||||
<CustomIcon name={mic ? 'microphone' : 'microphone-disabled'} size={20} color={handleColor(mic)} />
|
<CustomIcon name={phone ? 'microphone' : 'microphone-disabled'} size={16} color={handleColor(phone)} />
|
||||||
</Touchable>
|
</Touchable>
|
||||||
</View>
|
</View>
|
||||||
</View>
|
</View>
|
||||||
<View style={style.actionSheetUsernameContainer}>
|
<View style={style.actionSheetUsernameContainer}>
|
||||||
<AvatarContainer text={user.avatar} size={36} />
|
<AvatarContainer text={user.avatar} size={36} />
|
||||||
<StatusContainer size={16} id={user.uid} style={{ marginLeft: 8, marginRight: 6 }} />
|
<StatusContainer size={16} id={user.uid} style={{ marginLeft: 8, marginRight: 6 }} />
|
||||||
<Text style={style.actionSheetUsername} numberOfLines={1}>
|
<Text style={style.actionSheetUsername}>{user.username}</Text>
|
||||||
{user.username}
|
|
||||||
</Text>
|
|
||||||
</View>
|
</View>
|
||||||
<View style={style.actionSheetPhotoContainer}>
|
<View style={style.actionSheetPhotoContainer}>
|
||||||
<AvatarContainer size={62} text={username} />
|
<AvatarContainer size={62} text={username} />
|
||||||
|
@ -71,7 +70,7 @@ export default function StartACallActionSheet({ rid, initCall }: { rid: string;
|
||||||
onPress={() => {
|
onPress={() => {
|
||||||
hideActionSheet();
|
hideActionSheet();
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
initCall({ cam, mic });
|
videoConfStartAndJoin(user.rid, camera);
|
||||||
}, 100);
|
}, 100);
|
||||||
}}
|
}}
|
||||||
title={i18n.t('Call')}
|
title={i18n.t('Call')}
|
|
@ -3,16 +3,17 @@ import { Text } from 'react-native';
|
||||||
import Touchable from 'react-native-platform-touchable';
|
import Touchable from 'react-native-platform-touchable';
|
||||||
|
|
||||||
import i18n from '../../../../i18n';
|
import i18n from '../../../../i18n';
|
||||||
import { videoConfJoin } from '../../../../lib/methods/videoConf';
|
import { useVideoConf } from '../../../../lib/hooks/useVideoConf';
|
||||||
import useStyle from './styles';
|
import useStyle from './styles';
|
||||||
import { VideoConferenceBaseContainer } from './VideoConferenceBaseContainer';
|
import { VideoConferenceBaseContainer } from './VideoConferenceBaseContainer';
|
||||||
|
|
||||||
const VideoConferenceDirect = React.memo(({ blockId }: { blockId: string }) => {
|
const VideoConferenceDirect = React.memo(({ blockId }: { blockId: string }) => {
|
||||||
const style = useStyle();
|
const style = useStyle();
|
||||||
|
const { joinCall } = useVideoConf();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<VideoConferenceBaseContainer variant='incoming'>
|
<VideoConferenceBaseContainer variant='incoming'>
|
||||||
<Touchable style={style.callToActionButton} onPress={() => videoConfJoin(blockId)}>
|
<Touchable style={style.callToActionButton} onPress={() => joinCall(blockId)}>
|
||||||
<Text style={style.callToActionButtonText}>{i18n.t('Join')}</Text>
|
<Text style={style.callToActionButtonText}>{i18n.t('Join')}</Text>
|
||||||
</Touchable>
|
</Touchable>
|
||||||
<Text style={style.callBack}>{i18n.t('Waiting_for_answer')}</Text>
|
<Text style={style.callBack}>{i18n.t('Waiting_for_answer')}</Text>
|
||||||
|
|
|
@ -6,7 +6,9 @@ import { IUser } from '../../../../definitions';
|
||||||
import { VideoConferenceType } from '../../../../definitions/IVideoConference';
|
import { VideoConferenceType } from '../../../../definitions/IVideoConference';
|
||||||
import i18n from '../../../../i18n';
|
import i18n from '../../../../i18n';
|
||||||
import { useAppSelector } from '../../../../lib/hooks';
|
import { useAppSelector } from '../../../../lib/hooks';
|
||||||
import { useVideoConf } from '../../../../lib/hooks/useVideoConf';
|
import { useSnaps } from '../../../../lib/hooks/useSnaps';
|
||||||
|
import { useActionSheet } from '../../../ActionSheet';
|
||||||
|
import CallAgainActionSheet from './CallAgainActionSheet';
|
||||||
import { CallParticipants, TCallUsers } from './CallParticipants';
|
import { CallParticipants, TCallUsers } from './CallParticipants';
|
||||||
import useStyle from './styles';
|
import useStyle from './styles';
|
||||||
import { VideoConferenceBaseContainer } from './VideoConferenceBaseContainer';
|
import { VideoConferenceBaseContainer } from './VideoConferenceBaseContainer';
|
||||||
|
@ -24,7 +26,8 @@ export default function VideoConferenceEnded({
|
||||||
}): React.ReactElement {
|
}): React.ReactElement {
|
||||||
const style = useStyle();
|
const style = useStyle();
|
||||||
const username = useAppSelector(state => state.login.user.username);
|
const username = useAppSelector(state => state.login.user.username);
|
||||||
const { showInitCallActionSheet } = useVideoConf(rid);
|
const { showActionSheet } = useActionSheet();
|
||||||
|
const snaps = useSnaps([1250]);
|
||||||
|
|
||||||
const onlyAuthorOnCall = users.length === 1 && users.some(user => user.username === createdBy.username);
|
const onlyAuthorOnCall = users.length === 1 && users.some(user => user.username === createdBy.username);
|
||||||
|
|
||||||
|
@ -32,7 +35,15 @@ export default function VideoConferenceEnded({
|
||||||
<VideoConferenceBaseContainer variant='ended'>
|
<VideoConferenceBaseContainer variant='ended'>
|
||||||
{type === 'direct' ? (
|
{type === 'direct' ? (
|
||||||
<>
|
<>
|
||||||
<Touchable style={style.callToActionCallBack} onPress={showInitCallActionSheet}>
|
<Touchable
|
||||||
|
style={style.callToActionCallBack}
|
||||||
|
onPress={() =>
|
||||||
|
showActionSheet({
|
||||||
|
children: <CallAgainActionSheet rid={rid} />,
|
||||||
|
snaps
|
||||||
|
})
|
||||||
|
}
|
||||||
|
>
|
||||||
<Text style={style.callToActionCallBackText}>
|
<Text style={style.callToActionCallBackText}>
|
||||||
{createdBy.username === username ? i18n.t('Call_back') : i18n.t('Call_again')}
|
{createdBy.username === username ? i18n.t('Call_back') : i18n.t('Call_again')}
|
||||||
</Text>
|
</Text>
|
||||||
|
|
|
@ -3,17 +3,18 @@ import { Text } from 'react-native';
|
||||||
import Touchable from 'react-native-platform-touchable';
|
import Touchable from 'react-native-platform-touchable';
|
||||||
|
|
||||||
import i18n from '../../../../i18n';
|
import i18n from '../../../../i18n';
|
||||||
import { videoConfJoin } from '../../../../lib/methods/videoConf';
|
import { useVideoConf } from '../../../../lib/hooks/useVideoConf';
|
||||||
import { CallParticipants, TCallUsers } from './CallParticipants';
|
import { CallParticipants, TCallUsers } from './CallParticipants';
|
||||||
import useStyle from './styles';
|
import useStyle from './styles';
|
||||||
import { VideoConferenceBaseContainer } from './VideoConferenceBaseContainer';
|
import { VideoConferenceBaseContainer } from './VideoConferenceBaseContainer';
|
||||||
|
|
||||||
export default function VideoConferenceOutgoing({ users, blockId }: { users: TCallUsers; blockId: string }): React.ReactElement {
|
export default function VideoConferenceOutgoing({ users, blockId }: { users: TCallUsers; blockId: string }): React.ReactElement {
|
||||||
const style = useStyle();
|
const style = useStyle();
|
||||||
|
const { joinCall } = useVideoConf();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<VideoConferenceBaseContainer variant='outgoing'>
|
<VideoConferenceBaseContainer variant='outgoing'>
|
||||||
<Touchable style={style.callToActionButton} onPress={() => videoConfJoin(blockId)}>
|
<Touchable style={style.callToActionButton} onPress={() => joinCall(blockId)}>
|
||||||
<Text style={style.callToActionButtonText}>{i18n.t('Join')}</Text>
|
<Text style={style.callToActionButtonText}>{i18n.t('Join')}</Text>
|
||||||
</Touchable>
|
</Touchable>
|
||||||
<CallParticipants users={users} />
|
<CallParticipants users={users} />
|
||||||
|
|
|
@ -100,8 +100,7 @@ export default function useStyle() {
|
||||||
actionSheetUsername: {
|
actionSheetUsername: {
|
||||||
fontSize: 16,
|
fontSize: 16,
|
||||||
...sharedStyles.textBold,
|
...sharedStyles.textBold,
|
||||||
color: colors.passcodePrimary,
|
color: colors.passcodePrimary
|
||||||
flexShrink: 1
|
|
||||||
},
|
},
|
||||||
enabledBackground: {
|
enabledBackground: {
|
||||||
backgroundColor: colors.conferenceCallEnabledIconBackground
|
backgroundColor: colors.conferenceCallEnabledIconBackground
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
import { BlockContext } from '@rocket.chat/ui-kit';
|
import { BlockContext } from '@rocket.chat/ui-kit';
|
||||||
import React, { useContext, useState } from 'react';
|
import React, { useContext, useState } from 'react';
|
||||||
|
|
||||||
import { videoConfJoin } from '../../lib/methods/videoConf';
|
import { useVideoConf } from '../../lib/hooks/useVideoConf';
|
||||||
import { IText } from './interfaces';
|
import { IText } from './interfaces';
|
||||||
|
|
||||||
export const textParser = ([{ text }]: IText[]) => text;
|
export const textParser = ([{ text }]: IText[]) => text;
|
||||||
|
@ -40,6 +40,7 @@ export const useBlockContext = ({ blockId, actionId, appId, initialValue }: IUse
|
||||||
const { action, appId: appIdFromContext, viewId, state, language, errors, values = {} } = useContext(KitContext);
|
const { action, appId: appIdFromContext, viewId, state, language, errors, values = {} } = useContext(KitContext);
|
||||||
const { value = initialValue } = values[actionId] || {};
|
const { value = initialValue } = values[actionId] || {};
|
||||||
const [loading, setLoading] = useState(false);
|
const [loading, setLoading] = useState(false);
|
||||||
|
const { joinCall } = useVideoConf();
|
||||||
|
|
||||||
const error = errors && actionId && errors[actionId];
|
const error = errors && actionId && errors[actionId];
|
||||||
|
|
||||||
|
@ -57,7 +58,7 @@ export const useBlockContext = ({ blockId, actionId, appId, initialValue }: IUse
|
||||||
try {
|
try {
|
||||||
if (appId === 'videoconf-core' && blockId) {
|
if (appId === 'videoconf-core' && blockId) {
|
||||||
setLoading(false);
|
setLoading(false);
|
||||||
return videoConfJoin(blockId);
|
return joinCall(blockId);
|
||||||
}
|
}
|
||||||
await action({
|
await action({
|
||||||
blockId,
|
blockId,
|
||||||
|
|
|
@ -16,13 +16,11 @@ const styles = StyleSheet.create({
|
||||||
},
|
},
|
||||||
bottomContainerText: {
|
bottomContainerText: {
|
||||||
...sharedStyles.textRegular,
|
...sharedStyles.textRegular,
|
||||||
fontSize: 13,
|
fontSize: 13
|
||||||
textAlign: 'center'
|
|
||||||
},
|
},
|
||||||
bottomContainerTextBold: {
|
bottomContainerTextBold: {
|
||||||
...sharedStyles.textSemibold,
|
...sharedStyles.textSemibold,
|
||||||
fontSize: 13,
|
fontSize: 13
|
||||||
textAlign: 'center'
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,7 @@ interface IPlainProps {
|
||||||
value: PlainProps['value'];
|
value: PlainProps['value'];
|
||||||
}
|
}
|
||||||
|
|
||||||
const Plain = ({ value }: IPlainProps): React.ReactElement => (
|
const Plain = ({ value }: IPlainProps) => (
|
||||||
<Text accessibilityLabel={value} style={styles.plainText}>
|
<Text accessibilityLabel={value} style={styles.plainText}>
|
||||||
{value}
|
{value}
|
||||||
</Text>
|
</Text>
|
||||||
|
|
|
@ -4,6 +4,7 @@ import { Tasks as TasksProps } from '@rocket.chat/message-parser';
|
||||||
|
|
||||||
import Inline from './Inline';
|
import Inline from './Inline';
|
||||||
import styles from '../styles';
|
import styles from '../styles';
|
||||||
|
import { themes } from '../../../lib/constants';
|
||||||
import { useTheme } from '../../../theme';
|
import { useTheme } from '../../../theme';
|
||||||
|
|
||||||
interface ITasksProps {
|
interface ITasksProps {
|
||||||
|
@ -11,15 +12,13 @@ interface ITasksProps {
|
||||||
}
|
}
|
||||||
|
|
||||||
const TaskList = ({ value = [] }: ITasksProps) => {
|
const TaskList = ({ value = [] }: ITasksProps) => {
|
||||||
const { colors } = useTheme();
|
const { theme } = useTheme();
|
||||||
return (
|
return (
|
||||||
<View>
|
<View>
|
||||||
{value.map(item => (
|
{value.map(item => (
|
||||||
<View style={styles.row}>
|
<View style={styles.row}>
|
||||||
<Text style={[styles.text, { color: colors.bodyText }]}>{item.status ? '- [x] ' : '- [ ] '}</Text>
|
<Text style={[styles.text, { color: themes[theme].bodyText }]}>{item.status ? '- [x] ' : '- [ ] '}</Text>
|
||||||
<Text style={[styles.inline, { color: colors.bodyText }]}>
|
<Inline value={item.value} />
|
||||||
<Inline value={item.value} />
|
|
||||||
</Text>
|
|
||||||
</View>
|
</View>
|
||||||
))}
|
))}
|
||||||
</View>
|
</View>
|
||||||
|
|
|
@ -10,12 +10,12 @@ import { themes } from '../../lib/constants';
|
||||||
import { IMessageCallButton } from './interfaces';
|
import { IMessageCallButton } from './interfaces';
|
||||||
import { useTheme } from '../../theme';
|
import { useTheme } from '../../theme';
|
||||||
|
|
||||||
const CallButton = React.memo(({ handleEnterCall }: IMessageCallButton) => {
|
const CallButton = React.memo(({ callJitsi }: IMessageCallButton) => {
|
||||||
const { theme } = useTheme();
|
const { theme } = useTheme();
|
||||||
return (
|
return (
|
||||||
<View style={styles.buttonContainer}>
|
<View style={styles.buttonContainer}>
|
||||||
<Touchable
|
<Touchable
|
||||||
onPress={handleEnterCall}
|
onPress={callJitsi}
|
||||||
background={Touchable.Ripple(themes[theme].bannerBackground)}
|
background={Touchable.Ripple(themes[theme].bannerBackground)}
|
||||||
style={[styles.button, { backgroundColor: themes[theme].tintColor }]}
|
style={[styles.button, { backgroundColor: themes[theme].tintColor }]}
|
||||||
hitSlop={BUTTON_HIT_SLOP}
|
hitSlop={BUTTON_HIT_SLOP}
|
||||||
|
|
|
@ -53,7 +53,7 @@ const Content = React.memo(
|
||||||
content = (
|
content = (
|
||||||
<Markdown
|
<Markdown
|
||||||
msg={props.msg}
|
msg={props.msg}
|
||||||
md={props.type !== 'e2e' ? props.md : undefined}
|
md={props.md}
|
||||||
getCustomEmoji={props.getCustomEmoji}
|
getCustomEmoji={props.getCustomEmoji}
|
||||||
enableMessageParser={user.enableMessageParserEarlyAdoption}
|
enableMessageParser={user.enableMessageParserEarlyAdoption}
|
||||||
username={user.username}
|
username={user.username}
|
||||||
|
|
|
@ -18,7 +18,7 @@ const MessageAvatar = React.memo(({ isHeader, avatar, author, small, navToRoomIn
|
||||||
style={small ? styles.avatarSmall : styles.avatar}
|
style={small ? styles.avatarSmall : styles.avatar}
|
||||||
text={avatar ? '' : author.username}
|
text={avatar ? '' : author.username}
|
||||||
size={small ? 20 : 36}
|
size={small ? 20 : 36}
|
||||||
borderRadius={4}
|
borderRadius={small ? 2 : 4}
|
||||||
onPress={author._id === user.id ? undefined : () => navToRoomInfo(navParam)}
|
onPress={author._id === user.id ? undefined : () => navToRoomInfo(navParam)}
|
||||||
getCustomEmoji={getCustomEmoji}
|
getCustomEmoji={getCustomEmoji}
|
||||||
avatar={avatar}
|
avatar={avatar}
|
||||||
|
|
|
@ -247,8 +247,6 @@ const Reply = React.memo(
|
||||||
>
|
>
|
||||||
<View style={styles.attachmentContainer}>
|
<View style={styles.attachmentContainer}>
|
||||||
<Title attachment={attachment} timeFormat={timeFormat} theme={theme} />
|
<Title attachment={attachment} timeFormat={timeFormat} theme={theme} />
|
||||||
<Description attachment={attachment} getCustomEmoji={getCustomEmoji} theme={theme} />
|
|
||||||
<UrlImage image={attachment.thumb_url} />
|
|
||||||
<Attachments
|
<Attachments
|
||||||
attachments={attachment.attachments}
|
attachments={attachment.attachments}
|
||||||
getCustomEmoji={getCustomEmoji}
|
getCustomEmoji={getCustomEmoji}
|
||||||
|
@ -257,6 +255,8 @@ const Reply = React.memo(
|
||||||
isReply
|
isReply
|
||||||
id={messageId}
|
id={messageId}
|
||||||
/>
|
/>
|
||||||
|
<UrlImage image={attachment.thumb_url} />
|
||||||
|
<Description attachment={attachment} getCustomEmoji={getCustomEmoji} theme={theme} />
|
||||||
<Fields attachment={attachment} getCustomEmoji={getCustomEmoji} theme={theme} />
|
<Fields attachment={attachment} getCustomEmoji={getCustomEmoji} theme={theme} />
|
||||||
{loading ? (
|
{loading ? (
|
||||||
<View style={[styles.backdrop]}>
|
<View style={[styles.backdrop]}>
|
||||||
|
|
|
@ -50,7 +50,7 @@ interface IMessageContainerProps {
|
||||||
showAttachment: (file: IAttachment) => void;
|
showAttachment: (file: IAttachment) => void;
|
||||||
onReactionLongPress?: (item: TAnyMessageModel) => void;
|
onReactionLongPress?: (item: TAnyMessageModel) => void;
|
||||||
navToRoomInfo: (navParam: IRoomInfoParam) => void;
|
navToRoomInfo: (navParam: IRoomInfoParam) => void;
|
||||||
handleEnterCall?: () => void;
|
callJitsi?: () => void;
|
||||||
blockAction?: (params: { actionId: string; appId: string; value: string; blockId: string; rid: string; mid: string }) => void;
|
blockAction?: (params: { actionId: string; appId: string; value: string; blockId: string; rid: string; mid: string }) => void;
|
||||||
onAnswerButtonPress?: (message: string, tmid?: string, tshow?: boolean) => void;
|
onAnswerButtonPress?: (message: string, tmid?: string, tshow?: boolean) => void;
|
||||||
threadBadgeColor?: string;
|
threadBadgeColor?: string;
|
||||||
|
@ -69,6 +69,7 @@ class MessageContainer extends React.Component<IMessageContainerProps, IMessageC
|
||||||
static defaultProps = {
|
static defaultProps = {
|
||||||
getCustomEmoji: () => null,
|
getCustomEmoji: () => null,
|
||||||
onLongPress: () => {},
|
onLongPress: () => {},
|
||||||
|
callJitsi: () => {},
|
||||||
blockAction: () => {},
|
blockAction: () => {},
|
||||||
archived: false,
|
archived: false,
|
||||||
broadcast: false,
|
broadcast: false,
|
||||||
|
@ -337,7 +338,7 @@ class MessageContainer extends React.Component<IMessageContainerProps, IMessageC
|
||||||
navToRoomInfo,
|
navToRoomInfo,
|
||||||
getCustomEmoji,
|
getCustomEmoji,
|
||||||
isThreadRoom,
|
isThreadRoom,
|
||||||
handleEnterCall,
|
callJitsi,
|
||||||
blockAction,
|
blockAction,
|
||||||
rid,
|
rid,
|
||||||
threadBadgeColor,
|
threadBadgeColor,
|
||||||
|
@ -455,7 +456,7 @@ class MessageContainer extends React.Component<IMessageContainerProps, IMessageC
|
||||||
showAttachment={showAttachment}
|
showAttachment={showAttachment}
|
||||||
getCustomEmoji={getCustomEmoji}
|
getCustomEmoji={getCustomEmoji}
|
||||||
navToRoomInfo={navToRoomInfo}
|
navToRoomInfo={navToRoomInfo}
|
||||||
handleEnterCall={handleEnterCall}
|
callJitsi={callJitsi}
|
||||||
blockAction={blockAction}
|
blockAction={blockAction}
|
||||||
highlighted={highlighted}
|
highlighted={highlighted}
|
||||||
comment={comment}
|
comment={comment}
|
||||||
|
|
|
@ -40,7 +40,7 @@ export interface IMessageBroadcast {
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface IMessageCallButton {
|
export interface IMessageCallButton {
|
||||||
handleEnterCall?: () => void;
|
callJitsi?: () => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface IMessageContent {
|
export interface IMessageContent {
|
||||||
|
|
|
@ -17,16 +17,14 @@ export interface IAvatarButton {
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface IAvatar {
|
export interface IAvatar {
|
||||||
data: {} | string | null;
|
data: string | null;
|
||||||
url?: string;
|
url?: string;
|
||||||
contentType?: string;
|
contentType?: string;
|
||||||
service?: any;
|
service?: any;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface IAvatarSuggestion {
|
export interface IAvatarSuggestion {
|
||||||
[service: string]: {
|
url: string;
|
||||||
url: string;
|
blob: string;
|
||||||
blob: string;
|
contentType: string;
|
||||||
contentType: string;
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,34 +4,37 @@ import type { IRoom } from './IRoom';
|
||||||
import type { IUser } from './IUser';
|
import type { IUser } from './IUser';
|
||||||
import type { IMessage } from './IMessage';
|
import type { IMessage } from './IMessage';
|
||||||
|
|
||||||
export declare enum VideoConferenceStatus {
|
export enum VideoConferenceStatus {
|
||||||
CALLING = 0,
|
CALLING = 0,
|
||||||
STARTED = 1,
|
STARTED = 1,
|
||||||
EXPIRED = 2,
|
EXPIRED = 2,
|
||||||
ENDED = 3,
|
ENDED = 3,
|
||||||
DECLINED = 4
|
DECLINED = 4
|
||||||
}
|
}
|
||||||
export declare type DirectCallInstructions = {
|
|
||||||
|
export type DirectCallInstructions = {
|
||||||
type: 'direct';
|
type: 'direct';
|
||||||
calleeId: IUser['_id'];
|
callee: IUser['_id'];
|
||||||
callId: string;
|
callId: string;
|
||||||
};
|
};
|
||||||
export declare type ConferenceInstructions = {
|
|
||||||
|
export type ConferenceInstructions = {
|
||||||
type: 'videoconference';
|
type: 'videoconference';
|
||||||
callId: string;
|
callId: string;
|
||||||
rid: IRoom['_id'];
|
rid: IRoom['_id'];
|
||||||
};
|
};
|
||||||
export declare type LivechatInstructions = {
|
|
||||||
|
export type LivechatInstructions = {
|
||||||
type: 'livechat';
|
type: 'livechat';
|
||||||
callId: string;
|
callId: string;
|
||||||
};
|
};
|
||||||
export declare type VideoConferenceType =
|
|
||||||
| DirectCallInstructions['type']
|
export type VideoConferenceType = DirectCallInstructions['type'] | ConferenceInstructions['type'] | LivechatInstructions['type'];
|
||||||
| ConferenceInstructions['type']
|
|
||||||
| LivechatInstructions['type'];
|
|
||||||
export interface IVideoConferenceUser extends Pick<Required<IUser>, '_id' | 'username' | 'name' | 'avatarETag'> {
|
export interface IVideoConferenceUser extends Pick<Required<IUser>, '_id' | 'username' | 'name' | 'avatarETag'> {
|
||||||
ts: Date;
|
ts: Date;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface IVideoConference extends IRocketChatRecord {
|
export interface IVideoConference extends IRocketChatRecord {
|
||||||
type: VideoConferenceType;
|
type: VideoConferenceType;
|
||||||
rid: string;
|
rid: string;
|
||||||
|
@ -42,68 +45,51 @@ export interface IVideoConference extends IRocketChatRecord {
|
||||||
ended?: IMessage['_id'];
|
ended?: IMessage['_id'];
|
||||||
};
|
};
|
||||||
url?: string;
|
url?: string;
|
||||||
createdBy: Pick<Required<IUser>, '_id' | 'username' | 'name'>;
|
|
||||||
|
createdBy: Pick<IUser, '_id' | 'username' | 'name'>;
|
||||||
createdAt: Date;
|
createdAt: Date;
|
||||||
endedBy?: Pick<Required<IUser>, '_id' | 'username' | 'name'>;
|
|
||||||
|
endedBy?: Pick<IUser, '_id' | 'username' | 'name'>;
|
||||||
endedAt?: Date;
|
endedAt?: Date;
|
||||||
|
|
||||||
providerName: string;
|
providerName: string;
|
||||||
providerData?: Record<string, any>;
|
providerData?: Record<string, any>;
|
||||||
|
|
||||||
ringing?: boolean;
|
ringing?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface IDirectVideoConference extends IVideoConference {
|
export interface IDirectVideoConference extends IVideoConference {
|
||||||
type: 'direct';
|
type: 'direct';
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface IGroupVideoConference extends IVideoConference {
|
export interface IGroupVideoConference extends IVideoConference {
|
||||||
type: 'videoconference';
|
type: 'videoconference';
|
||||||
anonymousUsers: number;
|
anonymousUsers: number;
|
||||||
title: string;
|
title: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface ILivechatVideoConference extends IVideoConference {
|
export interface ILivechatVideoConference extends IVideoConference {
|
||||||
type: 'livechat';
|
type: 'livechat';
|
||||||
}
|
}
|
||||||
export declare type VideoConference = IDirectVideoConference | IGroupVideoConference | ILivechatVideoConference;
|
|
||||||
export declare type VideoConferenceInstructions = DirectCallInstructions | ConferenceInstructions | LivechatInstructions;
|
export type VideoConference = IDirectVideoConference | IGroupVideoConference | ILivechatVideoConference;
|
||||||
export declare const isDirectVideoConference: (call: VideoConference | undefined | null) => call is IDirectVideoConference;
|
|
||||||
export declare const isGroupVideoConference: (call: VideoConference | undefined | null) => call is IGroupVideoConference;
|
export type VideoConferenceInstructions = DirectCallInstructions | ConferenceInstructions | LivechatInstructions;
|
||||||
export declare const isLivechatVideoConference: (call: VideoConference | undefined | null) => call is ILivechatVideoConference;
|
|
||||||
declare type GroupVideoConferenceCreateData = Omit<IGroupVideoConference, 'createdBy'> & {
|
export const isDirectVideoConference = (call: VideoConference | undefined | null): call is IDirectVideoConference =>
|
||||||
createdBy: IUser['_id'];
|
call?.type === 'direct';
|
||||||
};
|
|
||||||
declare type DirectVideoConferenceCreateData = Omit<IDirectVideoConference, 'createdBy'> & {
|
export const isGroupVideoConference = (call: VideoConference | undefined | null): call is IGroupVideoConference =>
|
||||||
createdBy: IUser['_id'];
|
call?.type === 'videoconference';
|
||||||
};
|
|
||||||
declare type LivechatVideoConferenceCreateData = Omit<ILivechatVideoConference, 'createdBy'> & {
|
export const isLivechatVideoConference = (call: VideoConference | undefined | null): call is ILivechatVideoConference =>
|
||||||
createdBy: IUser['_id'];
|
call?.type === 'livechat';
|
||||||
};
|
|
||||||
export declare type VideoConferenceCreateData = AtLeast<
|
type GroupVideoConferenceCreateData = Omit<IGroupVideoConference, 'createdBy'> & { createdBy: IUser['_id'] };
|
||||||
|
type DirectVideoConferenceCreateData = Omit<IDirectVideoConference, 'createdBy'> & { createdBy: IUser['_id'] };
|
||||||
|
type LivechatVideoConferenceCreateData = Omit<ILivechatVideoConference, 'createdBy'> & { createdBy: IUser['_id'] };
|
||||||
|
|
||||||
|
export type VideoConferenceCreateData = AtLeast<
|
||||||
DirectVideoConferenceCreateData | GroupVideoConferenceCreateData | LivechatVideoConferenceCreateData,
|
DirectVideoConferenceCreateData | GroupVideoConferenceCreateData | LivechatVideoConferenceCreateData,
|
||||||
'createdBy' | 'type' | 'rid' | 'providerName' | 'providerData'
|
'createdBy' | 'type' | 'rid' | 'providerName' | 'providerData'
|
||||||
>;
|
>;
|
||||||
|
|
||||||
export type VideoConferenceCapabilities = {
|
|
||||||
mic?: boolean;
|
|
||||||
cam?: boolean;
|
|
||||||
title?: boolean;
|
|
||||||
};
|
|
||||||
|
|
||||||
export type VideoConfStartProps = { roomId: string; title?: string; allowRinging?: boolean };
|
|
||||||
|
|
||||||
export type VideoConfJoinProps = {
|
|
||||||
callId: string;
|
|
||||||
state?: {
|
|
||||||
mic?: boolean;
|
|
||||||
cam?: boolean;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
export type VideoConfCancelProps = {
|
|
||||||
callId: string;
|
|
||||||
};
|
|
||||||
|
|
||||||
export type VideoConfListProps = {
|
|
||||||
roomId: string;
|
|
||||||
count?: number;
|
|
||||||
offset?: number;
|
|
||||||
};
|
|
||||||
|
|
||||||
export type VideoConfInfoProps = { callId: string };
|
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
export type TChangeAvatarViewContext = 'profile' | 'room';
|
|
@ -1,45 +1,27 @@
|
||||||
import {
|
import { VideoConference } from '../../IVideoConference';
|
||||||
VideoConfCancelProps,
|
|
||||||
VideoConference,
|
|
||||||
VideoConferenceCapabilities,
|
|
||||||
VideoConferenceInstructions,
|
|
||||||
VideoConfInfoProps,
|
|
||||||
VideoConfJoinProps,
|
|
||||||
VideoConfListProps,
|
|
||||||
VideoConfStartProps
|
|
||||||
} from '../../IVideoConference';
|
|
||||||
import { PaginatedResult } from '../helpers/PaginatedResult';
|
|
||||||
|
|
||||||
export type VideoConferenceEndpoints = {
|
export type VideoConferenceEndpoints = {
|
||||||
'video-conference.start': {
|
|
||||||
POST: (params: VideoConfStartProps) => { data: VideoConferenceInstructions & { providerName: string } };
|
|
||||||
};
|
|
||||||
|
|
||||||
'video-conference.join': {
|
|
||||||
POST: (params: VideoConfJoinProps) => { url: string; providerName: string };
|
|
||||||
};
|
|
||||||
|
|
||||||
'video-conference.cancel': {
|
|
||||||
POST: (params: VideoConfCancelProps) => void;
|
|
||||||
};
|
|
||||||
|
|
||||||
'video-conference.info': {
|
|
||||||
GET: (params: VideoConfInfoProps) => VideoConference & { capabilities: VideoConferenceCapabilities };
|
|
||||||
};
|
|
||||||
|
|
||||||
'video-conference.list': {
|
|
||||||
GET: (params: VideoConfListProps) => PaginatedResult<{ data: VideoConference[] }>;
|
|
||||||
};
|
|
||||||
|
|
||||||
'video-conference.capabilities': {
|
|
||||||
GET: () => { providerName: string; capabilities: VideoConferenceCapabilities };
|
|
||||||
};
|
|
||||||
|
|
||||||
'video-conference.providers': {
|
|
||||||
GET: () => { data: { key: string; label: string }[] };
|
|
||||||
};
|
|
||||||
|
|
||||||
'video-conference/jitsi.update-timeout': {
|
'video-conference/jitsi.update-timeout': {
|
||||||
POST: (params: { roomId: string }) => void;
|
POST: (params: { roomId: string }) => void;
|
||||||
};
|
};
|
||||||
|
'video-conference.join': {
|
||||||
|
POST: (params: { callId: string; state: { cam: boolean } }) => { url: string; providerName: string };
|
||||||
|
};
|
||||||
|
'video-conference.start': {
|
||||||
|
POST: (params: { roomId: string }) => { url: string };
|
||||||
|
};
|
||||||
|
|
||||||
|
'video-conference.cancel': {
|
||||||
|
POST: (params: { callId: string }) => void;
|
||||||
|
};
|
||||||
|
|
||||||
|
'video-conference.info': {
|
||||||
|
GET: (params: { callId: string }) => VideoConference & {
|
||||||
|
capabilities: {
|
||||||
|
mic?: boolean;
|
||||||
|
cam?: boolean;
|
||||||
|
title?: boolean;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -12,6 +12,3 @@ declare module 'react-native-restart';
|
||||||
declare module 'react-native-jitsi-meet';
|
declare module 'react-native-jitsi-meet';
|
||||||
declare module 'rn-root-view';
|
declare module 'rn-root-view';
|
||||||
declare module 'react-native-math-view';
|
declare module 'react-native-math-view';
|
||||||
declare module '@env' {
|
|
||||||
export const RUNNING_E2E_TESTS: string;
|
|
||||||
}
|
|
||||||
|
|
|
@ -877,18 +877,14 @@
|
||||||
"Reply_in_direct_message": "Reply in Direct Message",
|
"Reply_in_direct_message": "Reply in Direct Message",
|
||||||
"room_archived": "archived room",
|
"room_archived": "archived room",
|
||||||
"room_unarchived": "unarchived room",
|
"room_unarchived": "unarchived room",
|
||||||
"no-videoconf-provider-app-header": "Conference call not available",
|
"Upload_image": "Upload image",
|
||||||
"no-videoconf-provider-app-body": "Conference call apps can be installed in the Rocket.Chat marketplace by a workspace admin.",
|
"Delete_image": "Delete image",
|
||||||
"admin-no-videoconf-provider-app-header": "Conference call not enabled",
|
"Images_uploaded": "Images uploaded",
|
||||||
"admin-no-videoconf-provider-app-body": "Conference call apps are available in the Rocket.Chat marketplace.",
|
"Avatar": "Avatar",
|
||||||
"no-active-video-conf-provider-header": "Conference call not enabled",
|
"insert_Avatar_URL": "insert image URL here",
|
||||||
"no-active-video-conf-provider-body": "A workspace admin needs to enable the conference call feature first.",
|
"Discard_changes":"Discard changes?",
|
||||||
"admin-no-active-video-conf-provider-header": "Conference call not enabled",
|
"Discard":"Discard",
|
||||||
"admin-no-active-video-conf-provider-body": "Configure conference calls in order to make it available on this workspace.",
|
"Discard_changes_description":"All changes will be lost if you go back without saving.",
|
||||||
"video-conf-provider-not-configured-header": "Conference call not enabled",
|
|
||||||
"video-conf-provider-not-configured-body": "A workspace admin needs to enable the conference calls feature first.",
|
|
||||||
"admin-video-conf-provider-not-configured-header": "Conference call not enabled",
|
|
||||||
"admin-video-conf-provider-not-configured-body": "Configure conference calls in order to make it available on this workspace.",
|
|
||||||
"Presence_Cap_Warning_Title": "User status temporarily disabled",
|
"Presence_Cap_Warning_Title": "User status temporarily disabled",
|
||||||
"Presence_Cap_Warning_Description": "Active connections have reached the limit for the workspace, thus the service that handles user status is disabled. It can be re-enabled manually in workspace settings.",
|
"Presence_Cap_Warning_Description": "Active connections have reached the limit for the workspace, thus the service that handles user status is disabled. It can be re-enabled manually in workspace settings.",
|
||||||
"Learn_more": "Learn more"
|
"Learn_more": "Learn more"
|
||||||
|
|
|
@ -876,6 +876,14 @@
|
||||||
"Reply_in_direct_message": "Responder por mensagem direta",
|
"Reply_in_direct_message": "Responder por mensagem direta",
|
||||||
"room_archived": "{{username}} arquivou a sala",
|
"room_archived": "{{username}} arquivou a sala",
|
||||||
"room_unarchived": "{{username}} desarquivou a sala",
|
"room_unarchived": "{{username}} desarquivou a sala",
|
||||||
|
"Upload_image": "Carregar imagem",
|
||||||
|
"Delete_image": "Deletar imagem",
|
||||||
|
"Images_uploaded": "Imagens carregadas",
|
||||||
|
"Avatar": "Avatar",
|
||||||
|
"insert_Avatar_URL": "insira o URL da imagem aqui",
|
||||||
|
"Discard_changes":"Descartar alterações?",
|
||||||
|
"Discard":"Descartar",
|
||||||
|
"Discard_changes_description":"Todas as alterações serão perdidas, se você sair sem salvar.",
|
||||||
"Presence_Cap_Warning_Title": "Status do usuário desabilitado temporariamente",
|
"Presence_Cap_Warning_Title": "Status do usuário desabilitado temporariamente",
|
||||||
"Presence_Cap_Warning_Description": "O limite de conexões ativas para a workspace foi atingido, por isso o serviço responsável pela presença dos usuários está temporariamente desabilitado. Ele pode ser reabilitado manualmente nas configurações da workspace."
|
"Presence_Cap_Warning_Description": "O limite de conexões ativas para a workspace foi atingido, por isso o serviço responsável pela presença dos usuários está temporariamente desabilitado. Ele pode ser reabilitado manualmente nas configurações da workspace."
|
||||||
}
|
}
|
|
@ -59,6 +59,7 @@ export const colors = {
|
||||||
buttonText: '#ffffff',
|
buttonText: '#ffffff',
|
||||||
passcodeBackground: '#EEEFF1',
|
passcodeBackground: '#EEEFF1',
|
||||||
passcodeButtonActive: '#E4E7EA',
|
passcodeButtonActive: '#E4E7EA',
|
||||||
|
editAndUploadButtonAvatar: '#E4E7EA',
|
||||||
passcodeLockIcon: '#6C727A',
|
passcodeLockIcon: '#6C727A',
|
||||||
passcodePrimary: '#2F343D',
|
passcodePrimary: '#2F343D',
|
||||||
passcodeSecondary: '#6C727A',
|
passcodeSecondary: '#6C727A',
|
||||||
|
@ -128,6 +129,7 @@ export const colors = {
|
||||||
buttonText: '#ffffff',
|
buttonText: '#ffffff',
|
||||||
passcodeBackground: '#030C1B',
|
passcodeBackground: '#030C1B',
|
||||||
passcodeButtonActive: '#0B182C',
|
passcodeButtonActive: '#0B182C',
|
||||||
|
editAndUploadButtonAvatar: '#0B182C',
|
||||||
passcodeLockIcon: '#6C727A',
|
passcodeLockIcon: '#6C727A',
|
||||||
passcodePrimary: '#FFFFFF',
|
passcodePrimary: '#FFFFFF',
|
||||||
passcodeSecondary: '#CBCED1',
|
passcodeSecondary: '#CBCED1',
|
||||||
|
@ -197,6 +199,7 @@ export const colors = {
|
||||||
buttonText: '#ffffff',
|
buttonText: '#ffffff',
|
||||||
passcodeBackground: '#000000',
|
passcodeBackground: '#000000',
|
||||||
passcodeButtonActive: '#0E0D0D',
|
passcodeButtonActive: '#0E0D0D',
|
||||||
|
editAndUploadButtonAvatar: '#0E0D0D',
|
||||||
passcodeLockIcon: '#6C727A',
|
passcodeLockIcon: '#6C727A',
|
||||||
passcodePrimary: '#FFFFFF',
|
passcodePrimary: '#FFFFFF',
|
||||||
passcodeSecondary: '#CBCED1',
|
passcodeSecondary: '#CBCED1',
|
||||||
|
|
|
@ -0,0 +1,27 @@
|
||||||
|
import { useCallback } from 'react';
|
||||||
|
|
||||||
|
import { TActionSheetOptionsItem, useActionSheet } from '../../containers/ActionSheet';
|
||||||
|
import i18n from '../../i18n';
|
||||||
|
import { videoConfJoin } from '../methods/videoConf';
|
||||||
|
|
||||||
|
export const useVideoConf = (): { joinCall: (blockId: string) => void } => {
|
||||||
|
const { showActionSheet } = useActionSheet();
|
||||||
|
|
||||||
|
const joinCall = useCallback(blockId => {
|
||||||
|
const options: TActionSheetOptionsItem[] = [
|
||||||
|
{
|
||||||
|
title: i18n.t('Video_call'),
|
||||||
|
icon: 'camera',
|
||||||
|
onPress: () => videoConfJoin(blockId, true)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: i18n.t('Voice_call'),
|
||||||
|
icon: 'microphone',
|
||||||
|
onPress: () => videoConfJoin(blockId, false)
|
||||||
|
}
|
||||||
|
];
|
||||||
|
showActionSheet({ options });
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
return { joinCall };
|
||||||
|
};
|
|
@ -1,113 +0,0 @@
|
||||||
import React, { useEffect, useState } from 'react';
|
|
||||||
import { Q } from '@nozbe/watermelondb';
|
|
||||||
|
|
||||||
import { useActionSheet } from '../../containers/ActionSheet';
|
|
||||||
import StartACallActionSheet from '../../containers/UIKit/VideoConferenceBlock/components/StartACallActionSheet';
|
|
||||||
import { ISubscription, SubscriptionType, TSubscriptionModel } from '../../definitions';
|
|
||||||
import i18n from '../../i18n';
|
|
||||||
import { getUserSelector } from '../../selectors/login';
|
|
||||||
import database from '../database';
|
|
||||||
import { getSubscriptionByRoomId } from '../database/services/Subscription';
|
|
||||||
import { callJitsi } from '../methods';
|
|
||||||
import { compareServerVersion, showErrorAlert } from '../methods/helpers';
|
|
||||||
import { videoConfStartAndJoin } from '../methods/videoConf';
|
|
||||||
import { Services } from '../services';
|
|
||||||
import { useAppSelector } from './useAppSelector';
|
|
||||||
import { useSnaps } from './useSnaps';
|
|
||||||
|
|
||||||
const availabilityErrors = {
|
|
||||||
NOT_CONFIGURED: 'video-conf-provider-not-configured',
|
|
||||||
NOT_ACTIVE: 'no-active-video-conf-provider',
|
|
||||||
NO_APP: 'no-videoconf-provider-app'
|
|
||||||
} as const;
|
|
||||||
|
|
||||||
const handleErrors = (isAdmin: boolean, error: typeof availabilityErrors[keyof typeof availabilityErrors]) => {
|
|
||||||
if (isAdmin) return showErrorAlert(i18n.t(`admin-${error}-body`), i18n.t(`admin-${error}-header`));
|
|
||||||
return showErrorAlert(i18n.t(`${error}-body`), i18n.t(`${error}-header`));
|
|
||||||
};
|
|
||||||
|
|
||||||
export const useVideoConf = (rid: string): { showInitCallActionSheet: () => Promise<void>; showCallOption: boolean } => {
|
|
||||||
const [showCallOption, setShowCallOption] = useState(false);
|
|
||||||
|
|
||||||
const serverVersion = useAppSelector(state => state.server.version);
|
|
||||||
const jitsiEnabled = useAppSelector(state => state.settings.Jitsi_Enabled);
|
|
||||||
const jitsiEnableTeams = useAppSelector(state => state.settings.Jitsi_Enable_Teams);
|
|
||||||
const jitsiEnableChannels = useAppSelector(state => state.settings.Jitsi_Enable_Channels);
|
|
||||||
const user = useAppSelector(state => getUserSelector(state));
|
|
||||||
|
|
||||||
const isServer5OrNewer = compareServerVersion(serverVersion, 'greaterThanOrEqualTo', '5.0.0');
|
|
||||||
|
|
||||||
const { showActionSheet } = useActionSheet();
|
|
||||||
const snaps = useSnaps([1250]);
|
|
||||||
|
|
||||||
const handleShowCallOption = (room: TSubscriptionModel) => {
|
|
||||||
if (isServer5OrNewer) return setShowCallOption(true);
|
|
||||||
const isJitsiDisabledForTeams = room.teamMain && !jitsiEnableTeams;
|
|
||||||
const isJitsiDisabledForChannels = !room.teamMain && (room.t === 'p' || room.t === 'c') && !jitsiEnableChannels;
|
|
||||||
|
|
||||||
if (room.t === SubscriptionType.DIRECT) return setShowCallOption(!!jitsiEnabled);
|
|
||||||
if (room.t === SubscriptionType.CHANNEL) return setShowCallOption(!isJitsiDisabledForChannels);
|
|
||||||
if (room.t === SubscriptionType.GROUP) return setShowCallOption(!isJitsiDisabledForTeams);
|
|
||||||
|
|
||||||
return setShowCallOption(false);
|
|
||||||
};
|
|
||||||
|
|
||||||
const canInitAnCall = async () => {
|
|
||||||
if (isServer5OrNewer) {
|
|
||||||
try {
|
|
||||||
await Services.videoConferenceGetCapabilities();
|
|
||||||
return true;
|
|
||||||
} catch (error: any) {
|
|
||||||
const isAdmin = !!['admin'].find(role => user.roles?.includes(role));
|
|
||||||
switch (error?.error) {
|
|
||||||
case availabilityErrors.NOT_CONFIGURED:
|
|
||||||
return handleErrors(isAdmin, availabilityErrors.NOT_CONFIGURED);
|
|
||||||
case availabilityErrors.NOT_ACTIVE:
|
|
||||||
return handleErrors(isAdmin, availabilityErrors.NOT_ACTIVE);
|
|
||||||
case availabilityErrors.NO_APP:
|
|
||||||
return handleErrors(isAdmin, availabilityErrors.NO_APP);
|
|
||||||
default:
|
|
||||||
return handleErrors(isAdmin, availabilityErrors.NOT_CONFIGURED);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
};
|
|
||||||
|
|
||||||
const initCall = async ({ cam, mic }: { cam: boolean; mic: boolean }) => {
|
|
||||||
if (isServer5OrNewer) return videoConfStartAndJoin({ rid, cam, mic });
|
|
||||||
const room = (await getSubscriptionByRoomId(rid)) as ISubscription;
|
|
||||||
callJitsi({ room, cam });
|
|
||||||
};
|
|
||||||
|
|
||||||
const showInitCallActionSheet = async () => {
|
|
||||||
const canInit = await canInitAnCall();
|
|
||||||
if (canInit) {
|
|
||||||
showActionSheet({
|
|
||||||
children: <StartACallActionSheet rid={rid} initCall={initCall} />,
|
|
||||||
snaps
|
|
||||||
});
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
const initSubscription = () => {
|
|
||||||
try {
|
|
||||||
const db = database.active;
|
|
||||||
const observeSubCollection = db.get('subscriptions').query(Q.where('rid', rid)).observe();
|
|
||||||
const subObserveQuery = observeSubCollection.subscribe(data => {
|
|
||||||
if (data[0]) {
|
|
||||||
handleShowCallOption(data[0]);
|
|
||||||
subObserveQuery.unsubscribe();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} catch (e) {
|
|
||||||
console.log("observeSubscriptions: Can't find subscription to observe");
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
initSubscription();
|
|
||||||
}, []);
|
|
||||||
|
|
||||||
return { showInitCallActionSheet, showCallOption };
|
|
||||||
};
|
|
|
@ -46,8 +46,8 @@ export function callJitsiWithoutServer(path: string): void {
|
||||||
Navigation.navigate('JitsiMeetView', { url, onlyAudio: false });
|
Navigation.navigate('JitsiMeetView', { url, onlyAudio: false });
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function callJitsi({ room, cam = false }: { room: ISubscription; cam?: boolean }): Promise<void> {
|
export async function callJitsi(room: ISubscription, onlyAudio = false): Promise<void> {
|
||||||
logEvent(cam ? events.RA_JITSI_AUDIO : events.RA_JITSI_VIDEO);
|
logEvent(onlyAudio ? events.RA_JITSI_AUDIO : events.RA_JITSI_VIDEO);
|
||||||
const url = await jitsiURL({ room });
|
const url = await jitsiURL({ room });
|
||||||
Navigation.navigate('JitsiMeetView', { url, onlyAudio: cam, rid: room?.rid });
|
Navigation.navigate('JitsiMeetView', { url, onlyAudio, rid: room?.rid });
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
import { Image } from 'react-native';
|
||||||
|
|
||||||
|
export const isImageURL = async (url: string): Promise<boolean> => {
|
||||||
|
try {
|
||||||
|
const result = await Image.prefetch(url);
|
||||||
|
return result;
|
||||||
|
} catch {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
};
|
|
@ -14,3 +14,4 @@ export * from './server';
|
||||||
export * from './url';
|
export * from './url';
|
||||||
export * from './isValidEmail';
|
export * from './isValidEmail';
|
||||||
export * from './random';
|
export * from './random';
|
||||||
|
export * from './image';
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
import { Alert, Linking } from 'react-native';
|
import { Alert, Linking } from 'react-native';
|
||||||
import AsyncStorage from '@react-native-async-storage/async-storage';
|
import AsyncStorage from '@react-native-async-storage/async-storage';
|
||||||
// eslint-disable-next-line import/no-unresolved
|
|
||||||
import { RUNNING_E2E_TESTS } from '@env';
|
|
||||||
|
|
||||||
import I18n from '../../../i18n';
|
import I18n from '../../../i18n';
|
||||||
import { isFDroidBuild, STORE_REVIEW_LINK } from '../../constants';
|
import { isFDroidBuild, STORE_REVIEW_LINK } from '../../constants';
|
||||||
|
@ -88,15 +86,14 @@ class ReviewApp {
|
||||||
positiveEventCount = 0;
|
positiveEventCount = 0;
|
||||||
|
|
||||||
pushPositiveEvent = () => {
|
pushPositiveEvent = () => {
|
||||||
if (isFDroidBuild || RUNNING_E2E_TESTS === 'true') {
|
if (!isFDroidBuild) {
|
||||||
return;
|
if (this.positiveEventCount >= numberOfPositiveEvent) {
|
||||||
}
|
return;
|
||||||
if (this.positiveEventCount >= numberOfPositiveEvent) {
|
}
|
||||||
return;
|
this.positiveEventCount += 1;
|
||||||
}
|
if (this.positiveEventCount === numberOfPositiveEvent) {
|
||||||
this.positiveEventCount += 1;
|
tryReview();
|
||||||
if (this.positiveEventCount === numberOfPositiveEvent) {
|
}
|
||||||
tryReview();
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -291,7 +291,7 @@ export default function subscribeRooms() {
|
||||||
const [type, data] = ddpMessage.fields.args;
|
const [type, data] = ddpMessage.fields.args;
|
||||||
const [, ev] = ddpMessage.fields.eventName.split('/');
|
const [, ev] = ddpMessage.fields.eventName.split('/');
|
||||||
if (/userData/.test(ev)) {
|
if (/userData/.test(ev)) {
|
||||||
const [{ diff }] = ddpMessage.fields.args;
|
const [{ diff, unset }] = ddpMessage.fields.args;
|
||||||
if (diff?.statusLivechat) {
|
if (diff?.statusLivechat) {
|
||||||
store.dispatch(setUser({ statusLivechat: diff.statusLivechat }));
|
store.dispatch(setUser({ statusLivechat: diff.statusLivechat }));
|
||||||
}
|
}
|
||||||
|
@ -301,6 +301,12 @@ export default function subscribeRooms() {
|
||||||
if ((['settings.preferences.alsoSendThreadToChannel'] as any) in diff) {
|
if ((['settings.preferences.alsoSendThreadToChannel'] as any) in diff) {
|
||||||
store.dispatch(setUser({ alsoSendThreadToChannel: diff['settings.preferences.alsoSendThreadToChannel'] }));
|
store.dispatch(setUser({ alsoSendThreadToChannel: diff['settings.preferences.alsoSendThreadToChannel'] }));
|
||||||
}
|
}
|
||||||
|
if (diff?.avatarETag) {
|
||||||
|
store.dispatch(setUser({ avatarETag: diff.avatarETag }));
|
||||||
|
}
|
||||||
|
if (unset?.avatarETag) {
|
||||||
|
store.dispatch(setUser({ avatarETag: '' }));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (/subscriptions/.test(ev)) {
|
if (/subscriptions/.test(ev)) {
|
||||||
if (type === 'removed') {
|
if (type === 'removed') {
|
||||||
|
|
|
@ -19,9 +19,9 @@ const handleBltPermission = async (): Promise<Permission[]> => {
|
||||||
return [PermissionsAndroid.PERMISSIONS.ACCESS_COARSE_LOCATION];
|
return [PermissionsAndroid.PERMISSIONS.ACCESS_COARSE_LOCATION];
|
||||||
};
|
};
|
||||||
|
|
||||||
export const videoConfJoin = async (callId: string, cam?: boolean, mic?: boolean): Promise<void> => {
|
export const videoConfJoin = async (callId: string, cam: boolean) => {
|
||||||
try {
|
try {
|
||||||
const result = await Services.videoConferenceJoin(callId, cam, mic);
|
const result = await Services.videoConferenceJoin(callId, cam);
|
||||||
if (result.success) {
|
if (result.success) {
|
||||||
if (isAndroid) {
|
if (isAndroid) {
|
||||||
const bltPermission = await handleBltPermission();
|
const bltPermission = await handleBltPermission();
|
||||||
|
@ -44,11 +44,11 @@ export const videoConfJoin = async (callId: string, cam?: boolean, mic?: boolean
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
export const videoConfStartAndJoin = async ({ rid, cam, mic }: { rid: string; cam?: boolean; mic?: boolean }): Promise<void> => {
|
export const videoConfStartAndJoin = async (rid: string, cam: boolean) => {
|
||||||
try {
|
try {
|
||||||
const videoConfResponse = await Services.videoConferenceStart(rid);
|
const videoConfResponse: any = await Services.videoConferenceStart(rid);
|
||||||
if (videoConfResponse.success) {
|
if (videoConfResponse.success) {
|
||||||
videoConfJoin(videoConfResponse.data.callId, cam, mic);
|
videoConfJoin(videoConfResponse.data.callId, cam);
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
showErrorAlert(i18n.t('error-init-video-conf'));
|
showErrorAlert(i18n.t('error-init-video-conf'));
|
||||||
|
|
|
@ -1,27 +0,0 @@
|
||||||
import BackgroundTimer from 'react-native-background-timer';
|
|
||||||
|
|
||||||
import { Services } from '../services';
|
|
||||||
|
|
||||||
let interval: number | null = null;
|
|
||||||
|
|
||||||
export const initVideoConfTimer = (rid: string): void => {
|
|
||||||
if (rid) {
|
|
||||||
Services.updateJitsiTimeout(rid).catch((e: unknown) => console.log(e));
|
|
||||||
if (interval) {
|
|
||||||
BackgroundTimer.clearInterval(interval);
|
|
||||||
BackgroundTimer.stopBackgroundTimer();
|
|
||||||
interval = null;
|
|
||||||
}
|
|
||||||
interval = BackgroundTimer.setInterval(() => {
|
|
||||||
Services.updateJitsiTimeout(rid).catch((e: unknown) => console.log(e));
|
|
||||||
}, 10000);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
export const endVideoConfTimer = (): void => {
|
|
||||||
if (interval) {
|
|
||||||
BackgroundTimer.clearInterval(interval);
|
|
||||||
interval = null;
|
|
||||||
BackgroundTimer.stopBackgroundTimer();
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -561,7 +561,7 @@ export const saveRoomSettings = (
|
||||||
rid: string,
|
rid: string,
|
||||||
params: {
|
params: {
|
||||||
roomName?: string;
|
roomName?: string;
|
||||||
roomAvatar?: string;
|
roomAvatar?: string | null;
|
||||||
roomDescription?: string;
|
roomDescription?: string;
|
||||||
roomTopic?: string;
|
roomTopic?: string;
|
||||||
roomAnnouncement?: string;
|
roomAnnouncement?: string;
|
||||||
|
@ -602,7 +602,7 @@ export const getRoomRoles = (
|
||||||
// RC 0.65.0
|
// RC 0.65.0
|
||||||
sdk.get(`${roomTypeToApiType(type)}.roles`, { roomId });
|
sdk.get(`${roomTypeToApiType(type)}.roles`, { roomId });
|
||||||
|
|
||||||
export const getAvatarSuggestion = (): Promise<IAvatarSuggestion> =>
|
export const getAvatarSuggestion = (): Promise<{ [service: string]: IAvatarSuggestion }> =>
|
||||||
// RC 0.51.0
|
// RC 0.51.0
|
||||||
sdk.methodCallWrapper('getAvatarSuggestion');
|
sdk.methodCallWrapper('getAvatarSuggestion');
|
||||||
|
|
||||||
|
@ -936,10 +936,8 @@ export function getUserInfo(userId: string) {
|
||||||
|
|
||||||
export const toggleFavorite = (roomId: string, favorite: boolean) => sdk.post('rooms.favorite', { roomId, favorite });
|
export const toggleFavorite = (roomId: string, favorite: boolean) => sdk.post('rooms.favorite', { roomId, favorite });
|
||||||
|
|
||||||
export const videoConferenceJoin = (callId: string, cam?: boolean, mic?: boolean) =>
|
export const videoConferenceJoin = (callId: string, cam: boolean) =>
|
||||||
sdk.post('video-conference.join', { callId, state: { cam: !!cam, mic: mic === undefined ? true : mic } });
|
sdk.post('video-conference.join', { callId, state: { cam } });
|
||||||
|
|
||||||
export const videoConferenceGetCapabilities = () => sdk.get('video-conference.capabilities');
|
|
||||||
|
|
||||||
export const videoConferenceStart = (roomId: string) => sdk.post('video-conference.start', { roomId });
|
export const videoConferenceStart = (roomId: string) => sdk.post('video-conference.start', { roomId });
|
||||||
|
|
||||||
|
|
|
@ -247,6 +247,22 @@ const handleLogout = function* handleLogout({ forcedByServer, message }) {
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleSetUser = function* handleSetUser({ user }) {
|
const handleSetUser = function* handleSetUser({ user }) {
|
||||||
|
if ('avatarETag' in user) {
|
||||||
|
const userId = yield select(state => state.login.user.id);
|
||||||
|
const serversDB = database.servers;
|
||||||
|
const userCollections = serversDB.get('users');
|
||||||
|
yield serversDB.write(async () => {
|
||||||
|
try {
|
||||||
|
const userRecord = await userCollections.find(userId);
|
||||||
|
await userRecord.update(record => {
|
||||||
|
record.avatarETag = user.avatarETag;
|
||||||
|
});
|
||||||
|
} catch {
|
||||||
|
//
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
setLanguage(user?.language);
|
setLanguage(user?.language);
|
||||||
|
|
||||||
if (user?.statusLivechat && isOmnichannelModuleAvailable()) {
|
if (user?.statusLivechat && isOmnichannelModuleAvailable()) {
|
||||||
|
|
|
@ -68,6 +68,7 @@ import AddChannelTeamView from '../views/AddChannelTeamView';
|
||||||
import AddExistingChannelView from '../views/AddExistingChannelView';
|
import AddExistingChannelView from '../views/AddExistingChannelView';
|
||||||
import SelectListView from '../views/SelectListView';
|
import SelectListView from '../views/SelectListView';
|
||||||
import DiscussionsView from '../views/DiscussionsView';
|
import DiscussionsView from '../views/DiscussionsView';
|
||||||
|
import ChangeAvatarView from '../views/ChangeAvatarView';
|
||||||
import {
|
import {
|
||||||
AdminPanelStackParamList,
|
AdminPanelStackParamList,
|
||||||
ChatsStackParamList,
|
ChatsStackParamList,
|
||||||
|
@ -96,6 +97,7 @@ const ChatsStackNavigator = () => {
|
||||||
<ChatsStack.Screen name='SelectListView' component={SelectListView} options={SelectListView.navigationOptions} />
|
<ChatsStack.Screen name='SelectListView' component={SelectListView} options={SelectListView.navigationOptions} />
|
||||||
<ChatsStack.Screen name='RoomInfoView' component={RoomInfoView} options={RoomInfoView.navigationOptions} />
|
<ChatsStack.Screen name='RoomInfoView' component={RoomInfoView} options={RoomInfoView.navigationOptions} />
|
||||||
<ChatsStack.Screen name='RoomInfoEditView' component={RoomInfoEditView} options={RoomInfoEditView.navigationOptions} />
|
<ChatsStack.Screen name='RoomInfoEditView' component={RoomInfoEditView} options={RoomInfoEditView.navigationOptions} />
|
||||||
|
<ChatsStack.Screen name='ChangeAvatarView' component={ChangeAvatarView} />
|
||||||
<ChatsStack.Screen name='RoomMembersView' component={RoomMembersView} />
|
<ChatsStack.Screen name='RoomMembersView' component={RoomMembersView} />
|
||||||
<ChatsStack.Screen name='DiscussionsView' component={DiscussionsView} />
|
<ChatsStack.Screen name='DiscussionsView' component={DiscussionsView} />
|
||||||
<ChatsStack.Screen
|
<ChatsStack.Screen
|
||||||
|
@ -151,6 +153,7 @@ const ProfileStackNavigator = () => {
|
||||||
>
|
>
|
||||||
<ProfileStack.Screen name='ProfileView' component={ProfileView} options={ProfileView.navigationOptions} />
|
<ProfileStack.Screen name='ProfileView' component={ProfileView} options={ProfileView.navigationOptions} />
|
||||||
<ProfileStack.Screen name='UserPreferencesView' component={UserPreferencesView} />
|
<ProfileStack.Screen name='UserPreferencesView' component={UserPreferencesView} />
|
||||||
|
<ProfileStack.Screen name='ChangeAvatarView' component={ChangeAvatarView} />
|
||||||
<ProfileStack.Screen name='UserNotificationPrefView' component={UserNotificationPrefView} />
|
<ProfileStack.Screen name='UserNotificationPrefView' component={UserNotificationPrefView} />
|
||||||
<ProfileStack.Screen name='PickerView' component={PickerView} options={PickerView.navigationOptions} />
|
<ProfileStack.Screen name='PickerView' component={PickerView} options={PickerView.navigationOptions} />
|
||||||
</ProfileStack.Navigator>
|
</ProfileStack.Navigator>
|
||||||
|
|
|
@ -17,6 +17,7 @@ import RoomsListView from '../../views/RoomsListView';
|
||||||
import RoomActionsView from '../../views/RoomActionsView';
|
import RoomActionsView from '../../views/RoomActionsView';
|
||||||
import RoomInfoView from '../../views/RoomInfoView';
|
import RoomInfoView from '../../views/RoomInfoView';
|
||||||
import RoomInfoEditView from '../../views/RoomInfoEditView';
|
import RoomInfoEditView from '../../views/RoomInfoEditView';
|
||||||
|
import ChangeAvatarView from '../../views/ChangeAvatarView';
|
||||||
import RoomMembersView from '../../views/RoomMembersView';
|
import RoomMembersView from '../../views/RoomMembersView';
|
||||||
import SearchMessagesView from '../../views/SearchMessagesView';
|
import SearchMessagesView from '../../views/SearchMessagesView';
|
||||||
import SelectedUsersView from '../../views/SelectedUsersView';
|
import SelectedUsersView from '../../views/SelectedUsersView';
|
||||||
|
@ -128,6 +129,7 @@ const ModalStackNavigator = React.memo(({ navigation }: INavigation) => {
|
||||||
<ModalStack.Screen name='RoomInfoView' component={RoomInfoView} options={RoomInfoView.navigationOptions} />
|
<ModalStack.Screen name='RoomInfoView' component={RoomInfoView} options={RoomInfoView.navigationOptions} />
|
||||||
<ModalStack.Screen name='SelectListView' component={SelectListView} />
|
<ModalStack.Screen name='SelectListView' component={SelectListView} />
|
||||||
<ModalStack.Screen name='RoomInfoEditView' component={RoomInfoEditView} options={RoomInfoEditView.navigationOptions} />
|
<ModalStack.Screen name='RoomInfoEditView' component={RoomInfoEditView} options={RoomInfoEditView.navigationOptions} />
|
||||||
|
<ModalStack.Screen name='ChangeAvatarView' component={ChangeAvatarView} />
|
||||||
<ModalStack.Screen name='RoomMembersView' component={RoomMembersView} />
|
<ModalStack.Screen name='RoomMembersView' component={RoomMembersView} />
|
||||||
<ModalStack.Screen
|
<ModalStack.Screen
|
||||||
name='SearchMessagesView'
|
name='SearchMessagesView'
|
||||||
|
|
|
@ -6,6 +6,7 @@ import { IMessage } from '../../definitions/IMessage';
|
||||||
import { ISubscription, SubscriptionType, TSubscriptionModel } from '../../definitions/ISubscription';
|
import { ISubscription, SubscriptionType, TSubscriptionModel } from '../../definitions/ISubscription';
|
||||||
import { ILivechatDepartment } from '../../definitions/ILivechatDepartment';
|
import { ILivechatDepartment } from '../../definitions/ILivechatDepartment';
|
||||||
import { ILivechatTag } from '../../definitions/ILivechatTag';
|
import { ILivechatTag } from '../../definitions/ILivechatTag';
|
||||||
|
import { TChangeAvatarViewContext } from '../../definitions/TChangeAvatarViewContext';
|
||||||
|
|
||||||
export type MasterDetailChatsStackParamList = {
|
export type MasterDetailChatsStackParamList = {
|
||||||
RoomView: {
|
RoomView: {
|
||||||
|
@ -58,6 +59,12 @@ export type ModalStackParamList = {
|
||||||
onSearch?: Function;
|
onSearch?: Function;
|
||||||
isRadio?: boolean;
|
isRadio?: boolean;
|
||||||
};
|
};
|
||||||
|
ChangeAvatarView: {
|
||||||
|
context: TChangeAvatarViewContext;
|
||||||
|
titleHeader?: string;
|
||||||
|
room?: ISubscription;
|
||||||
|
t?: SubscriptionType;
|
||||||
|
};
|
||||||
RoomInfoEditView: {
|
RoomInfoEditView: {
|
||||||
rid: string;
|
rid: string;
|
||||||
};
|
};
|
||||||
|
|
|
@ -13,6 +13,7 @@ import { ModalStackParamList } from './MasterDetailStack/types';
|
||||||
import { TThreadModel } from '../definitions';
|
import { TThreadModel } from '../definitions';
|
||||||
import { ILivechatDepartment } from '../definitions/ILivechatDepartment';
|
import { ILivechatDepartment } from '../definitions/ILivechatDepartment';
|
||||||
import { ILivechatTag } from '../definitions/ILivechatTag';
|
import { ILivechatTag } from '../definitions/ILivechatTag';
|
||||||
|
import { TChangeAvatarViewContext } from '../definitions/TChangeAvatarViewContext';
|
||||||
|
|
||||||
export type ChatsStackParamList = {
|
export type ChatsStackParamList = {
|
||||||
ModalStackNavigator: NavigatorScreenParams<ModalStackParamList>;
|
ModalStackNavigator: NavigatorScreenParams<ModalStackParamList>;
|
||||||
|
@ -181,6 +182,12 @@ export type ChatsStackParamList = {
|
||||||
onlyAudio?: boolean;
|
onlyAudio?: boolean;
|
||||||
videoConf?: boolean;
|
videoConf?: boolean;
|
||||||
};
|
};
|
||||||
|
ChangeAvatarView: {
|
||||||
|
context: TChangeAvatarViewContext;
|
||||||
|
titleHeader?: string;
|
||||||
|
room?: ISubscription;
|
||||||
|
t?: SubscriptionType;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
export type ProfileStackParamList = {
|
export type ProfileStackParamList = {
|
||||||
|
@ -195,6 +202,12 @@ export type ProfileStackParamList = {
|
||||||
goBack?: Function;
|
goBack?: Function;
|
||||||
onChangeValue: Function;
|
onChangeValue: Function;
|
||||||
};
|
};
|
||||||
|
ChangeAvatarView: {
|
||||||
|
context: TChangeAvatarViewContext;
|
||||||
|
titleHeader?: string;
|
||||||
|
room?: ISubscription;
|
||||||
|
t?: SubscriptionType;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
export type SettingsStackParamList = {
|
export type SettingsStackParamList = {
|
||||||
|
|
|
@ -0,0 +1,56 @@
|
||||||
|
import React, { useState, useEffect } from 'react';
|
||||||
|
import { Text, View } from 'react-native';
|
||||||
|
|
||||||
|
import { IAvatar } from '../../definitions';
|
||||||
|
import { Services } from '../../lib/services';
|
||||||
|
import I18n from '../../i18n';
|
||||||
|
import styles from './styles';
|
||||||
|
import { useTheme } from '../../theme';
|
||||||
|
import AvatarSuggestionItem from './AvatarSuggestionItem';
|
||||||
|
|
||||||
|
const AvatarSuggestion = ({
|
||||||
|
onPress,
|
||||||
|
username,
|
||||||
|
resetAvatar
|
||||||
|
}: {
|
||||||
|
onPress: (value: IAvatar) => void;
|
||||||
|
username?: string;
|
||||||
|
resetAvatar?: () => void;
|
||||||
|
}) => {
|
||||||
|
const [avatarSuggestions, setAvatarSuggestions] = useState<IAvatar[]>([]);
|
||||||
|
|
||||||
|
const { colors } = useTheme();
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
const getAvatarSuggestion = async () => {
|
||||||
|
const result = await Services.getAvatarSuggestion();
|
||||||
|
const suggestions = Object.keys(result).map(service => {
|
||||||
|
const { url, blob, contentType } = result[service];
|
||||||
|
return {
|
||||||
|
url,
|
||||||
|
data: blob,
|
||||||
|
service,
|
||||||
|
contentType
|
||||||
|
};
|
||||||
|
});
|
||||||
|
setAvatarSuggestions(suggestions);
|
||||||
|
};
|
||||||
|
getAvatarSuggestion();
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<View style={styles.containerImagesUploaded}>
|
||||||
|
<Text style={[styles.itemLabel, { color: colors.titleText }]}>{I18n.t('Images_uploaded')}</Text>
|
||||||
|
<View style={styles.containerAvatarSuggestion}>
|
||||||
|
{username && resetAvatar ? (
|
||||||
|
<AvatarSuggestionItem text={`@${username}`} testID={`reset-avatar-suggestion`} onPress={resetAvatar} />
|
||||||
|
) : null}
|
||||||
|
{avatarSuggestions.slice(0, 7).map(item => (
|
||||||
|
<AvatarSuggestionItem item={item} testID={`${item?.service}-avatar-suggestion`} onPress={onPress} />
|
||||||
|
))}
|
||||||
|
</View>
|
||||||
|
</View>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default AvatarSuggestion;
|
|
@ -0,0 +1,40 @@
|
||||||
|
import React from 'react';
|
||||||
|
import { View, StyleSheet } from 'react-native';
|
||||||
|
|
||||||
|
import { IAvatar } from '../../definitions';
|
||||||
|
import Avatar from '../../containers/Avatar';
|
||||||
|
import { useTheme } from '../../theme';
|
||||||
|
|
||||||
|
const styles = StyleSheet.create({
|
||||||
|
container: {
|
||||||
|
width: 64,
|
||||||
|
height: 64,
|
||||||
|
alignItems: 'center',
|
||||||
|
justifyContent: 'center',
|
||||||
|
marginRight: 20,
|
||||||
|
marginBottom: 12,
|
||||||
|
borderRadius: 4
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const AvatarSuggestionItem = ({
|
||||||
|
item,
|
||||||
|
onPress,
|
||||||
|
text,
|
||||||
|
testID
|
||||||
|
}: {
|
||||||
|
item?: IAvatar;
|
||||||
|
testID?: string;
|
||||||
|
onPress: Function;
|
||||||
|
text?: string;
|
||||||
|
}) => {
|
||||||
|
const { colors } = useTheme();
|
||||||
|
|
||||||
|
return (
|
||||||
|
<View key={item?.service} testID={testID} style={[styles.container, { backgroundColor: colors.borderColor }]}>
|
||||||
|
<Avatar avatar={item?.url} text={text} size={64} onPress={() => onPress(item)} />
|
||||||
|
</View>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default AvatarSuggestionItem;
|
|
@ -0,0 +1,29 @@
|
||||||
|
import React from 'react';
|
||||||
|
|
||||||
|
import I18n from '../../i18n';
|
||||||
|
import { FormTextInput } from '../../containers/TextInput';
|
||||||
|
import { useDebounce, isImageURL } from '../../lib/methods/helpers';
|
||||||
|
|
||||||
|
const AvatarUrl = ({ submit }: { submit: (value: string) => void }) => {
|
||||||
|
const handleChangeText = useDebounce(async (value: string) => {
|
||||||
|
if (value) {
|
||||||
|
const result = await isImageURL(value);
|
||||||
|
if (result) {
|
||||||
|
return submit(value);
|
||||||
|
}
|
||||||
|
return submit('');
|
||||||
|
}
|
||||||
|
}, 500);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<FormTextInput
|
||||||
|
label={I18n.t('Avatar_Url')}
|
||||||
|
placeholder={I18n.t('insert_Avatar_URL')}
|
||||||
|
onChangeText={handleChangeText}
|
||||||
|
testID='change-avatar-view-avatar-url'
|
||||||
|
containerStyle={{ marginBottom: 0 }}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default AvatarUrl;
|
|
@ -0,0 +1,250 @@
|
||||||
|
import React, { useEffect, useLayoutEffect, useReducer, useRef, useState } from 'react';
|
||||||
|
import { ScrollView, View } from 'react-native';
|
||||||
|
import { RouteProp, useNavigation, useRoute } from '@react-navigation/native';
|
||||||
|
import { StackNavigationProp } from '@react-navigation/stack';
|
||||||
|
import ImagePicker, { Image } from 'react-native-image-crop-picker';
|
||||||
|
import { shallowEqual } from 'react-redux';
|
||||||
|
|
||||||
|
import KeyboardView from '../../containers/KeyboardView';
|
||||||
|
import sharedStyles from '../Styles';
|
||||||
|
import scrollPersistTaps from '../../lib/methods/helpers/scrollPersistTaps';
|
||||||
|
import { showConfirmationAlert, showErrorAlert } from '../../lib/methods/helpers/info';
|
||||||
|
import StatusBar from '../../containers/StatusBar';
|
||||||
|
import { useTheme } from '../../theme';
|
||||||
|
import SafeAreaView from '../../containers/SafeAreaView';
|
||||||
|
import * as List from '../../containers/List';
|
||||||
|
import styles from './styles';
|
||||||
|
import { useAppSelector } from '../../lib/hooks';
|
||||||
|
import { getUserSelector } from '../../selectors/login';
|
||||||
|
import Avatar from '../../containers/Avatar';
|
||||||
|
import AvatarPresentational from '../../containers/Avatar/Avatar';
|
||||||
|
import AvatarUrl from './AvatarUrl';
|
||||||
|
import Button from '../../containers/Button';
|
||||||
|
import I18n from '../../i18n';
|
||||||
|
import { ChatsStackParamList } from '../../stacks/types';
|
||||||
|
import { IAvatar } from '../../definitions';
|
||||||
|
import AvatarSuggestion from './AvatarSuggestion';
|
||||||
|
import log from '../../lib/methods/helpers/log';
|
||||||
|
import { changeRoomsAvatar, changeUserAvatar, resetUserAvatar } from './submitServices';
|
||||||
|
|
||||||
|
enum AvatarStateActions {
|
||||||
|
CHANGE_AVATAR = 'CHANGE_AVATAR',
|
||||||
|
RESET_USER_AVATAR = 'RESET_USER_AVATAR',
|
||||||
|
RESET_ROOM_AVATAR = 'RESET_ROOM_AVATAR'
|
||||||
|
}
|
||||||
|
|
||||||
|
interface IReducerAction {
|
||||||
|
type: AvatarStateActions;
|
||||||
|
payload?: Partial<IState>;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface IState extends IAvatar {
|
||||||
|
resetUserAvatar: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
const initialState = {
|
||||||
|
data: '',
|
||||||
|
url: '',
|
||||||
|
contentType: '',
|
||||||
|
service: '',
|
||||||
|
resetUserAvatar: ''
|
||||||
|
};
|
||||||
|
|
||||||
|
function reducer(state: IState, action: IReducerAction) {
|
||||||
|
const { type, payload } = action;
|
||||||
|
if (type in AvatarStateActions) {
|
||||||
|
return {
|
||||||
|
...initialState,
|
||||||
|
...payload
|
||||||
|
};
|
||||||
|
}
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
|
||||||
|
const ChangeAvatarView = () => {
|
||||||
|
const [state, dispatch] = useReducer(reducer, initialState);
|
||||||
|
const [saving, setSaving] = useState(false);
|
||||||
|
const { colors } = useTheme();
|
||||||
|
const { userId, username, server } = useAppSelector(
|
||||||
|
state => ({
|
||||||
|
userId: getUserSelector(state).id,
|
||||||
|
username: getUserSelector(state).username,
|
||||||
|
server: state.server.server
|
||||||
|
}),
|
||||||
|
shallowEqual
|
||||||
|
);
|
||||||
|
const isDirty = useRef<boolean>(false);
|
||||||
|
const navigation = useNavigation<StackNavigationProp<ChatsStackParamList, 'ChangeAvatarView'>>();
|
||||||
|
const { context, titleHeader, room, t } = useRoute<RouteProp<ChatsStackParamList, 'ChangeAvatarView'>>().params;
|
||||||
|
|
||||||
|
useLayoutEffect(() => {
|
||||||
|
navigation.setOptions({
|
||||||
|
title: titleHeader || I18n.t('Avatar')
|
||||||
|
});
|
||||||
|
}, [titleHeader, navigation]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
navigation.addListener('beforeRemove', e => {
|
||||||
|
if (!isDirty.current) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
e.preventDefault();
|
||||||
|
|
||||||
|
showConfirmationAlert({
|
||||||
|
title: I18n.t('Discard_changes'),
|
||||||
|
message: I18n.t('Discard_changes_description'),
|
||||||
|
confirmationText: I18n.t('Discard'),
|
||||||
|
onPress: () => {
|
||||||
|
navigation.dispatch(e.data.action);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}, [navigation]);
|
||||||
|
|
||||||
|
const dispatchAvatar = (action: IReducerAction) => {
|
||||||
|
isDirty.current = true;
|
||||||
|
dispatch(action);
|
||||||
|
};
|
||||||
|
|
||||||
|
const submit = async () => {
|
||||||
|
try {
|
||||||
|
setSaving(true);
|
||||||
|
if (context === 'room' && room?.rid) {
|
||||||
|
// Change Rooms Avatar
|
||||||
|
await changeRoomsAvatar(room.rid, state?.data);
|
||||||
|
} else if (state?.url) {
|
||||||
|
// Change User's Avatar
|
||||||
|
await changeUserAvatar(state);
|
||||||
|
} else if (state.resetUserAvatar) {
|
||||||
|
// Change User's Avatar
|
||||||
|
await resetUserAvatar(userId);
|
||||||
|
}
|
||||||
|
isDirty.current = false;
|
||||||
|
} catch (e: any) {
|
||||||
|
log(e);
|
||||||
|
return showErrorAlert(e.message, I18n.t('Oops'));
|
||||||
|
} finally {
|
||||||
|
setSaving(false);
|
||||||
|
}
|
||||||
|
return navigation.goBack();
|
||||||
|
};
|
||||||
|
|
||||||
|
const pickImage = async () => {
|
||||||
|
const options = {
|
||||||
|
cropping: true,
|
||||||
|
compressImageQuality: 0.8,
|
||||||
|
freeStyleCropEnabled: true,
|
||||||
|
cropperAvoidEmptySpaceAroundImage: false,
|
||||||
|
cropperChooseText: I18n.t('Choose'),
|
||||||
|
cropperCancelText: I18n.t('Cancel'),
|
||||||
|
includeBase64: true
|
||||||
|
};
|
||||||
|
try {
|
||||||
|
const response: Image = await ImagePicker.openPicker(options);
|
||||||
|
dispatchAvatar({
|
||||||
|
type: AvatarStateActions.CHANGE_AVATAR,
|
||||||
|
payload: { url: response.path, data: `data:image/jpeg;base64,${response.data}`, service: 'upload' }
|
||||||
|
});
|
||||||
|
} catch (error) {
|
||||||
|
log(error);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const deletingRoomAvatar = context === 'room' && state.data === null;
|
||||||
|
|
||||||
|
return (
|
||||||
|
<KeyboardView
|
||||||
|
style={{ backgroundColor: colors.auxiliaryBackground }}
|
||||||
|
contentContainerStyle={sharedStyles.container}
|
||||||
|
keyboardVerticalOffset={128}
|
||||||
|
>
|
||||||
|
<StatusBar />
|
||||||
|
<SafeAreaView testID='change-avatar-view'>
|
||||||
|
<ScrollView
|
||||||
|
contentContainerStyle={sharedStyles.containerScrollView}
|
||||||
|
testID='change-avatar-view-list'
|
||||||
|
{...scrollPersistTaps}
|
||||||
|
>
|
||||||
|
<View style={styles.avatarContainer} testID='change-avatar-view-avatar'>
|
||||||
|
{deletingRoomAvatar ? (
|
||||||
|
<AvatarPresentational
|
||||||
|
text={room?.name || state.resetUserAvatar || username}
|
||||||
|
avatar={state?.url}
|
||||||
|
isStatic={state?.url}
|
||||||
|
size={120}
|
||||||
|
type={t}
|
||||||
|
server={server}
|
||||||
|
/>
|
||||||
|
) : (
|
||||||
|
<Avatar
|
||||||
|
text={room?.name || state.resetUserAvatar || username}
|
||||||
|
avatar={state?.url}
|
||||||
|
isStatic={state?.url}
|
||||||
|
size={120}
|
||||||
|
type={t}
|
||||||
|
rid={room?.rid}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
|
</View>
|
||||||
|
{context === 'profile' ? (
|
||||||
|
<AvatarUrl
|
||||||
|
submit={value =>
|
||||||
|
dispatchAvatar({
|
||||||
|
type: AvatarStateActions.CHANGE_AVATAR,
|
||||||
|
payload: { url: value, data: value, service: 'url' }
|
||||||
|
})
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
) : null}
|
||||||
|
<List.Separator style={styles.separator} />
|
||||||
|
{context === 'profile' ? (
|
||||||
|
<AvatarSuggestion
|
||||||
|
resetAvatar={() =>
|
||||||
|
dispatchAvatar({
|
||||||
|
type: AvatarStateActions.RESET_USER_AVATAR,
|
||||||
|
payload: { resetUserAvatar: `@${username}` }
|
||||||
|
})
|
||||||
|
}
|
||||||
|
username={username}
|
||||||
|
onPress={value =>
|
||||||
|
dispatchAvatar({
|
||||||
|
type: AvatarStateActions.CHANGE_AVATAR,
|
||||||
|
payload: value
|
||||||
|
})
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
) : null}
|
||||||
|
<Button
|
||||||
|
title={I18n.t('Upload_image')}
|
||||||
|
type='secondary'
|
||||||
|
disabled={saving}
|
||||||
|
backgroundColor={colors.editAndUploadButtonAvatar}
|
||||||
|
onPress={pickImage}
|
||||||
|
testID='change-avatar-view-logout-other-locations'
|
||||||
|
/>
|
||||||
|
{context === 'room' ? (
|
||||||
|
<Button
|
||||||
|
title={I18n.t('Delete_image')}
|
||||||
|
type='primary'
|
||||||
|
disabled={saving}
|
||||||
|
backgroundColor={colors.dangerColor}
|
||||||
|
onPress={() => dispatchAvatar({ type: AvatarStateActions.RESET_ROOM_AVATAR, payload: { data: null } })}
|
||||||
|
testID='change-avatar-view-delete-my-account'
|
||||||
|
/>
|
||||||
|
) : null}
|
||||||
|
<Button
|
||||||
|
title={I18n.t('Save')}
|
||||||
|
disabled={!isDirty.current || saving}
|
||||||
|
type='primary'
|
||||||
|
loading={saving}
|
||||||
|
onPress={submit}
|
||||||
|
testID='change-avatar-view-submit'
|
||||||
|
/>
|
||||||
|
</ScrollView>
|
||||||
|
</SafeAreaView>
|
||||||
|
</KeyboardView>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default ChangeAvatarView;
|
|
@ -0,0 +1,27 @@
|
||||||
|
import { StyleSheet } from 'react-native';
|
||||||
|
|
||||||
|
import sharedStyles from '../Styles';
|
||||||
|
|
||||||
|
export default StyleSheet.create({
|
||||||
|
avatarContainer: {
|
||||||
|
alignItems: 'center',
|
||||||
|
justifyContent: 'center',
|
||||||
|
marginBottom: 24
|
||||||
|
},
|
||||||
|
separator: {
|
||||||
|
marginVertical: 16
|
||||||
|
},
|
||||||
|
itemLabel: {
|
||||||
|
marginBottom: 12,
|
||||||
|
fontSize: 14,
|
||||||
|
...sharedStyles.textSemibold
|
||||||
|
},
|
||||||
|
containerImagesUploaded: {
|
||||||
|
flex: 1
|
||||||
|
},
|
||||||
|
containerAvatarSuggestion: {
|
||||||
|
flex: 1,
|
||||||
|
flexWrap: 'wrap',
|
||||||
|
flexDirection: 'row'
|
||||||
|
}
|
||||||
|
});
|
|
@ -0,0 +1,14 @@
|
||||||
|
import I18n from '../../i18n';
|
||||||
|
|
||||||
|
export const handleError = (e: any, action: string) => {
|
||||||
|
if (e.data && e.data.error.includes('[error-too-many-requests]')) {
|
||||||
|
throw new Error(e.data.error);
|
||||||
|
}
|
||||||
|
if (e.error && e.error === 'error-avatar-invalid-url') {
|
||||||
|
throw new Error(I18n.t(e.error, { url: e.details.url }));
|
||||||
|
}
|
||||||
|
if (I18n.isTranslated(e.error)) {
|
||||||
|
throw new Error(I18n.t(e.error));
|
||||||
|
}
|
||||||
|
throw new Error(I18n.t('There_was_an_error_while_action', { action: I18n.t(action) }));
|
||||||
|
};
|
|
@ -0,0 +1,29 @@
|
||||||
|
import { Services } from '../../lib/services';
|
||||||
|
import log from '../../lib/methods/helpers/log';
|
||||||
|
import { IAvatar } from '../../definitions';
|
||||||
|
import { handleError } from './submitHelpers';
|
||||||
|
|
||||||
|
export const changeRoomsAvatar = async (rid: string, roomAvatar: string | null) => {
|
||||||
|
try {
|
||||||
|
await Services.saveRoomSettings(rid, { roomAvatar });
|
||||||
|
} catch (e) {
|
||||||
|
log(e);
|
||||||
|
return handleError(e, 'changing_avatar');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
export const changeUserAvatar = async (avatarUpload: IAvatar) => {
|
||||||
|
try {
|
||||||
|
await Services.setAvatarFromService(avatarUpload);
|
||||||
|
} catch (e) {
|
||||||
|
return handleError(e, 'changing_avatar');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
export const resetUserAvatar = async (userId: string) => {
|
||||||
|
try {
|
||||||
|
await Services.resetAvatar(userId);
|
||||||
|
} catch (e) {
|
||||||
|
return handleError(e, 'changing_avatar');
|
||||||
|
}
|
||||||
|
};
|
|
@ -243,7 +243,7 @@ class DirectoryView extends React.Component<IDirectoryViewProps, IDirectoryViewS
|
||||||
title: item.name as string,
|
title: item.name as string,
|
||||||
onPress: () => this.onPressItem(item),
|
onPress: () => this.onPressItem(item),
|
||||||
baseUrl,
|
baseUrl,
|
||||||
testID: `directory-view-item-${item.name}`,
|
testID: `directory-view-item-${item.name}`.toLowerCase(),
|
||||||
style,
|
style,
|
||||||
user,
|
user,
|
||||||
theme,
|
theme,
|
||||||
|
|
|
@ -1,13 +1,14 @@
|
||||||
import { activateKeepAwake, deactivateKeepAwake } from 'expo-keep-awake';
|
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { BackHandler, NativeEventSubscription } from 'react-native';
|
import { BackHandler, NativeEventSubscription } from 'react-native';
|
||||||
|
import BackgroundTimer from 'react-native-background-timer';
|
||||||
import { isAppInstalled, openAppWithUri } from 'react-native-send-intent';
|
import { isAppInstalled, openAppWithUri } from 'react-native-send-intent';
|
||||||
import WebView from 'react-native-webview';
|
import WebView from 'react-native-webview';
|
||||||
import { WebViewMessage, WebViewNavigation } from 'react-native-webview/lib/WebViewTypes';
|
import { WebViewMessage, WebViewNavigation } from 'react-native-webview/lib/WebViewTypes';
|
||||||
|
import { activateKeepAwake, deactivateKeepAwake } from 'expo-keep-awake';
|
||||||
|
|
||||||
import { IBaseScreen } from '../definitions';
|
import { IBaseScreen } from '../definitions';
|
||||||
import { events, logEvent } from '../lib/methods/helpers/log';
|
import { events, logEvent } from '../lib/methods/helpers/log';
|
||||||
import { endVideoConfTimer, initVideoConfTimer } from '../lib/methods/videoConfTimer';
|
import { Services } from '../lib/services';
|
||||||
import { ChatsStackParamList } from '../stacks/types';
|
import { ChatsStackParamList } from '../stacks/types';
|
||||||
import { withTheme } from '../theme';
|
import { withTheme } from '../theme';
|
||||||
|
|
||||||
|
@ -19,6 +20,7 @@ class JitsiMeetView extends React.Component<TJitsiMeetViewProps> {
|
||||||
private rid: string;
|
private rid: string;
|
||||||
private url: string;
|
private url: string;
|
||||||
private videoConf: boolean;
|
private videoConf: boolean;
|
||||||
|
private jitsiTimeout: number | null;
|
||||||
private backHandler!: NativeEventSubscription;
|
private backHandler!: NativeEventSubscription;
|
||||||
|
|
||||||
constructor(props: TJitsiMeetViewProps) {
|
constructor(props: TJitsiMeetViewProps) {
|
||||||
|
@ -26,6 +28,7 @@ class JitsiMeetView extends React.Component<TJitsiMeetViewProps> {
|
||||||
this.rid = props.route.params?.rid;
|
this.rid = props.route.params?.rid;
|
||||||
this.url = props.route.params?.url;
|
this.url = props.route.params?.url;
|
||||||
this.videoConf = !!props.route.params?.videoConf;
|
this.videoConf = !!props.route.params?.videoConf;
|
||||||
|
this.jitsiTimeout = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
componentDidMount() {
|
componentDidMount() {
|
||||||
|
@ -47,8 +50,10 @@ class JitsiMeetView extends React.Component<TJitsiMeetViewProps> {
|
||||||
|
|
||||||
componentWillUnmount() {
|
componentWillUnmount() {
|
||||||
logEvent(this.videoConf ? events.LIVECHAT_VIDEOCONF_TERMINATE : events.JM_CONFERENCE_TERMINATE);
|
logEvent(this.videoConf ? events.LIVECHAT_VIDEOCONF_TERMINATE : events.JM_CONFERENCE_TERMINATE);
|
||||||
if (!this.videoConf) {
|
if (this.jitsiTimeout && !this.videoConf) {
|
||||||
endVideoConfTimer();
|
BackgroundTimer.clearInterval(this.jitsiTimeout);
|
||||||
|
this.jitsiTimeout = null;
|
||||||
|
BackgroundTimer.stopBackgroundTimer();
|
||||||
}
|
}
|
||||||
this.backHandler.remove();
|
this.backHandler.remove();
|
||||||
deactivateKeepAwake();
|
deactivateKeepAwake();
|
||||||
|
@ -59,7 +64,15 @@ class JitsiMeetView extends React.Component<TJitsiMeetViewProps> {
|
||||||
onConferenceJoined = () => {
|
onConferenceJoined = () => {
|
||||||
logEvent(this.videoConf ? events.LIVECHAT_VIDEOCONF_JOIN : events.JM_CONFERENCE_JOIN);
|
logEvent(this.videoConf ? events.LIVECHAT_VIDEOCONF_JOIN : events.JM_CONFERENCE_JOIN);
|
||||||
if (this.rid && !this.videoConf) {
|
if (this.rid && !this.videoConf) {
|
||||||
initVideoConfTimer(this.rid);
|
Services.updateJitsiTimeout(this.rid).catch((e: unknown) => console.log(e));
|
||||||
|
if (this.jitsiTimeout) {
|
||||||
|
BackgroundTimer.clearInterval(this.jitsiTimeout);
|
||||||
|
BackgroundTimer.stopBackgroundTimer();
|
||||||
|
this.jitsiTimeout = null;
|
||||||
|
}
|
||||||
|
this.jitsiTimeout = BackgroundTimer.setInterval(() => {
|
||||||
|
Services.updateJitsiTimeout(this.rid).catch((e: unknown) => console.log(e));
|
||||||
|
}, 10000);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -77,7 +90,7 @@ class JitsiMeetView extends React.Component<TJitsiMeetViewProps> {
|
||||||
render() {
|
render() {
|
||||||
return (
|
return (
|
||||||
<WebView
|
<WebView
|
||||||
source={{ uri: `${this.url}${this.url.includes('#config') ? '&' : '#'}config.disableDeepLinking=true` }}
|
source={{ uri: `${this.url}&config.disableDeepLinking=true` }}
|
||||||
onMessage={({ nativeEvent }) => this.onNavigationStateChange(nativeEvent)}
|
onMessage={({ nativeEvent }) => this.onNavigationStateChange(nativeEvent)}
|
||||||
onNavigationStateChange={this.onNavigationStateChange}
|
onNavigationStateChange={this.onNavigationStateChange}
|
||||||
style={{ flex: 1 }}
|
style={{ flex: 1 }}
|
||||||
|
|
|
@ -9,7 +9,6 @@ import { useAppSelector } from '../lib/hooks';
|
||||||
import { events, logEvent } from '../lib/methods/helpers/log';
|
import { events, logEvent } from '../lib/methods/helpers/log';
|
||||||
import { getUserSelector } from '../selectors/login';
|
import { getUserSelector } from '../selectors/login';
|
||||||
import { ChatsStackParamList } from '../stacks/types';
|
import { ChatsStackParamList } from '../stacks/types';
|
||||||
import { endVideoConfTimer, initVideoConfTimer } from '../lib/methods/videoConfTimer';
|
|
||||||
|
|
||||||
const formatUrl = (url: string, baseUrl: string, uriSize: number, avatarAuthURLFragment: string) =>
|
const formatUrl = (url: string, baseUrl: string, uriSize: number, avatarAuthURLFragment: string) =>
|
||||||
`${baseUrl}/avatar/${url}?format=png&width=${uriSize}&height=${uriSize}${avatarAuthURLFragment}`;
|
`${baseUrl}/avatar/${url}?format=png&width=${uriSize}&height=${uriSize}${avatarAuthURLFragment}`;
|
||||||
|
@ -17,7 +16,7 @@ const formatUrl = (url: string, baseUrl: string, uriSize: number, avatarAuthURLF
|
||||||
const JitsiMeetView = (): React.ReactElement => {
|
const JitsiMeetView = (): React.ReactElement => {
|
||||||
const { goBack } = useNavigation();
|
const { goBack } = useNavigation();
|
||||||
const {
|
const {
|
||||||
params: { url, onlyAudio, videoConf, rid }
|
params: { url, onlyAudio, videoConf }
|
||||||
} = useRoute<RouteProp<ChatsStackParamList, 'JitsiMeetView'>>();
|
} = useRoute<RouteProp<ChatsStackParamList, 'JitsiMeetView'>>();
|
||||||
const user = useAppSelector(state => getUserSelector(state));
|
const user = useAppSelector(state => getUserSelector(state));
|
||||||
const baseUrl = useAppSelector(state => state.server.server);
|
const baseUrl = useAppSelector(state => state.server.server);
|
||||||
|
@ -61,10 +60,8 @@ const JitsiMeetView = (): React.ReactElement => {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
logEvent(videoConf ? events.LIVECHAT_VIDEOCONF_JOIN : events.JM_CONFERENCE_JOIN);
|
logEvent(videoConf ? events.LIVECHAT_VIDEOCONF_JOIN : events.JM_CONFERENCE_JOIN);
|
||||||
if (!videoConf) initVideoConfTimer(rid);
|
|
||||||
await JitsiMeet.launchJitsiMeetView(conferenceOptions);
|
await JitsiMeet.launchJitsiMeetView(conferenceOptions);
|
||||||
logEvent(videoConf ? events.LIVECHAT_VIDEOCONF_TERMINATE : events.JM_CONFERENCE_TERMINATE);
|
logEvent(videoConf ? events.LIVECHAT_VIDEOCONF_TERMINATE : events.JM_CONFERENCE_TERMINATE);
|
||||||
if (!videoConf) endVideoConfTimer();
|
|
||||||
goBack();
|
goBack();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,6 @@ import React from 'react';
|
||||||
import { Keyboard, ScrollView, TextInput, View } from 'react-native';
|
import { Keyboard, ScrollView, TextInput, View } from 'react-native';
|
||||||
import { connect } from 'react-redux';
|
import { connect } from 'react-redux';
|
||||||
import { sha256 } from 'js-sha256';
|
import { sha256 } from 'js-sha256';
|
||||||
import ImagePicker, { Image } from 'react-native-image-crop-picker';
|
|
||||||
import RNPickerSelect from 'react-native-picker-select';
|
import RNPickerSelect from 'react-native-picker-select';
|
||||||
import { dequal } from 'dequal';
|
import { dequal } from 'dequal';
|
||||||
import omit from 'lodash/omit';
|
import omit from 'lodash/omit';
|
||||||
|
@ -12,16 +11,15 @@ import Touch from '../../containers/Touch';
|
||||||
import KeyboardView from '../../containers/KeyboardView';
|
import KeyboardView from '../../containers/KeyboardView';
|
||||||
import sharedStyles from '../Styles';
|
import sharedStyles from '../Styles';
|
||||||
import scrollPersistTaps from '../../lib/methods/helpers/scrollPersistTaps';
|
import scrollPersistTaps from '../../lib/methods/helpers/scrollPersistTaps';
|
||||||
import { showConfirmationAlert, showErrorAlert } from '../../lib/methods/helpers';
|
import { showErrorAlert, showConfirmationAlert } from '../../lib/methods/helpers';
|
||||||
import { LISTENER } from '../../containers/Toast';
|
import { LISTENER } from '../../containers/Toast';
|
||||||
import EventEmitter from '../../lib/methods/helpers/events';
|
import EventEmitter from '../../lib/methods/helpers/events';
|
||||||
import { FormTextInput } from '../../containers/TextInput';
|
import { FormTextInput } from '../../containers/TextInput';
|
||||||
import log, { events, logEvent } from '../../lib/methods/helpers/log';
|
import { events, logEvent } from '../../lib/methods/helpers/log';
|
||||||
import I18n from '../../i18n';
|
import I18n from '../../i18n';
|
||||||
import Button from '../../containers/Button';
|
import Button from '../../containers/Button';
|
||||||
import Avatar from '../../containers/Avatar';
|
import { AvatarWithEdit } from '../../containers/Avatar';
|
||||||
import { setUser } from '../../actions/login';
|
import { setUser } from '../../actions/login';
|
||||||
import { CustomIcon } from '../../containers/CustomIcon';
|
|
||||||
import * as HeaderButton from '../../containers/HeaderButton';
|
import * as HeaderButton from '../../containers/HeaderButton';
|
||||||
import StatusBar from '../../containers/StatusBar';
|
import StatusBar from '../../containers/StatusBar';
|
||||||
import { themes } from '../../lib/constants';
|
import { themes } from '../../lib/constants';
|
||||||
|
@ -31,15 +29,7 @@ import SafeAreaView from '../../containers/SafeAreaView';
|
||||||
import styles from './styles';
|
import styles from './styles';
|
||||||
import { ProfileStackParamList } from '../../stacks/types';
|
import { ProfileStackParamList } from '../../stacks/types';
|
||||||
import { Services } from '../../lib/services';
|
import { Services } from '../../lib/services';
|
||||||
import {
|
import { IApplicationState, IAvatarButton, IBaseScreen, IProfileParams, IUser } from '../../definitions';
|
||||||
IApplicationState,
|
|
||||||
IAvatar,
|
|
||||||
IAvatarButton,
|
|
||||||
IAvatarSuggestion,
|
|
||||||
IBaseScreen,
|
|
||||||
IProfileParams,
|
|
||||||
IUser
|
|
||||||
} from '../../definitions';
|
|
||||||
import { twoFactor } from '../../lib/services/twoFactor';
|
import { twoFactor } from '../../lib/services/twoFactor';
|
||||||
import { TwoFactorMethods } from '../../definitions/ITotp';
|
import { TwoFactorMethods } from '../../definitions/ITotp';
|
||||||
import { withActionSheet, IActionSheetProvider } from '../../containers/ActionSheet';
|
import { withActionSheet, IActionSheetProvider } from '../../containers/ActionSheet';
|
||||||
|
@ -67,9 +57,6 @@ interface IProfileViewState {
|
||||||
email: string | null;
|
email: string | null;
|
||||||
newPassword: string | null;
|
newPassword: string | null;
|
||||||
currentPassword: string | null;
|
currentPassword: string | null;
|
||||||
avatarUrl: string | null;
|
|
||||||
avatar: IAvatar;
|
|
||||||
avatarSuggestions: IAvatarSuggestion;
|
|
||||||
customFields: {
|
customFields: {
|
||||||
[key: string | number]: string;
|
[key: string | number]: string;
|
||||||
};
|
};
|
||||||
|
@ -113,25 +100,12 @@ class ProfileView extends React.Component<IProfileViewProps, IProfileViewState>
|
||||||
email: '',
|
email: '',
|
||||||
newPassword: '',
|
newPassword: '',
|
||||||
currentPassword: '',
|
currentPassword: '',
|
||||||
avatarUrl: '',
|
|
||||||
avatar: {
|
|
||||||
data: {},
|
|
||||||
url: ''
|
|
||||||
},
|
|
||||||
avatarSuggestions: {},
|
|
||||||
customFields: {},
|
customFields: {},
|
||||||
twoFactorCode: null
|
twoFactorCode: null
|
||||||
};
|
};
|
||||||
|
|
||||||
async componentDidMount() {
|
componentDidMount() {
|
||||||
this.init();
|
this.init();
|
||||||
|
|
||||||
try {
|
|
||||||
const result = await Services.getAvatarSuggestion();
|
|
||||||
this.setState({ avatarSuggestions: result });
|
|
||||||
} catch (e) {
|
|
||||||
log(e);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
UNSAFE_componentWillReceiveProps(nextProps: IProfileViewProps) {
|
UNSAFE_componentWillReceiveProps(nextProps: IProfileViewProps) {
|
||||||
|
@ -147,16 +121,6 @@ class ProfileView extends React.Component<IProfileViewProps, IProfileViewState>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
setAvatar = (avatar: IAvatar) => {
|
|
||||||
const { Accounts_AllowUserAvatarChange } = this.props;
|
|
||||||
|
|
||||||
if (!Accounts_AllowUserAvatarChange) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.setState({ avatar });
|
|
||||||
};
|
|
||||||
|
|
||||||
init = (user?: IUser) => {
|
init = (user?: IUser) => {
|
||||||
const { user: userProps } = this.props;
|
const { user: userProps } = this.props;
|
||||||
const { name, username, emails, customFields } = user || userProps;
|
const { name, username, emails, customFields } = user || userProps;
|
||||||
|
@ -167,17 +131,12 @@ class ProfileView extends React.Component<IProfileViewProps, IProfileViewState>
|
||||||
email: emails ? emails[0].address : null,
|
email: emails ? emails[0].address : null,
|
||||||
newPassword: null,
|
newPassword: null,
|
||||||
currentPassword: null,
|
currentPassword: null,
|
||||||
avatarUrl: null,
|
|
||||||
avatar: {
|
|
||||||
data: {},
|
|
||||||
url: ''
|
|
||||||
},
|
|
||||||
customFields: customFields || {}
|
customFields: customFields || {}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
formIsChanged = () => {
|
formIsChanged = () => {
|
||||||
const { name, username, email, newPassword, avatar, customFields } = this.state;
|
const { name, username, email, newPassword, customFields } = this.state;
|
||||||
const { user } = this.props;
|
const { user } = this.props;
|
||||||
let customFieldsChanged = false;
|
let customFieldsChanged = false;
|
||||||
|
|
||||||
|
@ -196,21 +155,10 @@ class ProfileView extends React.Component<IProfileViewProps, IProfileViewState>
|
||||||
!newPassword &&
|
!newPassword &&
|
||||||
user.emails &&
|
user.emails &&
|
||||||
user.emails[0].address === email &&
|
user.emails[0].address === email &&
|
||||||
!avatar.data &&
|
|
||||||
!customFieldsChanged
|
!customFieldsChanged
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
handleError = (e: any, _func: string, action: string) => {
|
|
||||||
if (e.data && e.data.error.includes('[error-too-many-requests]')) {
|
|
||||||
return showErrorAlert(e.data.error);
|
|
||||||
}
|
|
||||||
if (I18n.isTranslated(e.error)) {
|
|
||||||
return showErrorAlert(I18n.t(e.error));
|
|
||||||
}
|
|
||||||
showErrorAlert(I18n.t('There_was_an_error_while_action', { action: I18n.t(action) }));
|
|
||||||
};
|
|
||||||
|
|
||||||
submit = async (): Promise<void> => {
|
submit = async (): Promise<void> => {
|
||||||
Keyboard.dismiss();
|
Keyboard.dismiss();
|
||||||
|
|
||||||
|
@ -220,7 +168,7 @@ class ProfileView extends React.Component<IProfileViewProps, IProfileViewState>
|
||||||
|
|
||||||
this.setState({ saving: true });
|
this.setState({ saving: true });
|
||||||
|
|
||||||
const { name, username, email, newPassword, currentPassword, avatar, customFields, twoFactorCode } = this.state;
|
const { name, username, email, newPassword, currentPassword, customFields, twoFactorCode } = this.state;
|
||||||
const { user, dispatch } = this.props;
|
const { user, dispatch } = this.props;
|
||||||
const params = {} as IProfileParams;
|
const params = {} as IProfileParams;
|
||||||
|
|
||||||
|
@ -273,17 +221,6 @@ class ProfileView extends React.Component<IProfileViewProps, IProfileViewState>
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (avatar.url) {
|
|
||||||
try {
|
|
||||||
logEvent(events.PROFILE_SAVE_AVATAR);
|
|
||||||
await Services.setAvatarFromService(avatar);
|
|
||||||
} catch (e) {
|
|
||||||
logEvent(events.PROFILE_SAVE_AVATAR_F);
|
|
||||||
this.setState({ saving: false, currentPassword: null });
|
|
||||||
return this.handleError(e, 'setAvatarFromService', 'changing_avatar');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const twoFactorOptions = params.currentPassword
|
const twoFactorOptions = params.currentPassword
|
||||||
? {
|
? {
|
||||||
twoFactorCode: params.currentPassword,
|
twoFactorCode: params.currentPassword,
|
||||||
|
@ -317,7 +254,7 @@ class ProfileView extends React.Component<IProfileViewProps, IProfileViewState>
|
||||||
}
|
}
|
||||||
logEvent(events.PROFILE_SAVE_CHANGES_F);
|
logEvent(events.PROFILE_SAVE_CHANGES_F);
|
||||||
this.setState({ saving: false, currentPassword: null, twoFactorCode: null });
|
this.setState({ saving: false, currentPassword: null, twoFactorCode: null });
|
||||||
this.handleError(e, 'saveUserProfile', 'saving_profile');
|
this.handleError(e, 'saving_profile');
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -334,39 +271,23 @@ class ProfileView extends React.Component<IProfileViewProps, IProfileViewState>
|
||||||
EventEmitter.emit(LISTENER, { message: I18n.t('Avatar_changed_successfully') });
|
EventEmitter.emit(LISTENER, { message: I18n.t('Avatar_changed_successfully') });
|
||||||
this.init();
|
this.init();
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
this.handleError(e, 'resetAvatar', 'changing_avatar');
|
this.handleError(e, 'changing_avatar');
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
pickImage = async () => {
|
handleError = (e: any, action: string) => {
|
||||||
const { Accounts_AllowUserAvatarChange } = this.props;
|
if (e.data && e.data.error.includes('[error-too-many-requests]')) {
|
||||||
|
return showErrorAlert(e.data.error);
|
||||||
if (!Accounts_AllowUserAvatarChange) {
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
if (I18n.isTranslated(e.error)) {
|
||||||
const options = {
|
return showErrorAlert(I18n.t(e.error));
|
||||||
cropping: true,
|
|
||||||
compressImageQuality: 0.8,
|
|
||||||
freeStyleCropEnabled: true,
|
|
||||||
cropperAvoidEmptySpaceAroundImage: false,
|
|
||||||
cropperChooseText: I18n.t('Choose'),
|
|
||||||
cropperCancelText: I18n.t('Cancel'),
|
|
||||||
includeBase64: true
|
|
||||||
};
|
|
||||||
try {
|
|
||||||
logEvent(events.PROFILE_PICK_AVATAR);
|
|
||||||
const response: Image = await ImagePicker.openPicker(options);
|
|
||||||
this.setAvatar({ url: response.path, data: `data:image/jpeg;base64,${response.data}`, service: 'upload' });
|
|
||||||
} catch (error) {
|
|
||||||
logEvent(events.PROFILE_PICK_AVATAR_F);
|
|
||||||
console.warn(error);
|
|
||||||
}
|
}
|
||||||
|
showErrorAlert(I18n.t('There_was_an_error_while_action', { action: I18n.t(action) }));
|
||||||
};
|
};
|
||||||
|
|
||||||
pickImageWithURL = (avatarUrl: string) => {
|
handleEditAvatar = () => {
|
||||||
logEvent(events.PROFILE_PICK_AVATAR_WITH_URL);
|
const { navigation } = this.props;
|
||||||
this.setAvatar({ url: avatarUrl, data: avatarUrl, service: 'url' });
|
navigation.navigate('ChangeAvatarView', { context: 'profile' });
|
||||||
};
|
};
|
||||||
|
|
||||||
renderAvatarButton = ({ key, child, onPress, disabled = false }: IAvatarButton) => {
|
renderAvatarButton = ({ key, child, onPress, disabled = false }: IAvatarButton) => {
|
||||||
|
@ -384,49 +305,6 @@ class ProfileView extends React.Component<IProfileViewProps, IProfileViewState>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
renderAvatarButtons = () => {
|
|
||||||
const { avatarUrl, avatarSuggestions } = this.state;
|
|
||||||
const { user, theme, Accounts_AllowUserAvatarChange } = this.props;
|
|
||||||
|
|
||||||
return (
|
|
||||||
<View style={styles.avatarButtons}>
|
|
||||||
{this.renderAvatarButton({
|
|
||||||
child: <Avatar text={`@${user.username}`} size={50} />,
|
|
||||||
onPress: () => this.resetAvatar(),
|
|
||||||
disabled: !Accounts_AllowUserAvatarChange,
|
|
||||||
key: 'profile-view-reset-avatar'
|
|
||||||
})}
|
|
||||||
{this.renderAvatarButton({
|
|
||||||
child: <CustomIcon name='upload' size={30} color={themes[theme].bodyText} />,
|
|
||||||
onPress: () => this.pickImage(),
|
|
||||||
disabled: !Accounts_AllowUserAvatarChange,
|
|
||||||
key: 'profile-view-upload-avatar'
|
|
||||||
})}
|
|
||||||
{this.renderAvatarButton({
|
|
||||||
child: <CustomIcon name='link' size={30} color={themes[theme].bodyText} />,
|
|
||||||
onPress: () => (avatarUrl ? this.pickImageWithURL(avatarUrl) : null),
|
|
||||||
disabled: !avatarUrl,
|
|
||||||
key: 'profile-view-avatar-url-button'
|
|
||||||
})}
|
|
||||||
{Object.keys(avatarSuggestions).map(service => {
|
|
||||||
const { url, blob, contentType } = avatarSuggestions[service];
|
|
||||||
return this.renderAvatarButton({
|
|
||||||
disabled: !Accounts_AllowUserAvatarChange,
|
|
||||||
key: `profile-view-avatar-${service}`,
|
|
||||||
child: <Avatar avatar={url} size={50} />,
|
|
||||||
onPress: () =>
|
|
||||||
this.setAvatar({
|
|
||||||
url,
|
|
||||||
data: blob,
|
|
||||||
service,
|
|
||||||
contentType
|
|
||||||
})
|
|
||||||
});
|
|
||||||
})}
|
|
||||||
</View>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
renderCustomFields = () => {
|
renderCustomFields = () => {
|
||||||
const { customFields } = this.state;
|
const { customFields } = this.state;
|
||||||
const { Accounts_CustomFields } = this.props;
|
const { Accounts_CustomFields } = this.props;
|
||||||
|
@ -520,7 +398,7 @@ class ProfileView extends React.Component<IProfileViewProps, IProfileViewState>
|
||||||
};
|
};
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
const { name, username, email, newPassword, avatarUrl, customFields, avatar, saving } = this.state;
|
const { name, username, email, newPassword, customFields, saving } = this.state;
|
||||||
const {
|
const {
|
||||||
user,
|
user,
|
||||||
theme,
|
theme,
|
||||||
|
@ -543,7 +421,10 @@ class ProfileView extends React.Component<IProfileViewProps, IProfileViewState>
|
||||||
<SafeAreaView testID='profile-view'>
|
<SafeAreaView testID='profile-view'>
|
||||||
<ScrollView contentContainerStyle={sharedStyles.containerScrollView} testID='profile-view-list' {...scrollPersistTaps}>
|
<ScrollView contentContainerStyle={sharedStyles.containerScrollView} testID='profile-view-list' {...scrollPersistTaps}>
|
||||||
<View style={styles.avatarContainer} testID='profile-view-avatar'>
|
<View style={styles.avatarContainer} testID='profile-view-avatar'>
|
||||||
<Avatar text={user.username} avatar={avatar?.url} isStatic={avatar?.url} size={100} />
|
<AvatarWithEdit
|
||||||
|
text={user.username}
|
||||||
|
handleEdit={Accounts_AllowUserAvatarChange ? this.handleEditAvatar : undefined}
|
||||||
|
/>
|
||||||
</View>
|
</View>
|
||||||
<FormTextInput
|
<FormTextInput
|
||||||
editable={Accounts_AllowRealNameChange}
|
editable={Accounts_AllowRealNameChange}
|
||||||
|
@ -615,22 +496,6 @@ class ProfileView extends React.Component<IProfileViewProps, IProfileViewState>
|
||||||
testID='profile-view-new-password'
|
testID='profile-view-new-password'
|
||||||
/>
|
/>
|
||||||
{this.renderCustomFields()}
|
{this.renderCustomFields()}
|
||||||
<FormTextInput
|
|
||||||
editable={Accounts_AllowUserAvatarChange}
|
|
||||||
inputStyle={[!Accounts_AllowUserAvatarChange && styles.disabled]}
|
|
||||||
inputRef={e => {
|
|
||||||
if (e) {
|
|
||||||
this.avatarUrl = e;
|
|
||||||
}
|
|
||||||
}}
|
|
||||||
label={I18n.t('Avatar_Url')}
|
|
||||||
placeholder={I18n.t('Avatar_Url')}
|
|
||||||
value={avatarUrl || undefined}
|
|
||||||
onChangeText={value => this.setState({ avatarUrl: value })}
|
|
||||||
onSubmitEditing={this.submit}
|
|
||||||
testID='profile-view-avatar-url'
|
|
||||||
/>
|
|
||||||
{this.renderAvatarButtons()}
|
|
||||||
<Button
|
<Button
|
||||||
title={I18n.t('Save_Changes')}
|
title={I18n.t('Save_Changes')}
|
||||||
type='primary'
|
type='primary'
|
||||||
|
|
|
@ -7,7 +7,7 @@ export default StyleSheet.create({
|
||||||
avatarContainer: {
|
avatarContainer: {
|
||||||
alignItems: 'center',
|
alignItems: 'center',
|
||||||
justifyContent: 'center',
|
justifyContent: 'center',
|
||||||
marginBottom: 10
|
marginBottom: 24
|
||||||
},
|
},
|
||||||
avatarButtons: {
|
avatarButtons: {
|
||||||
flexWrap: 'wrap',
|
flexWrap: 'wrap',
|
||||||
|
|
|
@ -1,25 +0,0 @@
|
||||||
import React from 'react';
|
|
||||||
|
|
||||||
import * as List from '../../../containers/List';
|
|
||||||
import i18n from '../../../i18n';
|
|
||||||
import { useVideoConf } from '../../../lib/hooks/useVideoConf';
|
|
||||||
|
|
||||||
export default function CallSection({ rid }: { rid: string }): React.ReactElement | null {
|
|
||||||
const { showCallOption, showInitCallActionSheet } = useVideoConf(rid);
|
|
||||||
|
|
||||||
if (showCallOption)
|
|
||||||
return (
|
|
||||||
<List.Section>
|
|
||||||
<List.Separator />
|
|
||||||
<List.Item
|
|
||||||
title={i18n.t('Call')}
|
|
||||||
onPress={showInitCallActionSheet}
|
|
||||||
testID='room-actions-call'
|
|
||||||
left={() => <List.Icon name='phone' />}
|
|
||||||
showActionIndicator
|
|
||||||
/>
|
|
||||||
<List.Separator />
|
|
||||||
</List.Section>
|
|
||||||
);
|
|
||||||
return null;
|
|
||||||
}
|
|
|
@ -33,7 +33,7 @@ import sharedStyles from '../Styles';
|
||||||
import styles from './styles';
|
import styles from './styles';
|
||||||
import { ERoomType } from '../../definitions/ERoomType';
|
import { ERoomType } from '../../definitions/ERoomType';
|
||||||
import { E2E_ROOM_TYPES, SWITCH_TRACK_COLOR, themes } from '../../lib/constants';
|
import { E2E_ROOM_TYPES, SWITCH_TRACK_COLOR, themes } from '../../lib/constants';
|
||||||
import { getPermalinkChannel } from '../../lib/methods';
|
import { callJitsi, getPermalinkChannel } from '../../lib/methods';
|
||||||
import {
|
import {
|
||||||
canAutoTranslate as canAutoTranslateMethod,
|
canAutoTranslate as canAutoTranslateMethod,
|
||||||
getRoomAvatar,
|
getRoomAvatar,
|
||||||
|
@ -48,9 +48,9 @@ import { getSubscriptionByRoomId } from '../../lib/database/services/Subscriptio
|
||||||
import { IActionSheetProvider, withActionSheet } from '../../containers/ActionSheet';
|
import { IActionSheetProvider, withActionSheet } from '../../containers/ActionSheet';
|
||||||
import { MasterDetailInsideStackParamList } from '../../stacks/MasterDetailStack/types';
|
import { MasterDetailInsideStackParamList } from '../../stacks/MasterDetailStack/types';
|
||||||
import { closeLivechat } from '../../lib/methods/helpers/closeLivechat';
|
import { closeLivechat } from '../../lib/methods/helpers/closeLivechat';
|
||||||
|
import { videoConfStartAndJoin } from '../../lib/methods/videoConf';
|
||||||
import { ILivechatDepartment } from '../../definitions/ILivechatDepartment';
|
import { ILivechatDepartment } from '../../definitions/ILivechatDepartment';
|
||||||
import { ILivechatTag } from '../../definitions/ILivechatTag';
|
import { ILivechatTag } from '../../definitions/ILivechatTag';
|
||||||
import CallSection from './components/CallSection';
|
|
||||||
|
|
||||||
interface IOnPressTouch {
|
interface IOnPressTouch {
|
||||||
<T extends keyof ChatsStackParamList>(item: { route?: T; params?: ChatsStackParamList[T]; event?: Function }): void;
|
<T extends keyof ChatsStackParamList>(item: { route?: T; params?: ChatsStackParamList[T]; event?: Function }): void;
|
||||||
|
@ -730,6 +730,16 @@ class RoomActionsView extends React.Component<IRoomActionsViewProps, IRoomAction
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
startVideoConf = ({ video }: { video: boolean }): void => {
|
||||||
|
const { room } = this.state;
|
||||||
|
const { serverVersion } = this.props;
|
||||||
|
if (compareServerVersion(serverVersion, 'greaterThanOrEqualTo', '5.0.0')) {
|
||||||
|
videoConfStartAndJoin(room.rid, video);
|
||||||
|
} else {
|
||||||
|
callJitsi(room, !video);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
renderRoomInfo = () => {
|
renderRoomInfo = () => {
|
||||||
const { room, member } = this.state;
|
const { room, member } = this.state;
|
||||||
const { rid, name, t, topic, source } = room;
|
const { rid, name, t, topic, source } = room;
|
||||||
|
@ -805,6 +815,63 @@ class RoomActionsView extends React.Component<IRoomActionsViewProps, IRoomAction
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
renderJitsi = () => {
|
||||||
|
const { room } = this.state;
|
||||||
|
const {
|
||||||
|
jitsiEnabled,
|
||||||
|
jitsiEnableTeams,
|
||||||
|
jitsiEnableChannels,
|
||||||
|
serverVersion,
|
||||||
|
videoConf_Enable_DMs,
|
||||||
|
videoConf_Enable_Channels,
|
||||||
|
videoConf_Enable_Groups,
|
||||||
|
videoConf_Enable_Teams
|
||||||
|
} = this.props;
|
||||||
|
|
||||||
|
const isJitsiDisabledForTeams = room.teamMain && !jitsiEnableTeams;
|
||||||
|
const isJitsiDisabledForChannels = !room.teamMain && (room.t === 'p' || room.t === 'c') && !jitsiEnableChannels;
|
||||||
|
|
||||||
|
const isVideoConfDisabledForTeams = !!room.teamMain && !videoConf_Enable_Teams;
|
||||||
|
const isVideoConfDisabledForChannels = !room.teamMain && room.t === 'c' && !videoConf_Enable_Channels;
|
||||||
|
const isVideoConfDisabledForGroups = !room.teamMain && room.t === 'p' && !videoConf_Enable_Groups;
|
||||||
|
const isVideoConfDisabledForDirect = !room.teamMain && room.t === 'd' && !videoConf_Enable_DMs;
|
||||||
|
|
||||||
|
if (compareServerVersion(serverVersion, 'greaterThanOrEqualTo', '5.0.0')) {
|
||||||
|
if (
|
||||||
|
isVideoConfDisabledForTeams ||
|
||||||
|
isVideoConfDisabledForChannels ||
|
||||||
|
isVideoConfDisabledForGroups ||
|
||||||
|
isVideoConfDisabledForDirect
|
||||||
|
) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
} else if (!jitsiEnabled || isJitsiDisabledForTeams || isJitsiDisabledForChannels) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<List.Section>
|
||||||
|
<List.Separator />
|
||||||
|
<List.Item
|
||||||
|
title='Voice_call'
|
||||||
|
onPress={() => this.startVideoConf({ video: false })}
|
||||||
|
testID='room-actions-voice'
|
||||||
|
left={() => <List.Icon name='phone' />}
|
||||||
|
showActionIndicator
|
||||||
|
/>
|
||||||
|
<List.Separator />
|
||||||
|
<List.Item
|
||||||
|
title='Video_call'
|
||||||
|
onPress={() => this.startVideoConf({ video: true })}
|
||||||
|
testID='room-actions-video'
|
||||||
|
left={() => <List.Icon name='camera' />}
|
||||||
|
showActionIndicator
|
||||||
|
/>
|
||||||
|
<List.Separator />
|
||||||
|
</List.Section>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
renderE2EEncryption = () => {
|
renderE2EEncryption = () => {
|
||||||
const { room } = this.state;
|
const { room } = this.state;
|
||||||
const { encryptionEnabled } = this.props;
|
const { encryptionEnabled } = this.props;
|
||||||
|
@ -1041,7 +1108,7 @@ class RoomActionsView extends React.Component<IRoomActionsViewProps, IRoomAction
|
||||||
<StatusBar />
|
<StatusBar />
|
||||||
<List.Container testID='room-actions-scrollview'>
|
<List.Container testID='room-actions-scrollview'>
|
||||||
{this.renderRoomInfo()}
|
{this.renderRoomInfo()}
|
||||||
<CallSection rid={rid} />
|
{this.renderJitsi()}
|
||||||
{this.renderE2EEncryption()}
|
{this.renderE2EEncryption()}
|
||||||
<List.Section>
|
<List.Section>
|
||||||
<List.Separator />
|
<List.Separator />
|
||||||
|
@ -1232,6 +1299,13 @@ class RoomActionsView extends React.Component<IRoomActionsViewProps, IRoomAction
|
||||||
|
|
||||||
const mapStateToProps = (state: IApplicationState) => ({
|
const mapStateToProps = (state: IApplicationState) => ({
|
||||||
userId: getUserSelector(state).id,
|
userId: getUserSelector(state).id,
|
||||||
|
jitsiEnabled: (state.settings.Jitsi_Enabled || false) as boolean,
|
||||||
|
jitsiEnableTeams: (state.settings.Jitsi_Enable_Teams || false) as boolean,
|
||||||
|
jitsiEnableChannels: (state.settings.Jitsi_Enable_Channels || false) as boolean,
|
||||||
|
videoConf_Enable_DMs: (state.settings.VideoConf_Enable_DMs ?? true) as boolean,
|
||||||
|
videoConf_Enable_Channels: (state.settings.VideoConf_Enable_Channels ?? true) as boolean,
|
||||||
|
videoConf_Enable_Groups: (state.settings.VideoConf_Enable_Groups ?? true) as boolean,
|
||||||
|
videoConf_Enable_Teams: (state.settings.VideoConf_Enable_Teams ?? true) as boolean,
|
||||||
encryptionEnabled: state.encryption.enabled,
|
encryptionEnabled: state.encryption.enabled,
|
||||||
serverVersion: state.server.version,
|
serverVersion: state.server.version,
|
||||||
isMasterDetail: state.app.isMasterDetail,
|
isMasterDetail: state.app.isMasterDetail,
|
||||||
|
|
|
@ -2,15 +2,13 @@ import React from 'react';
|
||||||
import { Q } from '@nozbe/watermelondb';
|
import { Q } from '@nozbe/watermelondb';
|
||||||
import { BlockContext } from '@rocket.chat/ui-kit';
|
import { BlockContext } from '@rocket.chat/ui-kit';
|
||||||
import { dequal } from 'dequal';
|
import { dequal } from 'dequal';
|
||||||
import isEmpty from 'lodash/isEmpty';
|
|
||||||
import { Alert, Keyboard, ScrollView, Text, TextInput, TouchableOpacity, View, StyleSheet } from 'react-native';
|
import { Alert, Keyboard, ScrollView, Text, TextInput, TouchableOpacity, View, StyleSheet } from 'react-native';
|
||||||
import ImagePicker, { Image } from 'react-native-image-crop-picker';
|
|
||||||
import { connect } from 'react-redux';
|
import { connect } from 'react-redux';
|
||||||
import { Subscription } from 'rxjs';
|
import { Subscription } from 'rxjs';
|
||||||
|
|
||||||
import { deleteRoom } from '../../actions/room';
|
import { deleteRoom } from '../../actions/room';
|
||||||
import { themes } from '../../lib/constants';
|
import { themes } from '../../lib/constants';
|
||||||
import Avatar from '../../containers/Avatar';
|
import { AvatarWithEdit } from '../../containers/Avatar';
|
||||||
import { sendLoadingEvent } from '../../containers/Loading';
|
import { sendLoadingEvent } from '../../containers/Loading';
|
||||||
import SafeAreaView from '../../containers/SafeAreaView';
|
import SafeAreaView from '../../containers/SafeAreaView';
|
||||||
import StatusBar from '../../containers/StatusBar';
|
import StatusBar from '../../containers/StatusBar';
|
||||||
|
@ -23,13 +21,11 @@ import {
|
||||||
IRoomSettings,
|
IRoomSettings,
|
||||||
ISubscription,
|
ISubscription,
|
||||||
SubscriptionType,
|
SubscriptionType,
|
||||||
TSubscriptionModel,
|
TSubscriptionModel
|
||||||
IAvatar
|
|
||||||
} from '../../definitions';
|
} from '../../definitions';
|
||||||
import { ERoomType } from '../../definitions/ERoomType';
|
import { ERoomType } from '../../definitions/ERoomType';
|
||||||
import I18n from '../../i18n';
|
import I18n from '../../i18n';
|
||||||
import database from '../../lib/database';
|
import database from '../../lib/database';
|
||||||
import { CustomIcon } from '../../containers/CustomIcon';
|
|
||||||
import KeyboardView from '../../containers/KeyboardView';
|
import KeyboardView from '../../containers/KeyboardView';
|
||||||
import { TSupportedPermissions } from '../../reducers/permissions';
|
import { TSupportedPermissions } from '../../reducers/permissions';
|
||||||
import { ModalStackParamList } from '../../stacks/MasterDetailStack/types';
|
import { ModalStackParamList } from '../../stacks/MasterDetailStack/types';
|
||||||
|
@ -54,7 +50,6 @@ import { Services } from '../../lib/services';
|
||||||
|
|
||||||
interface IRoomInfoEditViewState {
|
interface IRoomInfoEditViewState {
|
||||||
room: ISubscription;
|
room: ISubscription;
|
||||||
avatar: IAvatar;
|
|
||||||
permissions: { [key in TSupportedPermissions]?: boolean };
|
permissions: { [key in TSupportedPermissions]?: boolean };
|
||||||
name: string;
|
name: string;
|
||||||
description?: string;
|
description?: string;
|
||||||
|
@ -102,7 +97,6 @@ class RoomInfoEditView extends React.Component<IRoomInfoEditViewProps, IRoomInfo
|
||||||
this.room = {} as TSubscriptionModel;
|
this.room = {} as TSubscriptionModel;
|
||||||
this.state = {
|
this.state = {
|
||||||
room: {} as ISubscription,
|
room: {} as ISubscription,
|
||||||
avatar: {} as IAvatar,
|
|
||||||
permissions: {},
|
permissions: {},
|
||||||
name: '',
|
name: '',
|
||||||
description: '',
|
description: '',
|
||||||
|
@ -192,7 +186,6 @@ class RoomInfoEditView extends React.Component<IRoomInfoEditViewProps, IRoomInfo
|
||||||
topic,
|
topic,
|
||||||
announcement,
|
announcement,
|
||||||
t: t === 'p',
|
t: t === 'p',
|
||||||
avatar: {} as IAvatar,
|
|
||||||
ro,
|
ro,
|
||||||
reactWhenReadOnly,
|
reactWhenReadOnly,
|
||||||
joinCode: joinCodeRequired ? this.randomValue : '',
|
joinCode: joinCodeRequired ? this.randomValue : '',
|
||||||
|
@ -228,8 +221,7 @@ class RoomInfoEditView extends React.Component<IRoomInfoEditViewProps, IRoomInfo
|
||||||
joinCode,
|
joinCode,
|
||||||
systemMessages,
|
systemMessages,
|
||||||
enableSysMes,
|
enableSysMes,
|
||||||
encrypted,
|
encrypted
|
||||||
avatar
|
|
||||||
} = this.state;
|
} = this.state;
|
||||||
const { joinCodeRequired } = room;
|
const { joinCodeRequired } = room;
|
||||||
const sysMes = room.sysMes as string[];
|
const sysMes = room.sysMes as string[];
|
||||||
|
@ -244,28 +236,15 @@ class RoomInfoEditView extends React.Component<IRoomInfoEditViewProps, IRoomInfo
|
||||||
room.reactWhenReadOnly === reactWhenReadOnly &&
|
room.reactWhenReadOnly === reactWhenReadOnly &&
|
||||||
dequal(sysMes, systemMessages) &&
|
dequal(sysMes, systemMessages) &&
|
||||||
enableSysMes === (sysMes && sysMes.length > 0) &&
|
enableSysMes === (sysMes && sysMes.length > 0) &&
|
||||||
room.encrypted === encrypted &&
|
room.encrypted === encrypted
|
||||||
isEmpty(avatar)
|
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
submit = async () => {
|
submit = async () => {
|
||||||
logEvent(events.RI_EDIT_SAVE);
|
logEvent(events.RI_EDIT_SAVE);
|
||||||
Keyboard.dismiss();
|
Keyboard.dismiss();
|
||||||
const {
|
const { room, name, description, topic, announcement, t, ro, reactWhenReadOnly, joinCode, systemMessages, encrypted } =
|
||||||
room,
|
this.state;
|
||||||
name,
|
|
||||||
description,
|
|
||||||
topic,
|
|
||||||
announcement,
|
|
||||||
t,
|
|
||||||
ro,
|
|
||||||
reactWhenReadOnly,
|
|
||||||
joinCode,
|
|
||||||
systemMessages,
|
|
||||||
encrypted,
|
|
||||||
avatar
|
|
||||||
} = this.state;
|
|
||||||
|
|
||||||
sendLoadingEvent({ visible: true });
|
sendLoadingEvent({ visible: true });
|
||||||
let error = false;
|
let error = false;
|
||||||
|
@ -284,10 +263,6 @@ class RoomInfoEditView extends React.Component<IRoomInfoEditViewProps, IRoomInfo
|
||||||
if (room.name !== name) {
|
if (room.name !== name) {
|
||||||
params.roomName = name;
|
params.roomName = name;
|
||||||
}
|
}
|
||||||
// Avatar
|
|
||||||
if (!isEmpty(avatar)) {
|
|
||||||
params.roomAvatar = avatar.data as string;
|
|
||||||
}
|
|
||||||
// Description
|
// Description
|
||||||
if (room.description !== description) {
|
if (room.description !== description) {
|
||||||
params.roomDescription = description;
|
params.roomDescription = description;
|
||||||
|
@ -487,26 +462,10 @@ class RoomInfoEditView extends React.Component<IRoomInfoEditViewProps, IRoomInfo
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
changeAvatar = async () => {
|
handleEditAvatar = () => {
|
||||||
const options = {
|
const { navigation } = this.props;
|
||||||
cropping: true,
|
const { room } = this.state;
|
||||||
compressImageQuality: 0.8,
|
navigation.navigate('ChangeAvatarView', { titleHeader: I18n.t('Room_Info'), room, t: room.t, context: 'room' });
|
||||||
cropperAvoidEmptySpaceAroundImage: false,
|
|
||||||
cropperChooseText: I18n.t('Choose'),
|
|
||||||
cropperCancelText: I18n.t('Cancel'),
|
|
||||||
includeBase64: true
|
|
||||||
};
|
|
||||||
|
|
||||||
try {
|
|
||||||
const response: Image = await ImagePicker.openPicker(options);
|
|
||||||
this.setState({ avatar: { url: response.path, data: `data:image/jpeg;base64,${response.data}`, service: 'upload' } });
|
|
||||||
} catch (e) {
|
|
||||||
console.log(e);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
resetAvatar = () => {
|
|
||||||
this.setState({ avatar: { data: null } });
|
|
||||||
};
|
};
|
||||||
|
|
||||||
toggleRoomType = (value: boolean) => {
|
toggleRoomType = (value: boolean) => {
|
||||||
|
@ -549,8 +508,7 @@ class RoomInfoEditView extends React.Component<IRoomInfoEditViewProps, IRoomInfo
|
||||||
permissions,
|
permissions,
|
||||||
archived,
|
archived,
|
||||||
enableSysMes,
|
enableSysMes,
|
||||||
encrypted,
|
encrypted
|
||||||
avatar
|
|
||||||
} = this.state;
|
} = this.state;
|
||||||
const { serverVersion, encryptionEnabled, theme } = this.props;
|
const { serverVersion, encryptionEnabled, theme } = this.props;
|
||||||
const { dangerColor } = themes[theme];
|
const { dangerColor } = themes[theme];
|
||||||
|
@ -568,29 +526,9 @@ class RoomInfoEditView extends React.Component<IRoomInfoEditViewProps, IRoomInfo
|
||||||
testID='room-info-edit-view-list'
|
testID='room-info-edit-view-list'
|
||||||
{...scrollPersistTaps}
|
{...scrollPersistTaps}
|
||||||
>
|
>
|
||||||
<TouchableOpacity
|
<View style={styles.avatarContainer}>
|
||||||
style={styles.avatarContainer}
|
<AvatarWithEdit type={room.t} text={room.name} rid={room.rid} handleEdit={this.handleEditAvatar} />
|
||||||
onPress={this.changeAvatar}
|
</View>
|
||||||
disabled={compareServerVersion(serverVersion || '', 'lowerThan', '3.6.0')}
|
|
||||||
>
|
|
||||||
<Avatar
|
|
||||||
type={room.t}
|
|
||||||
text={room.name}
|
|
||||||
avatar={avatar?.url}
|
|
||||||
isStatic={avatar?.url}
|
|
||||||
rid={isEmpty(avatar) ? room.rid : undefined}
|
|
||||||
size={100}
|
|
||||||
>
|
|
||||||
{serverVersion && compareServerVersion(serverVersion, 'lowerThan', '3.6.0') ? undefined : (
|
|
||||||
<TouchableOpacity
|
|
||||||
style={[styles.resetButton, { backgroundColor: themes[theme].dangerColor }]}
|
|
||||||
onPress={this.resetAvatar}
|
|
||||||
>
|
|
||||||
<CustomIcon name='delete' color={themes[theme].backgroundColor} size={24} />
|
|
||||||
</TouchableOpacity>
|
|
||||||
)}
|
|
||||||
</Avatar>
|
|
||||||
</TouchableOpacity>
|
|
||||||
<FormTextInput
|
<FormTextInput
|
||||||
inputRef={e => {
|
inputRef={e => {
|
||||||
this.name = e;
|
this.name = e;
|
||||||
|
@ -655,6 +593,7 @@ class RoomInfoEditView extends React.Component<IRoomInfoEditViewProps, IRoomInfo
|
||||||
label={I18n.t('Password')}
|
label={I18n.t('Password')}
|
||||||
value={joinCode}
|
value={joinCode}
|
||||||
onChangeText={value => this.setState({ joinCode: value })}
|
onChangeText={value => this.setState({ joinCode: value })}
|
||||||
|
onSubmitEditing={this.submit}
|
||||||
secureTextEntry
|
secureTextEntry
|
||||||
testID='room-info-edit-view-password'
|
testID='room-info-edit-view-password'
|
||||||
/>
|
/>
|
||||||
|
|
|
@ -76,7 +76,8 @@ export default StyleSheet.create({
|
||||||
avatarContainer: {
|
avatarContainer: {
|
||||||
alignItems: 'center',
|
alignItems: 'center',
|
||||||
justifyContent: 'center',
|
justifyContent: 'center',
|
||||||
marginBottom: 10
|
marginBottom: 32,
|
||||||
|
marginTop: 16
|
||||||
},
|
},
|
||||||
resetButton: {
|
resetButton: {
|
||||||
padding: 4,
|
padding: 4,
|
||||||
|
|
|
@ -1,48 +0,0 @@
|
||||||
import React from 'react';
|
|
||||||
import { Text } from 'react-native';
|
|
||||||
import { BorderlessButton } from 'react-native-gesture-handler';
|
|
||||||
|
|
||||||
import { CustomIcon, TIconsName } from '../../../containers/CustomIcon';
|
|
||||||
import styles from '../styles';
|
|
||||||
import { useTheme } from '../../../theme';
|
|
||||||
import { useVideoConf } from '../../../lib/hooks/useVideoConf';
|
|
||||||
import i18n from '../../../i18n';
|
|
||||||
import { useAppSelector } from '../../../lib/hooks';
|
|
||||||
import { compareServerVersion } from '../../../lib/methods/helpers';
|
|
||||||
|
|
||||||
// TODO: change other icons on future
|
|
||||||
function UserInfoButton({
|
|
||||||
danger,
|
|
||||||
iconName,
|
|
||||||
onPress,
|
|
||||||
label,
|
|
||||||
showIcon
|
|
||||||
}: {
|
|
||||||
danger?: boolean;
|
|
||||||
iconName: TIconsName;
|
|
||||||
onPress?: (prop: any) => void;
|
|
||||||
label: string;
|
|
||||||
showIcon?: boolean;
|
|
||||||
}): React.ReactElement | null {
|
|
||||||
const { colors } = useTheme();
|
|
||||||
const color = danger ? colors.dangerColor : colors.actionTintColor;
|
|
||||||
|
|
||||||
if (showIcon)
|
|
||||||
return (
|
|
||||||
<BorderlessButton testID={`room-info-view-${iconName}`} onPress={onPress} style={styles.roomButton}>
|
|
||||||
<CustomIcon name={iconName} size={30} color={color} />
|
|
||||||
<Text style={[styles.roomButtonText, { color }]}>{label}</Text>
|
|
||||||
</BorderlessButton>
|
|
||||||
);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
export function CallButton({ rid, isDirect }: { rid: string; isDirect: boolean }): React.ReactElement | null {
|
|
||||||
const { showCallOption, showInitCallActionSheet } = useVideoConf(rid);
|
|
||||||
const serverVersion = useAppSelector(state => state.server.version);
|
|
||||||
const greaterThanFive = compareServerVersion(serverVersion, 'greaterThanOrEqualTo', '5.0.0');
|
|
||||||
|
|
||||||
const showIcon = greaterThanFive ? showCallOption : showCallOption && isDirect;
|
|
||||||
|
|
||||||
return <UserInfoButton onPress={showInitCallActionSheet} iconName='phone' label={i18n.t('Call')} showIcon={showIcon} />;
|
|
||||||
}
|
|
|
@ -1,43 +1,43 @@
|
||||||
import { CompositeNavigationProp, RouteProp } from '@react-navigation/native';
|
|
||||||
import { StackNavigationProp } from '@react-navigation/stack';
|
|
||||||
import isEmpty from 'lodash/isEmpty';
|
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { ScrollView, Text, View } from 'react-native';
|
import { ScrollView, Text, View } from 'react-native';
|
||||||
import { BorderlessButton } from 'react-native-gesture-handler';
|
import { BorderlessButton } from 'react-native-gesture-handler';
|
||||||
import { connect } from 'react-redux';
|
import { connect } from 'react-redux';
|
||||||
import { Observable, Subscription } from 'rxjs';
|
|
||||||
import UAParser from 'ua-parser-js';
|
import UAParser from 'ua-parser-js';
|
||||||
|
import isEmpty from 'lodash/isEmpty';
|
||||||
|
import { StackNavigationProp } from '@react-navigation/stack';
|
||||||
|
import { CompositeNavigationProp, RouteProp } from '@react-navigation/native';
|
||||||
|
import { Observable, Subscription } from 'rxjs';
|
||||||
|
|
||||||
import Avatar from '../../containers/Avatar';
|
|
||||||
import { CustomIcon, TIconsName } from '../../containers/CustomIcon';
|
import { CustomIcon, TIconsName } from '../../containers/CustomIcon';
|
||||||
import * as HeaderButton from '../../containers/HeaderButton';
|
|
||||||
import { MarkdownPreview } from '../../containers/markdown';
|
|
||||||
import RoomTypeIcon from '../../containers/RoomTypeIcon';
|
|
||||||
import SafeAreaView from '../../containers/SafeAreaView';
|
|
||||||
import Status from '../../containers/Status';
|
import Status from '../../containers/Status';
|
||||||
import StatusBar from '../../containers/StatusBar';
|
import { AvatarWithEdit } from '../../containers/Avatar';
|
||||||
import { LISTENER } from '../../containers/Toast';
|
|
||||||
import { IApplicationState, ISubscription, IUser, SubscriptionType, TSubscriptionModel } from '../../definitions';
|
|
||||||
import { ILivechatVisitor } from '../../definitions/ILivechatVisitor';
|
|
||||||
import I18n from '../../i18n';
|
|
||||||
import { themes } from '../../lib/constants';
|
|
||||||
import { getSubscriptionByRoomId } from '../../lib/database/services/Subscription';
|
|
||||||
import { getRoomTitle, getUidDirectMessage, hasPermission } from '../../lib/methods/helpers';
|
|
||||||
import EventEmitter from '../../lib/methods/helpers/events';
|
|
||||||
import { goRoom } from '../../lib/methods/helpers/goRoom';
|
|
||||||
import { handleIgnore } from '../../lib/methods/helpers/handleIgnore';
|
|
||||||
import log, { events, logEvent } from '../../lib/methods/helpers/log';
|
|
||||||
import Navigation from '../../lib/navigation/appNavigation';
|
|
||||||
import { Services } from '../../lib/services';
|
|
||||||
import { MasterDetailInsideStackParamList } from '../../stacks/MasterDetailStack/types';
|
|
||||||
import { ChatsStackParamList } from '../../stacks/types';
|
|
||||||
import { TSupportedThemes, withTheme } from '../../theme';
|
|
||||||
import sharedStyles from '../Styles';
|
import sharedStyles from '../Styles';
|
||||||
import Channel from './Channel';
|
import RoomTypeIcon from '../../containers/RoomTypeIcon';
|
||||||
import { CallButton } from './components/UserInfoButton';
|
import I18n from '../../i18n';
|
||||||
import Direct from './Direct';
|
import * as HeaderButton from '../../containers/HeaderButton';
|
||||||
|
import StatusBar from '../../containers/StatusBar';
|
||||||
|
import log, { events, logEvent } from '../../lib/methods/helpers/log';
|
||||||
|
import { themes } from '../../lib/constants';
|
||||||
|
import { TSupportedThemes, withTheme } from '../../theme';
|
||||||
|
import { MarkdownPreview } from '../../containers/markdown';
|
||||||
|
import { LISTENER } from '../../containers/Toast';
|
||||||
|
import EventEmitter from '../../lib/methods/helpers/events';
|
||||||
|
import SafeAreaView from '../../containers/SafeAreaView';
|
||||||
|
import { goRoom } from '../../lib/methods/helpers/goRoom';
|
||||||
|
import Navigation from '../../lib/navigation/appNavigation';
|
||||||
import Livechat from './Livechat';
|
import Livechat from './Livechat';
|
||||||
|
import Channel from './Channel';
|
||||||
|
import Direct from './Direct';
|
||||||
import styles from './styles';
|
import styles from './styles';
|
||||||
|
import { ChatsStackParamList } from '../../stacks/types';
|
||||||
|
import { MasterDetailInsideStackParamList } from '../../stacks/MasterDetailStack/types';
|
||||||
|
import { SubscriptionType, TSubscriptionModel, ISubscription, IUser, IApplicationState } from '../../definitions';
|
||||||
|
import { ILivechatVisitor } from '../../definitions/ILivechatVisitor';
|
||||||
|
import { callJitsi } from '../../lib/methods';
|
||||||
|
import { getRoomTitle, getUidDirectMessage, hasPermission } from '../../lib/methods/helpers';
|
||||||
|
import { Services } from '../../lib/services';
|
||||||
|
import { getSubscriptionByRoomId } from '../../lib/database/services/Subscription';
|
||||||
|
import { handleIgnore } from '../../lib/methods/helpers/handleIgnore';
|
||||||
|
|
||||||
interface IGetRoomTitle {
|
interface IGetRoomTitle {
|
||||||
room: ISubscription;
|
room: ISubscription;
|
||||||
|
@ -386,6 +386,11 @@ class RoomInfoView extends React.Component<IRoomInfoViewProps, IRoomInfoViewStat
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
videoCall = () => {
|
||||||
|
const { room } = this.state;
|
||||||
|
callJitsi(room);
|
||||||
|
};
|
||||||
|
|
||||||
handleBlockUser = async (rid: string, blocked: string, block: boolean) => {
|
handleBlockUser = async (rid: string, blocked: string, block: boolean) => {
|
||||||
logEvent(events.RI_TOGGLE_BLOCK_USER);
|
logEvent(events.RI_TOGGLE_BLOCK_USER);
|
||||||
try {
|
try {
|
||||||
|
@ -394,17 +399,32 @@ class RoomInfoView extends React.Component<IRoomInfoViewProps, IRoomInfoViewStat
|
||||||
log(e);
|
log(e);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
handleEditAvatar = () => {
|
||||||
|
const { navigation } = this.props;
|
||||||
|
const { room } = this.state;
|
||||||
|
navigation.navigate('ChangeAvatarView', { titleHeader: I18n.t('Room_Info'), room, t: this.t, context: 'room' });
|
||||||
|
};
|
||||||
|
|
||||||
renderAvatar = (room: ISubscription, roomUser: IUserParsed) => {
|
renderAvatar = (room: ISubscription, roomUser: IUserParsed) => {
|
||||||
const { theme } = this.props;
|
const { theme } = this.props;
|
||||||
|
const { showEdit } = this.state;
|
||||||
|
const showAvatarEdit = showEdit && this.t !== SubscriptionType.OMNICHANNEL;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Avatar text={room.name || roomUser.username} style={styles.avatar} type={this.t} size={100} rid={room?.rid}>
|
<AvatarWithEdit
|
||||||
|
text={room.name || roomUser.username}
|
||||||
|
style={styles.avatar}
|
||||||
|
type={this.t}
|
||||||
|
rid={room?.rid}
|
||||||
|
handleEdit={showAvatarEdit ? this.handleEditAvatar : undefined}
|
||||||
|
>
|
||||||
{this.t === SubscriptionType.DIRECT && roomUser._id ? (
|
{this.t === SubscriptionType.DIRECT && roomUser._id ? (
|
||||||
<View style={[sharedStyles.status, { backgroundColor: themes[theme].auxiliaryBackground }]}>
|
<View style={[sharedStyles.status, { backgroundColor: themes[theme].auxiliaryBackground }]}>
|
||||||
<Status size={20} id={roomUser._id} />
|
<Status size={20} id={roomUser._id} />
|
||||||
</View>
|
</View>
|
||||||
) : null}
|
) : null}
|
||||||
</Avatar>
|
</AvatarWithEdit>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -420,7 +440,8 @@ class RoomInfoView extends React.Component<IRoomInfoViewProps, IRoomInfoViewStat
|
||||||
};
|
};
|
||||||
|
|
||||||
renderButtons = () => {
|
renderButtons = () => {
|
||||||
const { roomFromRid, roomUser, room } = this.state;
|
const { roomFromRid, roomUser } = this.state;
|
||||||
|
const { jitsiEnabled } = this.props;
|
||||||
|
|
||||||
const isFromDm = roomFromRid?.rid ? new RegExp(roomUser._id).test(roomFromRid.rid) : false;
|
const isFromDm = roomFromRid?.rid ? new RegExp(roomUser._id).test(roomFromRid.rid) : false;
|
||||||
const isDirectFromSaved = this.isDirect && this.fromRid && roomFromRid;
|
const isDirectFromSaved = this.isDirect && this.fromRid && roomFromRid;
|
||||||
|
@ -436,7 +457,9 @@ class RoomInfoView extends React.Component<IRoomInfoViewProps, IRoomInfoViewStat
|
||||||
return (
|
return (
|
||||||
<View style={styles.roomButtonsContainer}>
|
<View style={styles.roomButtonsContainer}>
|
||||||
{this.renderButton(() => this.handleCreateDirectMessage(this.goRoom), 'message', I18n.t('Message'))}
|
{this.renderButton(() => this.handleCreateDirectMessage(this.goRoom), 'message', I18n.t('Message'))}
|
||||||
<CallButton isDirect={this.isDirect} rid={room.rid} />
|
{jitsiEnabled && this.isDirect
|
||||||
|
? this.renderButton(() => this.handleCreateDirectMessage(this.videoCall), 'camera', I18n.t('Video_call'))
|
||||||
|
: null}
|
||||||
{isDirectFromSaved && !isFromDm && !isDmWithMyself
|
{isDirectFromSaved && !isFromDm && !isDmWithMyself
|
||||||
? this.renderButton(
|
? this.renderButton(
|
||||||
() => handleIgnore(roomUser._id, !isIgnored, roomFromRid.rid),
|
() => handleIgnore(roomUser._id, !isIgnored, roomFromRid.rid),
|
||||||
|
|
|
@ -21,13 +21,14 @@ export default StyleSheet.create({
|
||||||
alignItems: 'center',
|
alignItems: 'center',
|
||||||
justifyContent: 'center',
|
justifyContent: 'center',
|
||||||
marginBottom: 20,
|
marginBottom: 20,
|
||||||
paddingVertical: 8
|
paddingBottom: 8,
|
||||||
|
paddingTop: 32
|
||||||
},
|
},
|
||||||
avatar: {
|
avatar: {
|
||||||
marginHorizontal: 10
|
marginHorizontal: 10
|
||||||
},
|
},
|
||||||
roomTitleContainer: {
|
roomTitleContainer: {
|
||||||
paddingTop: 20,
|
paddingTop: 32,
|
||||||
marginHorizontal: 16,
|
marginHorizontal: 16,
|
||||||
alignItems: 'center'
|
alignItems: 'center'
|
||||||
},
|
},
|
||||||
|
|
|
@ -24,6 +24,7 @@ const styles = StyleSheet.create({
|
||||||
});
|
});
|
||||||
|
|
||||||
interface ILeftButtonsProps {
|
interface ILeftButtonsProps {
|
||||||
|
rid?: string;
|
||||||
tmid?: string;
|
tmid?: string;
|
||||||
unreadsCount: number | null;
|
unreadsCount: number | null;
|
||||||
navigation: StackNavigationProp<ChatsStackParamList, 'RoomView'>;
|
navigation: StackNavigationProp<ChatsStackParamList, 'RoomView'>;
|
||||||
|
@ -38,6 +39,7 @@ interface ILeftButtonsProps {
|
||||||
}
|
}
|
||||||
|
|
||||||
const LeftButtons = ({
|
const LeftButtons = ({
|
||||||
|
rid,
|
||||||
tmid,
|
tmid,
|
||||||
unreadsCount,
|
unreadsCount,
|
||||||
navigation,
|
navigation,
|
||||||
|
@ -78,7 +80,7 @@ const LeftButtons = ({
|
||||||
}
|
}
|
||||||
|
|
||||||
if (baseUrl && userId && token) {
|
if (baseUrl && userId && token) {
|
||||||
return <Avatar text={title} size={30} type={t} style={styles.avatar} onPress={onPress} />;
|
return <Avatar rid={rid} text={title} size={30} type={t} style={styles.avatar} onPress={onPress} />;
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
};
|
};
|
||||||
|
|
|
@ -10,7 +10,8 @@ import * as HeaderButton from '../../containers/HeaderButton';
|
||||||
import database from '../../lib/database';
|
import database from '../../lib/database';
|
||||||
import { getUserSelector } from '../../selectors/login';
|
import { getUserSelector } from '../../selectors/login';
|
||||||
import { events, logEvent } from '../../lib/methods/helpers/log';
|
import { events, logEvent } from '../../lib/methods/helpers/log';
|
||||||
import { IApplicationState, ISubscription, SubscriptionType, TMessageModel, TSubscriptionModel } from '../../definitions';
|
import { isTeamRoom } from '../../lib/methods/helpers/room';
|
||||||
|
import { IApplicationState, SubscriptionType, TMessageModel, TSubscriptionModel } from '../../definitions';
|
||||||
import { ChatsStackParamList } from '../../stacks/types';
|
import { ChatsStackParamList } from '../../stacks/types';
|
||||||
import { TActionSheetOptionsItem } from '../../containers/ActionSheet';
|
import { TActionSheetOptionsItem } from '../../containers/ActionSheet';
|
||||||
import i18n from '../../i18n';
|
import i18n from '../../i18n';
|
||||||
|
@ -19,11 +20,12 @@ import { onHoldLivechat, returnLivechat } from '../../lib/services/restApi';
|
||||||
import { closeLivechat as closeLivechatService } from '../../lib/methods/helpers/closeLivechat';
|
import { closeLivechat as closeLivechatService } from '../../lib/methods/helpers/closeLivechat';
|
||||||
import { Services } from '../../lib/services';
|
import { Services } from '../../lib/services';
|
||||||
import { ILivechatDepartment } from '../../definitions/ILivechatDepartment';
|
import { ILivechatDepartment } from '../../definitions/ILivechatDepartment';
|
||||||
import HeaderCallButton from './components/HeaderCallButton';
|
|
||||||
|
|
||||||
interface IRightButtonsProps extends Pick<ISubscription, 't'> {
|
interface IRightButtonsProps {
|
||||||
userId?: string;
|
userId?: string;
|
||||||
threadsEnabled: boolean;
|
threadsEnabled: boolean;
|
||||||
|
rid?: string;
|
||||||
|
t: string;
|
||||||
tmid?: string;
|
tmid?: string;
|
||||||
teamId?: string;
|
teamId?: string;
|
||||||
isMasterDetail: boolean;
|
isMasterDetail: boolean;
|
||||||
|
@ -41,7 +43,6 @@ interface IRightButtonsProps extends Pick<ISubscription, 't'> {
|
||||||
livechatRequestComment: boolean;
|
livechatRequestComment: boolean;
|
||||||
showActionSheet: Function;
|
showActionSheet: Function;
|
||||||
departmentId?: string;
|
departmentId?: string;
|
||||||
rid?: string;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
interface IRigthButtonsState {
|
interface IRigthButtonsState {
|
||||||
|
@ -337,7 +338,7 @@ class RightButtonsContainer extends Component<IRightButtonsProps, IRigthButtonsS
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
const { isFollowingThread, tunread, tunreadUser, tunreadGroup } = this.state;
|
const { isFollowingThread, tunread, tunreadUser, tunreadGroup } = this.state;
|
||||||
const { t, tmid, threadsEnabled, rid } = this.props;
|
const { t, tmid, threadsEnabled, teamId, joined } = this.props;
|
||||||
|
|
||||||
if (t === 'l') {
|
if (t === 'l') {
|
||||||
if (!this.isOmnichannelPreview()) {
|
if (!this.isOmnichannelPreview()) {
|
||||||
|
@ -362,7 +363,9 @@ class RightButtonsContainer extends Component<IRightButtonsProps, IRigthButtonsS
|
||||||
}
|
}
|
||||||
return (
|
return (
|
||||||
<HeaderButton.Container>
|
<HeaderButton.Container>
|
||||||
{rid ? <HeaderCallButton rid={rid} /> : null}
|
{isTeamRoom({ teamId, joined }) ? (
|
||||||
|
<HeaderButton.Item iconName='channel-public' onPress={this.goTeamChannels} testID='room-view-header-team-channels' />
|
||||||
|
) : null}
|
||||||
{threadsEnabled ? (
|
{threadsEnabled ? (
|
||||||
<HeaderButton.Item
|
<HeaderButton.Item
|
||||||
iconName='threads'
|
iconName='threads'
|
||||||
|
|
|
@ -1,12 +0,0 @@
|
||||||
import React from 'react';
|
|
||||||
|
|
||||||
import * as HeaderButton from '../../../containers/HeaderButton';
|
|
||||||
import { useVideoConf } from '../../../lib/hooks/useVideoConf';
|
|
||||||
|
|
||||||
export default function HeaderCallButton({ rid }: { rid: string }): React.ReactElement | null {
|
|
||||||
const { showInitCallActionSheet, showCallOption } = useVideoConf(rid);
|
|
||||||
|
|
||||||
if (showCallOption)
|
|
||||||
return <HeaderButton.Item iconName='phone' onPress={showInitCallActionSheet} testID='room-view-header-call' />;
|
|
||||||
return null;
|
|
||||||
}
|
|
|
@ -589,6 +589,7 @@ class RoomView extends React.Component<IRoomViewProps, IRoomViewState> {
|
||||||
headerRightContainerStyle: { flexGrow: undefined, flexBasis: undefined },
|
headerRightContainerStyle: { flexGrow: undefined, flexBasis: undefined },
|
||||||
headerLeft: () => (
|
headerLeft: () => (
|
||||||
<LeftButtons
|
<LeftButtons
|
||||||
|
rid={rid}
|
||||||
tmid={tmid}
|
tmid={tmid}
|
||||||
unreadsCount={unreadsCount}
|
unreadsCount={unreadsCount}
|
||||||
navigation={navigation}
|
navigation={navigation}
|
||||||
|
@ -627,7 +628,7 @@ class RoomView extends React.Component<IRoomViewProps, IRoomViewState> {
|
||||||
joined={joined}
|
joined={joined}
|
||||||
status={room.status}
|
status={room.status}
|
||||||
omnichannelPermissions={omnichannelPermissions}
|
omnichannelPermissions={omnichannelPermissions}
|
||||||
t={(this.t || t) as SubscriptionType}
|
t={this.t || t}
|
||||||
encrypted={encrypted}
|
encrypted={encrypted}
|
||||||
navigation={navigation}
|
navigation={navigation}
|
||||||
toggleFollowThread={this.toggleFollowThread}
|
toggleFollowThread={this.toggleFollowThread}
|
||||||
|
@ -785,22 +786,13 @@ class RoomView extends React.Component<IRoomViewProps, IRoomViewState> {
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
handleCloseEmoji = (action?: Function, params?: any) => {
|
|
||||||
if (this.messagebox?.current) {
|
|
||||||
return this.messagebox?.current.closeEmojiAndAction(action, params);
|
|
||||||
}
|
|
||||||
if (action) {
|
|
||||||
return action(params);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
errorActionsShow = (message: TAnyMessageModel) => {
|
errorActionsShow = (message: TAnyMessageModel) => {
|
||||||
this.handleCloseEmoji(this.messageErrorActions?.showMessageErrorActions, message);
|
this.messagebox?.current?.closeEmojiAndAction(this.messageErrorActions?.showMessageErrorActions, message);
|
||||||
};
|
};
|
||||||
|
|
||||||
showActionSheet = (options: any) => {
|
showActionSheet = (options: any) => {
|
||||||
const { showActionSheet } = this.props;
|
const { showActionSheet } = this.props;
|
||||||
this.handleCloseEmoji(showActionSheet, options);
|
this.messagebox?.current?.closeEmojiAndAction(showActionSheet, options);
|
||||||
};
|
};
|
||||||
|
|
||||||
onEditInit = (message: TAnyMessageModel) => {
|
onEditInit = (message: TAnyMessageModel) => {
|
||||||
|
@ -859,7 +851,7 @@ class RoomView extends React.Component<IRoomViewProps, IRoomViewState> {
|
||||||
};
|
};
|
||||||
|
|
||||||
onReactionInit = (message: TAnyMessageModel) => {
|
onReactionInit = (message: TAnyMessageModel) => {
|
||||||
this.handleCloseEmoji(() => {
|
this.messagebox?.current?.closeEmojiAndAction(() => {
|
||||||
this.setState({ selectedMessage: message }, this.showReactionPicker);
|
this.setState({ selectedMessage: message }, this.showReactionPicker);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
@ -874,7 +866,7 @@ class RoomView extends React.Component<IRoomViewProps, IRoomViewState> {
|
||||||
if (message.tmid && !this.tmid) {
|
if (message.tmid && !this.tmid) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this.handleCloseEmoji(this.messageActions?.showMessageActions, message);
|
this.messagebox?.current?.closeEmojiAndAction(this.messageActions?.showMessageActions, message);
|
||||||
};
|
};
|
||||||
|
|
||||||
showAttachment = (attachment: IAttachment) => {
|
showAttachment = (attachment: IAttachment) => {
|
||||||
|
@ -903,7 +895,7 @@ class RoomView extends React.Component<IRoomViewProps, IRoomViewState> {
|
||||||
this.setState({ selectedMessage: message });
|
this.setState({ selectedMessage: message });
|
||||||
const { showActionSheet } = this.props;
|
const { showActionSheet } = this.props;
|
||||||
const { selectedMessage } = this.state;
|
const { selectedMessage } = this.state;
|
||||||
this.handleCloseEmoji(showActionSheet, {
|
this.messagebox?.current?.closeEmojiAndAction(showActionSheet, {
|
||||||
children: <ReactionsList reactions={selectedMessage?.reactions} getCustomEmoji={this.getCustomEmoji} />,
|
children: <ReactionsList reactions={selectedMessage?.reactions} getCustomEmoji={this.getCustomEmoji} />,
|
||||||
snaps: ['50%', '80%'],
|
snaps: ['50%', '80%'],
|
||||||
enableContentPanningGesture: false
|
enableContentPanningGesture: false
|
||||||
|
@ -1197,11 +1189,6 @@ class RoomView extends React.Component<IRoomViewProps, IRoomViewState> {
|
||||||
if ('id' in item && item.t === E2E_MESSAGE_TYPE && item.e2e !== E2E_STATUS.DONE) {
|
if ('id' in item && item.t === E2E_MESSAGE_TYPE && item.e2e !== E2E_STATUS.DONE) {
|
||||||
name = I18n.t('Encrypted_message');
|
name = I18n.t('Encrypted_message');
|
||||||
}
|
}
|
||||||
if (!jumpToMessageId) {
|
|
||||||
setTimeout(() => {
|
|
||||||
sendLoadingEvent({ visible: false });
|
|
||||||
}, 300);
|
|
||||||
}
|
|
||||||
return navigation.push('RoomView', {
|
return navigation.push('RoomView', {
|
||||||
rid: this.rid,
|
rid: this.rid,
|
||||||
tmid: item.tmid,
|
tmid: item.tmid,
|
||||||
|
@ -1234,15 +1221,14 @@ class RoomView extends React.Component<IRoomViewProps, IRoomViewState> {
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
// OLD METHOD - support versions before 5.0.0
|
handleCallJitsi = () => {
|
||||||
handleEnterCall = () => {
|
|
||||||
const { room } = this.state;
|
const { room } = this.state;
|
||||||
if ('id' in room) {
|
if ('id' in room) {
|
||||||
const { jitsiTimeout } = room;
|
const { jitsiTimeout } = room;
|
||||||
if (jitsiTimeout && jitsiTimeout < new Date()) {
|
if (jitsiTimeout && jitsiTimeout < new Date()) {
|
||||||
showErrorAlert(I18n.t('Call_already_ended'));
|
showErrorAlert(I18n.t('Call_already_ended'));
|
||||||
} else {
|
} else {
|
||||||
callJitsi({ room });
|
callJitsi(room);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -1388,14 +1374,14 @@ class RoomView extends React.Component<IRoomViewProps, IRoomViewState> {
|
||||||
autoTranslateLanguage={'id' in room ? room.autoTranslateLanguage : undefined}
|
autoTranslateLanguage={'id' in room ? room.autoTranslateLanguage : undefined}
|
||||||
navToRoomInfo={this.navToRoomInfo}
|
navToRoomInfo={this.navToRoomInfo}
|
||||||
getCustomEmoji={this.getCustomEmoji}
|
getCustomEmoji={this.getCustomEmoji}
|
||||||
handleEnterCall={this.handleEnterCall}
|
callJitsi={this.handleCallJitsi}
|
||||||
blockAction={this.blockAction}
|
blockAction={this.blockAction}
|
||||||
threadBadgeColor={this.getBadgeColor(item?.id)}
|
threadBadgeColor={this.getBadgeColor(item?.id)}
|
||||||
toggleFollowThread={this.toggleFollowThread}
|
toggleFollowThread={this.toggleFollowThread}
|
||||||
jumpToMessage={this.jumpToMessageByUrl}
|
jumpToMessage={this.jumpToMessageByUrl}
|
||||||
highlighted={highlightedMessage === item.id}
|
highlighted={highlightedMessage === item.id}
|
||||||
theme={theme}
|
theme={theme}
|
||||||
closeEmojiAndAction={this.handleCloseEmoji}
|
closeEmojiAndAction={this.messagebox?.current?.closeEmojiAndAction}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,11 +1,16 @@
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { StyleSheet, View } from 'react-native';
|
import { StyleSheet, Text, View } from 'react-native';
|
||||||
|
import { createImageProgress } from 'react-native-image-progress';
|
||||||
|
import * as Progress from 'react-native-progress';
|
||||||
import FastImage from 'react-native-fast-image';
|
import FastImage from 'react-native-fast-image';
|
||||||
|
|
||||||
|
import sharedStyles from '../Styles';
|
||||||
import { themes } from '../../lib/constants';
|
import { themes } from '../../lib/constants';
|
||||||
import { isTablet } from '../../lib/methods/helpers';
|
import { isTablet } from '../../lib/methods/helpers';
|
||||||
import { TSupportedThemes } from '../../theme';
|
import { TSupportedThemes } from '../../theme';
|
||||||
|
|
||||||
|
const ImageProgress = createImageProgress(FastImage);
|
||||||
|
|
||||||
const SIZE = 96;
|
const SIZE = 96;
|
||||||
const MARGIN_TOP = isTablet ? 0 : 64;
|
const MARGIN_TOP = isTablet ? 0 : 64;
|
||||||
const BORDER_RADIUS = 8;
|
const BORDER_RADIUS = 8;
|
||||||
|
@ -22,20 +27,50 @@ const styles = StyleSheet.create({
|
||||||
width: SIZE,
|
width: SIZE,
|
||||||
height: SIZE,
|
height: SIZE,
|
||||||
borderRadius: BORDER_RADIUS
|
borderRadius: BORDER_RADIUS
|
||||||
|
},
|
||||||
|
fallback: {
|
||||||
|
width: SIZE,
|
||||||
|
height: SIZE,
|
||||||
|
borderRadius: BORDER_RADIUS,
|
||||||
|
alignItems: 'center',
|
||||||
|
justifyContent: 'center'
|
||||||
|
},
|
||||||
|
initial: {
|
||||||
|
...sharedStyles.textBold,
|
||||||
|
fontSize: 42
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const getInitial = (url: string) => url && url.replace(/http(s?):\/\//, '').slice(0, 1);
|
||||||
|
|
||||||
|
interface IFallback {
|
||||||
|
theme: TSupportedThemes;
|
||||||
|
initial: string;
|
||||||
|
}
|
||||||
|
const Fallback = ({ theme, initial }: IFallback) => (
|
||||||
|
<View style={[styles.container, styles.fallback, { backgroundColor: themes[theme].dangerColor }]}>
|
||||||
|
<Text style={[styles.initial, { color: themes[theme].buttonText }]}>{initial}</Text>
|
||||||
|
</View>
|
||||||
|
);
|
||||||
|
|
||||||
interface IServerAvatar {
|
interface IServerAvatar {
|
||||||
theme: TSupportedThemes;
|
theme: TSupportedThemes;
|
||||||
url: string;
|
url: string;
|
||||||
image: string;
|
image: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: missing skeleton
|
|
||||||
const ServerAvatar = React.memo(({ theme, url, image }: IServerAvatar) => (
|
const ServerAvatar = React.memo(({ theme, url, image }: IServerAvatar) => (
|
||||||
<View style={styles.container}>
|
<View style={styles.container}>
|
||||||
{image && (
|
{image && (
|
||||||
<FastImage style={[styles.image, { borderColor: themes[theme].borderColor }]} source={{ uri: `${url}/${image}` }} />
|
<ImageProgress
|
||||||
|
style={[styles.image, { borderColor: themes[theme].borderColor }]}
|
||||||
|
source={{ uri: `${url}/${image}` }}
|
||||||
|
resizeMode={FastImage.resizeMode.cover}
|
||||||
|
indicator={Progress.Pie}
|
||||||
|
indicatorProps={{
|
||||||
|
color: themes[theme].actionTintColor
|
||||||
|
}}
|
||||||
|
renderError={() => <Fallback theme={theme} initial={getInitial(url)} />}
|
||||||
|
/>
|
||||||
)}
|
)}
|
||||||
</View>
|
</View>
|
||||||
));
|
));
|
||||||
|
|
|
@ -3,8 +3,7 @@ module.exports = {
|
||||||
plugins: [
|
plugins: [
|
||||||
['@babel/plugin-proposal-decorators', { legacy: true }],
|
['@babel/plugin-proposal-decorators', { legacy: true }],
|
||||||
'react-native-reanimated/plugin',
|
'react-native-reanimated/plugin',
|
||||||
'@babel/plugin-transform-named-capturing-groups-regex',
|
'@babel/plugin-transform-named-capturing-groups-regex'
|
||||||
['module:react-native-dotenv']
|
|
||||||
],
|
],
|
||||||
env: {
|
env: {
|
||||||
production: {
|
production: {
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"timeout": 300000,
|
||||||
|
"recursive": true,
|
||||||
|
"bail": true,
|
||||||
|
"require": ["ts-node/register"],
|
||||||
|
"file": "e2e/tests/init.ts",
|
||||||
|
"extension": ["ts"]
|
||||||
|
}
|
129
e2e/README.md
129
e2e/README.md
|
@ -1,69 +1,84 @@
|
||||||
## Overview and folder structure
|
# E2E Testing
|
||||||
|
|
||||||
WIP: End-to-end tests are a work in progress and they're going to change.
|
## Contents
|
||||||
|
|
||||||
```
|
1. [Prepare test environment](##-1.-Prepare-test-environment)
|
||||||
|-- e2e
|
2. [Prepare test data](##-2.-Prepare-test-data)
|
||||||
|-- helpers
|
3. [Running tests](##-3.-Running-tests)
|
||||||
|-- tests
|
4. [FAQ](##-FAQ)
|
||||||
|-- data.ts
|
|
||||||
|-- e2e_account.ts
|
|
||||||
```
|
|
||||||
|
|
||||||
- `e2e/helpers`
|
### 1. Prepare test environment
|
||||||
- This folder contains a few functions to setup and help write tests.
|
|
||||||
- `e2e/tests`
|
|
||||||
- This folder contains the actual test files
|
|
||||||
- It's currently split into `assorted`, `onboarding`, `room`, and `team` folders
|
|
||||||
- There's not a clear convention on where a test should be placed yet, but the folders above exist to try to separate them into features
|
|
||||||
- Keep every test file truly idempotent
|
|
||||||
- Each file can only impact on the tests written inside of it
|
|
||||||
- They should not impact on other files, so pay attention on the data you use
|
|
||||||
- `data.ts`
|
|
||||||
- Contains seeds to common test data, like server url, public channels, etc
|
|
||||||
- Currently we point to https://mobile.rocket.chat as main server
|
|
||||||
- Pointing to a local server is not recommended yet, as you would need to create a few public channels and change some permissions
|
|
||||||
- Ideally we should point to a docker or even a mocked server, but that's tbd
|
|
||||||
- Try not to add new data there. Use random values instead.
|
|
||||||
- It's hard to keep track of where each value is used
|
|
||||||
- `e2e_account.ts`
|
|
||||||
- Contains user and password with correct permissions on main server
|
|
||||||
- Check `e2e_account.example.ts` for structure
|
|
||||||
- It needs to be added manually on local (it's already set on CI)
|
|
||||||
- Ask Diego Mello for credentials
|
|
||||||
|
|
||||||
## Shared config
|
#### 1.1. A Rocket.Chat server
|
||||||
- Change `.env` to `RUNNING_E2E_TESTS=true`
|
|
||||||
- You can also `RUNNING_E2E_TESTS=true yarn start reset-cache`, but it's easier to change the file as long as you don't commit it
|
|
||||||
|
|
||||||
## Setup and run iOS
|
Either
|
||||||
|
|
||||||
- Install applesimutils
|
* Install Rocket.Chat meteor app by following this [guide](https://developer.rocket.chat/rocket.chat/rocket-chat-environment-setup).
|
||||||
```
|
|
||||||
brew tap wix/brew
|
|
||||||
brew install applesimutils
|
|
||||||
```
|
|
||||||
|
|
||||||
### Run on debug mode
|
Or
|
||||||
- Build the app with `yarn e2e:ios-build-debug`
|
|
||||||
- Test the app with `yarn e2e:ios-test-debug`
|
|
||||||
|
|
||||||
### Run on release mode
|
* Use the local Docker environment available in this folder. You can start the environment using `./e2e/docker/controlRCDemoEnv.sh startandwait`, or you can use the packaged start & run script (see step 3). Either way, you'll need [Docker](https://docs.docker.com/engine/install/) and [Docker Compose](https://docs.docker.com/compose/install/).
|
||||||
- Build the app with `yarn e2e:ios-build`
|
|
||||||
- Test the app with `yarn e2e:ios-test`
|
|
||||||
|
|
||||||
## Setup and run Android
|
#### 1.2. Set up detox
|
||||||
|
|
||||||
- Create AVD
|
* Install dependencies by following this [guide](https://github.com/wix/Detox/blob/master/docs/Introduction.GettingStarted.md#step-1-install-dependencies) (only Step 1).
|
||||||
- It's important to create the same emulator as on CI. Read more: https://wix.github.io/Detox/docs/guide/android-dev-env
|
|
||||||
```
|
|
||||||
sh ./scripts/create-avd.sh
|
|
||||||
```
|
|
||||||
|
|
||||||
### Run on debug mode
|
### 2. Prepare test data
|
||||||
- Build the app with `yarn e2e:android-build-debug`
|
|
||||||
- Test the app with `yarn e2e:android-test-debug`
|
|
||||||
|
|
||||||
### Run on release mode
|
* If you're running your own Rocket.Chat server, ensure it's started (e.g. `meteor npm start` in the server project directory).
|
||||||
- Build the app with `yarn e2e:android-build`
|
* Edit `e2e/data.ts`:
|
||||||
- Test the app with `yarn e2e:android-test`
|
* Set the `server` to the address of the server under test
|
||||||
|
* Create a file called `e2e_account.ts`, in the same folder as `data.ts`. Set the `adminUser` and `adminPassword` to an admin user on that environment (or a user with at least `create-user` and `create-c` permissions). The example of how to create this file is on `e2e/e2e_account.example.ts`
|
||||||
|
* Working example configs exist in `./e2e/data/`. Setting `FORCE_DEFAULT_DOCKER_DATA` to `1` in the `runTestsInDocker.sh` script will use the example config automatically
|
||||||
|
|
||||||
|
### 3. Running tests
|
||||||
|
|
||||||
|
#### 3.1. iOS
|
||||||
|
|
||||||
|
* Build app with detox: `detox build -c ios.sim.release`
|
||||||
|
* Open Simulator which is used in tests (check in package.json under detox section) from Xcode and make sure that software keyboard is being displayed. To toggle keyboard press `cmd+K`.
|
||||||
|
* Run tests: `detox test -c ios.sim.release`, or, if choosing Docker you can run the packaged environment & runner (`./e2e/docker/runTestsInDocker.sh`) which will start the Docker infrastructure, run the tests and tear it down again once done.
|
||||||
|
|
||||||
|
#### 3.2. Android
|
||||||
|
|
||||||
|
* Build app with detox: `detox build -c android.emu.debug`
|
||||||
|
* Run: `react-native start`
|
||||||
|
* Run Android emulator with name `ANDROID_API_28` via Android studio or `cd /Users/USERNAME/Library/Android/sdk/emulator/ && ./emulator -avd ANDROID_API_28`
|
||||||
|
Note: if you need to run tests on different Android emulator then simply change emulator name in ./package.json detox configurations
|
||||||
|
* Run tests: `detox test -c android.emu.debug`
|
||||||
|
|
||||||
|
#### 3.3 Running a subset of tests
|
||||||
|
|
||||||
|
Tests have been grouped into subfolders. You can choose to run just one group of tests by running, for example:
|
||||||
|
|
||||||
|
`detox test ./e2e/tests/onboarding -c ios.sim.release`
|
||||||
|
|
||||||
|
To do the same with the Docker runner:
|
||||||
|
|
||||||
|
`./e2e/docker/runTestsInDocker.sh onboarding`
|
||||||
|
|
||||||
|
### 4. FAQ
|
||||||
|
|
||||||
|
#### 4.1. Detox build fails
|
||||||
|
|
||||||
|
* Delete `node_modules`, `ios/build`, `android/build`:
|
||||||
|
`rm -rf node_modules && rm -rf ios/build && rm -rf android/build`
|
||||||
|
* Install packages: `yarn install`
|
||||||
|
* Kill metro bundler server by closing terminal or with following command: `lsof -ti:8081 | xargs kill`
|
||||||
|
* Clear metro bundler cache: `watchman watch-del-all && rm -rf $TMPDIR/react-native-packager-cache-* && rm -rf $TMPDIR/metro-bundler-cache-*`
|
||||||
|
* Make sure you have all required [environment](##-1.-Prepare-test-environment).
|
||||||
|
* Now try building again with `detox build` (with specific configuration).
|
||||||
|
|
||||||
|
#### 4.2. Detox iOS test run fails
|
||||||
|
|
||||||
|
* Check if your meteor app is running by opening `localhost:3000` in browser.
|
||||||
|
* Make sure software keyboard is displayed in simulator when focusing some input. To enable keyboard press `cmd+K`.
|
||||||
|
* Make sure you have prepared all [test data](##-2.-Prepare-test-data).
|
||||||
|
* Sometimes detox e2e tests fail for no reason so all you can do is simply re-run again.
|
||||||
|
|
||||||
|
### 5. Todo
|
||||||
|
|
||||||
|
* TOTP test
|
||||||
|
* Push notifications
|
||||||
|
* Deep linking
|
||||||
|
* Intermittent connectivity
|
||||||
|
|
87
e2e/data.ts
87
e2e/data.ts
|
@ -1,7 +1,7 @@
|
||||||
// @ts-ignore
|
/* eslint-disable import/extensions, import/no-unresolved */
|
||||||
// eslint-disable-next-line import/no-unresolved, import/extensions
|
|
||||||
import account from './e2e_account';
|
|
||||||
import random from './helpers/random';
|
import random from './helpers/random';
|
||||||
|
// @ts-ignore
|
||||||
|
import account from './e2e_account';
|
||||||
|
|
||||||
export interface IUser {
|
export interface IUser {
|
||||||
username: string;
|
username: string;
|
||||||
|
@ -11,12 +11,40 @@ export interface IUser {
|
||||||
|
|
||||||
export type TData = typeof data;
|
export type TData = typeof data;
|
||||||
export type TDataKeys = keyof TData;
|
export type TDataKeys = keyof TData;
|
||||||
|
export type TDataUsers = keyof typeof data.users;
|
||||||
export type TDataChannels = keyof typeof data.channels;
|
export type TDataChannels = keyof typeof data.channels;
|
||||||
|
export type TUserRegularChannels = keyof typeof data.userRegularChannels;
|
||||||
|
export type TDataGroups = keyof typeof data.groups;
|
||||||
|
export type TDataTeams = keyof typeof data.teams;
|
||||||
|
|
||||||
|
const value: string = random(20);
|
||||||
const data = {
|
const data = {
|
||||||
server: 'https://mobile.rocket.chat',
|
server: 'https://mobile.rocket.chat',
|
||||||
alternateServer: 'https://stable.rocket.chat',
|
|
||||||
...account,
|
...account,
|
||||||
|
alternateServer: 'https://stable.rocket.chat',
|
||||||
|
users: {
|
||||||
|
regular: {
|
||||||
|
username: `userone${value}`,
|
||||||
|
password: '123',
|
||||||
|
email: `mobile+regular${value}@rocket.chat`
|
||||||
|
},
|
||||||
|
alternate: {
|
||||||
|
username: `usertwo${value}`,
|
||||||
|
password: '123',
|
||||||
|
email: `mobile+alternate${value}@rocket.chat`,
|
||||||
|
totpSecret: 'NA4GOMZGHBQSK6KEFRVT62DMGJJGSYZJFZIHO3ZOGVXWCYZ6MMZQ'
|
||||||
|
},
|
||||||
|
profileChanges: {
|
||||||
|
username: `userthree${value}`,
|
||||||
|
password: '123',
|
||||||
|
email: `mobile+profileChanges${value}@rocket.chat`
|
||||||
|
},
|
||||||
|
existing: {
|
||||||
|
username: `existinguser${value}`,
|
||||||
|
password: '123',
|
||||||
|
email: `mobile+existing${value}@rocket.chat`
|
||||||
|
}
|
||||||
|
},
|
||||||
channels: {
|
channels: {
|
||||||
detoxpublic: {
|
detoxpublic: {
|
||||||
name: 'detox-public'
|
name: 'detox-public'
|
||||||
|
@ -26,15 +54,48 @@ const data = {
|
||||||
joinCode: '123'
|
joinCode: '123'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
randomUser: (): { username: string; name: string; password: string; email: string } => {
|
userRegularChannels: {
|
||||||
const randomVal = random();
|
detoxpublic: {
|
||||||
return {
|
name: `detox-public-${value}`
|
||||||
username: `user${randomVal}`,
|
}
|
||||||
name: `user${randomVal}`, // FIXME: apply a different name
|
},
|
||||||
password: `password${randomVal}`,
|
groups: {
|
||||||
email: `mobile+${randomVal}@rocket.chat`
|
private: {
|
||||||
};
|
name: `detox-private-${value}`
|
||||||
}
|
},
|
||||||
|
alternate: {
|
||||||
|
name: `detox-alternate-${value}`
|
||||||
|
},
|
||||||
|
alternate2: {
|
||||||
|
name: `detox-alternate2-${value}`
|
||||||
|
}
|
||||||
|
},
|
||||||
|
teams: {
|
||||||
|
private: {
|
||||||
|
name: `detox-team-${value}`
|
||||||
|
}
|
||||||
|
},
|
||||||
|
registeringUser: {
|
||||||
|
username: `newuser${value}`,
|
||||||
|
password: `password${value}`,
|
||||||
|
email: `mobile+registering${value}@rocket.chat`
|
||||||
|
},
|
||||||
|
registeringUser2: {
|
||||||
|
username: `newusertwo${value}`,
|
||||||
|
password: `passwordtwo${value}`,
|
||||||
|
email: `mobile+registeringtwo${value}@rocket.chat`
|
||||||
|
},
|
||||||
|
registeringUser3: {
|
||||||
|
username: `newuserthree${value}`,
|
||||||
|
password: `passwordthree${value}`,
|
||||||
|
email: `mobile+registeringthree${value}@rocket.chat`
|
||||||
|
},
|
||||||
|
registeringUser4: {
|
||||||
|
username: `newuserfour${value}`,
|
||||||
|
password: `passwordfour${value}`,
|
||||||
|
email: `mobile+registeringfour${value}@rocket.chat`
|
||||||
|
},
|
||||||
|
random: value
|
||||||
};
|
};
|
||||||
|
|
||||||
export default data;
|
export default data;
|
||||||
|
|
|
@ -0,0 +1,96 @@
|
||||||
|
/* eslint-disable import/extensions, import/no-unresolved */
|
||||||
|
// @ts-ignore
|
||||||
|
import random from './helpers/random';
|
||||||
|
// @ts-ignore
|
||||||
|
import account from './e2e_account';
|
||||||
|
|
||||||
|
export interface IUser {
|
||||||
|
username: string;
|
||||||
|
password: string;
|
||||||
|
email: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export type TData = typeof data;
|
||||||
|
export type TDataKeys = keyof TData;
|
||||||
|
export type TDataUsers = keyof typeof data.users;
|
||||||
|
export type TDataChannels = keyof typeof data.channels;
|
||||||
|
export type TUserRegularChannels = keyof typeof data.userRegularChannels;
|
||||||
|
export type TDataGroups = keyof typeof data.groups;
|
||||||
|
export type TDataTeams = keyof typeof data.teams;
|
||||||
|
|
||||||
|
const value = random(20);
|
||||||
|
const data = {
|
||||||
|
server: 'https://mobile.rocket.chat',
|
||||||
|
...account,
|
||||||
|
alternateServer: 'https://stable.rocket.chat',
|
||||||
|
users: {
|
||||||
|
regular: {
|
||||||
|
username: `userone${value}`,
|
||||||
|
password: '123',
|
||||||
|
email: `mobile+regular${value}@rocket.chat`
|
||||||
|
},
|
||||||
|
alternate: {
|
||||||
|
username: `usertwo${value}`,
|
||||||
|
password: '123',
|
||||||
|
email: `mobile+alternate${value}@rocket.chat`,
|
||||||
|
totpSecret: 'NA4GOMZGHBQSK6KEFRVT62DMGJJGSYZJFZIHO3ZOGVXWCYZ6MMZQ'
|
||||||
|
},
|
||||||
|
profileChanges: {
|
||||||
|
username: `userthree${value}`,
|
||||||
|
password: '123',
|
||||||
|
email: `mobile+profileChanges${value}@rocket.chat`
|
||||||
|
},
|
||||||
|
existing: {
|
||||||
|
username: `existinguser${value}`,
|
||||||
|
password: '123',
|
||||||
|
email: `mobile+existing${value}@rocket.chat`
|
||||||
|
}
|
||||||
|
},
|
||||||
|
channels: {
|
||||||
|
detoxpublic: {
|
||||||
|
name: 'detox-public'
|
||||||
|
},
|
||||||
|
detoxpublicprotected: {
|
||||||
|
name: 'detox-public-protected',
|
||||||
|
joinCode: '123'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
userRegularChannels: {
|
||||||
|
detoxpublic: {
|
||||||
|
name: `detox-public-${value}`
|
||||||
|
}
|
||||||
|
},
|
||||||
|
groups: {
|
||||||
|
private: {
|
||||||
|
name: `detox-private-${value}`
|
||||||
|
}
|
||||||
|
},
|
||||||
|
teams: {
|
||||||
|
private: {
|
||||||
|
name: `detox-team-${value}`
|
||||||
|
}
|
||||||
|
},
|
||||||
|
registeringUser: {
|
||||||
|
username: `newuser${value}`,
|
||||||
|
password: `password${value}`,
|
||||||
|
email: `mobile+registering${value}@rocket.chat`
|
||||||
|
},
|
||||||
|
registeringUser2: {
|
||||||
|
username: `newusertwo${value}`,
|
||||||
|
password: `passwordtwo${value}`,
|
||||||
|
email: `mobile+registeringtwo${value}@rocket.chat`
|
||||||
|
},
|
||||||
|
registeringUser3: {
|
||||||
|
username: `newuserthree${value}`,
|
||||||
|
password: `passwordthree${value}`,
|
||||||
|
email: `mobile+registeringthree${value}@rocket.chat`
|
||||||
|
},
|
||||||
|
registeringUser4: {
|
||||||
|
username: `newuserfour${value}`,
|
||||||
|
password: `passwordfour${value}`,
|
||||||
|
email: `mobile+registeringfour${value}@rocket.chat`
|
||||||
|
},
|
||||||
|
random: value
|
||||||
|
};
|
||||||
|
|
||||||
|
export default data;
|
|
@ -0,0 +1,101 @@
|
||||||
|
/* eslint-disable import/extensions, import/no-unresolved */
|
||||||
|
// @ts-ignore
|
||||||
|
import random from './helpers/random';
|
||||||
|
|
||||||
|
export interface IUser {
|
||||||
|
username: string;
|
||||||
|
password: string;
|
||||||
|
email: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export type TData = typeof data;
|
||||||
|
export type TDataKeys = keyof TData;
|
||||||
|
export type TDataUsers = keyof typeof data.users;
|
||||||
|
export type TDataChannels = keyof typeof data.channels;
|
||||||
|
export type TUserRegularChannels = keyof typeof data.userRegularChannels;
|
||||||
|
export type TDataGroups = keyof typeof data.groups;
|
||||||
|
export type TDataTeams = keyof typeof data.teams;
|
||||||
|
|
||||||
|
const value = random(20);
|
||||||
|
const data = {
|
||||||
|
server: 'http://localhost:3000',
|
||||||
|
adminUser: 'admin',
|
||||||
|
adminPassword: 'password',
|
||||||
|
alternateServer: 'https://stable.rocket.chat',
|
||||||
|
users: {
|
||||||
|
regular: {
|
||||||
|
username: `userone${value}`,
|
||||||
|
password: '123',
|
||||||
|
email: `mobile+regular${value}@rocket.chat`
|
||||||
|
},
|
||||||
|
alternate: {
|
||||||
|
username: `usertwo${value}`,
|
||||||
|
password: '123',
|
||||||
|
email: `mobile+alternate${value}@rocket.chat`,
|
||||||
|
totpSecret: 'NA4GOMZGHBQSK6KEFRVT62DMGJJGSYZJFZIHO3ZOGVXWCYZ6MMZQ'
|
||||||
|
},
|
||||||
|
profileChanges: {
|
||||||
|
username: `userthree${value}`,
|
||||||
|
password: '123',
|
||||||
|
email: `mobile+profileChanges${value}@rocket.chat`
|
||||||
|
},
|
||||||
|
existing: {
|
||||||
|
username: `existinguser${value}`,
|
||||||
|
password: '123',
|
||||||
|
email: `mobile+existing${value}@rocket.chat`
|
||||||
|
}
|
||||||
|
},
|
||||||
|
channels: {
|
||||||
|
detoxpublic: {
|
||||||
|
name: 'detox-public'
|
||||||
|
},
|
||||||
|
detoxpublicprotected: {
|
||||||
|
name: 'detox-public-protected',
|
||||||
|
joinCode: '123'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
userRegularChannels: {
|
||||||
|
detoxpublic: {
|
||||||
|
name: `detox-public-${value}`
|
||||||
|
}
|
||||||
|
},
|
||||||
|
groups: {
|
||||||
|
private: {
|
||||||
|
name: `detox-private-${value}`
|
||||||
|
},
|
||||||
|
alternate: {
|
||||||
|
name: `detox-alternate-${value}`
|
||||||
|
},
|
||||||
|
alternate2: {
|
||||||
|
name: `detox-alternate2-${value}`
|
||||||
|
}
|
||||||
|
},
|
||||||
|
teams: {
|
||||||
|
private: {
|
||||||
|
name: `detox-team-${value}`
|
||||||
|
}
|
||||||
|
},
|
||||||
|
registeringUser: {
|
||||||
|
username: `newuser${value}`,
|
||||||
|
password: `password${value}`,
|
||||||
|
email: `mobile+registering${value}@rocket.chat`
|
||||||
|
},
|
||||||
|
registeringUser2: {
|
||||||
|
username: `newusertwo${value}`,
|
||||||
|
password: `passwordtwo${value}`,
|
||||||
|
email: `mobile+registeringtwo${value}@rocket.chat`
|
||||||
|
},
|
||||||
|
registeringUser3: {
|
||||||
|
username: `newuserthree${value}`,
|
||||||
|
password: `passwordthree${value}`,
|
||||||
|
email: `mobile+registeringthree${value}@rocket.chat`
|
||||||
|
},
|
||||||
|
registeringUser4: {
|
||||||
|
username: `newuserfour${value}`,
|
||||||
|
password: `passwordfour${value}`,
|
||||||
|
email: `mobile+registeringfour${value}@rocket.chat`
|
||||||
|
},
|
||||||
|
random: value
|
||||||
|
};
|
||||||
|
|
||||||
|
export default data;
|
|
@ -0,0 +1,70 @@
|
||||||
|
#!/bin/bash
|
||||||
|
SCRIPTPATH="$( cd "$(dirname "$0")" ; pwd -P )"
|
||||||
|
|
||||||
|
PAUSE_ON_FAIL_FOR_DEBUG=0
|
||||||
|
|
||||||
|
COMMAND="start"
|
||||||
|
if [ "$1" != "" ]; then
|
||||||
|
if [[ "$1" =~ ^(start|startandwait|stop)$ ]]; then
|
||||||
|
COMMAND=$1
|
||||||
|
else
|
||||||
|
echo "Invalid command. Must be one of: start,stop"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
WAIT=0
|
||||||
|
if [ "$COMMAND" == "startandwait" ]; then
|
||||||
|
COMMAND="start"
|
||||||
|
WAIT=1
|
||||||
|
fi
|
||||||
|
|
||||||
|
COMPOSEPATH="$SCRIPTPATH/rc_test_env"
|
||||||
|
export DATAROOT="$SCRIPTPATH"
|
||||||
|
|
||||||
|
if [ "$COMMAND" == "start" ]; then
|
||||||
|
echo "Fetching infrastructure config from GitHub"
|
||||||
|
COMPOSEURL=https://raw.githubusercontent.com/RocketChat/Rocket.Chat/develop/docker-compose.yml
|
||||||
|
COMPOSEFILE="$COMPOSEPATH/docker-compose.yml"
|
||||||
|
curl -s "$COMPOSEURL" -o "$COMPOSEFILE"
|
||||||
|
|
||||||
|
echo "Starting infrastructure"
|
||||||
|
(
|
||||||
|
if [ -d "$SCRIPTPATH/data/db" ]; then rm -rf "$SCRIPTPATH/data/db"; fi
|
||||||
|
cd "$COMPOSEPATH"
|
||||||
|
docker-compose up -d
|
||||||
|
)
|
||||||
|
|
||||||
|
if [ $WAIT == 1 ]; then
|
||||||
|
echo "Waiting for RocketChat to be ready"
|
||||||
|
|
||||||
|
ATTEMPT_NUMBER=0
|
||||||
|
MAX_ATTEMPTS=60
|
||||||
|
while [ $ATTEMPT_NUMBER -lt $MAX_ATTEMPTS ]; do # https://stackoverflow.com/a/21189312/399007
|
||||||
|
ATTEMPT_NUMBER=$((ATTEMPT_NUMBER + 1 ))
|
||||||
|
echo "Checking if servers are ready (attempt $ATTEMPT_NUMBER of $MAX_ATTEMPTS)"
|
||||||
|
LOGS=$(docker logs rc_test_env_rocketchat_1 2> /dev/null)
|
||||||
|
if grep -q 'SERVER RUNNING' <<< $LOGS ; then
|
||||||
|
echo "RocketChat is ready!"
|
||||||
|
break
|
||||||
|
else
|
||||||
|
if [ $ATTEMPT_NUMBER == $MAX_ATTEMPTS ]; then
|
||||||
|
echo "RocketChat failed to start"
|
||||||
|
if [ $PAUSE_ON_FAIL_FOR_DEBUG == 1 ]; then
|
||||||
|
read -n 1 -s -r -p "Press any key to tear down infrastructure." && echo
|
||||||
|
fi
|
||||||
|
docker-compose down --volumes
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
sleep 4
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$COMMAND" == "stop" ]; then
|
||||||
|
(
|
||||||
|
cd "$COMPOSEPATH"
|
||||||
|
docker-compose down --volumes
|
||||||
|
)
|
||||||
|
fi
|
|
@ -0,0 +1,11 @@
|
||||||
|
rs.initiate({
|
||||||
|
_id: 'rs0',
|
||||||
|
members: [ { _id: 0, host: 'localhost:27017' } ]})
|
||||||
|
|
||||||
|
var masterness = db.isMaster().ismaster
|
||||||
|
print("MongoDB Master initial state: " + masterness)
|
||||||
|
while(db.isMaster().ismaster==false) {
|
||||||
|
print("Waiting for MongoDB election")
|
||||||
|
sleep(1000)
|
||||||
|
}
|
||||||
|
print("Election complete! Ready for data imports.")
|
|
@ -0,0 +1 @@
|
||||||
|
db.getCollection("migrations").insert({"_id":"control","locked":false,"version":NumberInt(188),"buildAt":"2020-05-11T19:06:54.422Z","lockedAt":new Date(1591734393789)});
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1 @@
|
||||||
|
db.getCollection("rocketchat_avatars.files").insert({"_id":"MKBNfes8gxMXWJ92Q","length":NumberInt(15150),"chunkSize":NumberInt(261120),"uploadDate":new Date(1584022383269),"filename":"MKBNfes8gxMXWJ92Q","md5":"c9b8c0bcfb357aad6776c79e01cfe337","contentType":"image/png"});
|
|
@ -0,0 +1 @@
|
||||||
|
db.getCollection("rocketchat_avatars").insert({"_id":"MKBNfes8gxMXWJ92Q","userId":"rocket.cat","type":"image/png","size":NumberInt(15150),"store":"GridFS:Avatars","_updatedAt":new Date(1584022383071),"instanceId":"DazcJz4ePrpaT9fhB","name":"rocket.cat","complete":true,"etag":"epCf7uvbjuLqxn5ug","path":"/ufs/GridFS:Avatars/MKBNfes8gxMXWJ92Q/undefined","progress":NumberInt(1),"token":"b8AB381B99","uploadedAt":new Date(1584022383291),"uploading":false,"url":"http://localhost:3000/ufs/GridFS:Avatars/MKBNfes8gxMXWJ92Q/undefined"});
|
|
@ -0,0 +1 @@
|
||||||
|
db.getCollection("rocketchat_custom_user_status").insert({"_id":"y7RDq6exjSuqdxvgT","name":"Pensive","statusType":"busy","_updatedAt":new Date(1589466480022)});
|
|
@ -0,0 +1,2 @@
|
||||||
|
db.getCollection("rocketchat_federation_keys").insert({"_id":"HR8NWWXvRYsNCuAj2","type":"private","key":"-----BEGIN PRIVATE KEY-----MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC9Ke0tvSqzbs+UlI/tFdME1SS5J30oYQB6vKZYiC7Wjbfg5dOnMB+l3kKwAtKHQw2nfZynNgnVzuksyvn+c7mw6Wnd+HM9EUYIhtBMsaonBDL0seMgo1dX2qGq2DyU46QhBmnT1NJTze966leYQK2csUoxsW3/A+kqVse1vaGtTD9e76rqhlICXBfYMkHfWWwfWjwq1yvk7AJ1p622ukTaJkQruCDn84sMQZB+rHEfD/e6Ggdr/+6BPhMNbN17jrvW1lolG4lNrNXBGH85Pn74ao79XWTPpgn75KV1ClBkSbdq/kn+rolKX5NLjg7LRwRBIlj7rqBEh+VzGsURu6IxAgMBAAECggEAUyuvA9BLiQ8sp8hWK8jPui0480vAhNN5kX2GqiBeb6lp8rE6SSUolRZPPfJPvHcn9r+M9BwXYPGTpkUse8tIFtfZ22XUzUHeB/u2dDIdfQAko1/fXEdVLOSM9oASyuf4DykxuJi3TW+bXvDQSLoPW3i8BXNcyKZgi2QSdP8Gqhm9KrUjMays9DlU7Wna8RonVz5YP4MRhDalbGT4vX17rxTDCaN/dKHsCPRZbfBzvR4QJ6sxMhMefzH7qPiBY+p2lFt4Wr/JtZiOzbRqHi2QMoTmEjSwmIeU9ClQECUq3JJSPM7FH+1Yy+9iCQGTG4VAiwFAShjRJQG7dlGPNpdcwQKBgQDtErmAZIS12KPBfC7tIZ3QUi6ed6jSL4yCd7+8iL4Awbd8b98Z0XZPh2Nl55dR6RGhDBDen8fXKaoTA+aosuzt40KrXqXMAxEBI8Uu6BijpWdvtyhdUjLCGspQQCkZcI2TAO0DFzYwZl1Nk38ep8JF+s2vHdq92oltY1WBOv0V6QKBgQDMRAkNfcodAyakmvpK5dOgsXIE+MuaAqEPZrXMUtgfju+Z18+HkiVX7FARbWhRJzY8Zw5riK/hqR0V6SF5JPVmp9+nk7h7mQles0bJ23hDiTJK13wWXD+NZF2O3IGFr83ixHJvlDqxYmCEUGQwvocmfB4setaZ0oJzDOjeTuPVCQKBgQDkbXVV1ATXXs2ygeCJVinEb1tCD5QYKf6eO5oApFVHT2BnwzdZniz8RjytFPAF2afF4GVkzNn2ZMveFJUsmXKXaLF1g/YG1DGPQpMdNj9/dsFqsDVxbeFAjCXCG4A+ZefT7EFzB+uLySY/uE31ELmtShLjl8WLx0VBpEPgCCGR+QKBgQCcA7sGWvVsg2OYheZ2HmQtcFquAXlBAJETuldQ4FXChOHslzEjUzTCmvPs26u5kEGUkQIqkBQGP6y/d3jhlqD472+cBu/5N0I42qVOuBp7Oub20u8sBPllfSsYWsNy4HxYn8LoBkduBL3DUcO0l1GSy2ogfxI6GtcYGNwkMA1EQQKBgH515MrbH+CQQarDtc21V7fCXtq95RO10dUt5dXIV0XYaOUkun3JQ4MQ3n0cprZe1DX/pSoMR3sb7jMt8LGMl71TxNWSubIEpYvXxHxPfPX2ZZ2Epxd+yOd3qLCoTrN3f2t0Xb9g3RiYESM5D/XT6ahFZDeTl/vhK4w0dgrjOMPR-----END PRIVATE KEY-----","_updatedAt":new Date(1584022372590)});
|
||||||
|
db.getCollection("rocketchat_federation_keys").insert({"_id":"Kbs7RovpL87fynDH3","type":"public","key":"-----BEGIN PUBLIC KEY-----MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvSntLb0qs27PlJSP7RXTBNUkuSd9KGEAerymWIgu1o234OXTpzAfpd5CsALSh0MNp32cpzYJ1c7pLMr5/nO5sOlp3fhzPRFGCIbQTLGqJwQy9LHjIKNXV9qhqtg8lOOkIQZp09TSU83veupXmECtnLFKMbFt/wPpKlbHtb2hrUw/Xu+q6oZSAlwX2DJB31lsH1o8Ktcr5OwCdaettrpE2iZEK7gg5/OLDEGQfqxxHw/3uhoHa//ugT4TDWzde4671tZaJRuJTazVwRh/OT5++GqO/V1kz6YJ++SldQpQZEm3av5J/q6JSl+TS44Oy0cEQSJY+66gRIflcxrFEbuiMQIDAQAB-----END PUBLIC KEY-----","_updatedAt":new Date(1584022372598)});
|
|
@ -0,0 +1,7 @@
|
||||||
|
db.getCollection("rocketchat_livechat_office_hour").insert({"_id":"25cEkE4HYJepqYdSQ","day":"Saturday","start":"08:00","finish":"20:00","code":NumberInt(6),"open":false,"_updatedAt":new Date(1584022357707)});
|
||||||
|
db.getCollection("rocketchat_livechat_office_hour").insert({"_id":"CQAfqmpYCv6WC7MTQ","day":"Tuesday","start":"08:00","finish":"20:00","code":NumberInt(2),"open":true,"_updatedAt":new Date(1584022357689)});
|
||||||
|
db.getCollection("rocketchat_livechat_office_hour").insert({"_id":"GBNmEQYQGDEX9tQ4j","day":"Sunday","start":"08:00","finish":"20:00","code":NumberInt(0),"open":false,"_updatedAt":new Date(1584022357710)});
|
||||||
|
db.getCollection("rocketchat_livechat_office_hour").insert({"_id":"TYvTiTSorTPKiH8mF","day":"Wednesday","start":"08:00","finish":"20:00","code":NumberInt(3),"open":true,"_updatedAt":new Date(1584022357697)});
|
||||||
|
db.getCollection("rocketchat_livechat_office_hour").insert({"_id":"WeLuoHz3Kz8figd9M","day":"Thursday","start":"08:00","finish":"20:00","code":NumberInt(4),"open":true,"_updatedAt":new Date(1584022357698)});
|
||||||
|
db.getCollection("rocketchat_livechat_office_hour").insert({"_id":"e9t67H2WnZvpiSJQd","day":"Monday","start":"08:00","finish":"20:00","code":NumberInt(1),"open":true,"_updatedAt":new Date(1584022357676)});
|
||||||
|
db.getCollection("rocketchat_livechat_office_hour").insert({"_id":"rzLMR3aBY3oyBexHf","day":"Friday","start":"08:00","finish":"20:00","code":NumberInt(5),"open":true,"_updatedAt":new Date(1584022357702)});
|
|
@ -0,0 +1,336 @@
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"25g4bk7cQTqeyW9xX","alias":"","msg":"269","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:44.857Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:44.877Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"269"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"27T4qRvruK3gEjecs","alias":"","msg":"65","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:26.854Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:26.877Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"65"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"28TThiTu5Zg8wQY9v","alias":"","msg":"140","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:56.012Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:56.077Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"140"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"2DgDaqyxjmY4svGae","alias":"","msg":"6","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:06.180Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:06.216Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"6"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"2SFwgauKjRMRR7xAw","alias":"","msg":"69","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:28.291Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:28.313Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"69"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"3G7XJ6EEy3vQdBQeh","alias":"","msg":"14","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:09.074Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:09.095Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"14"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"3T5juo5b4Co7uApwW","alias":"","msg":"277","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:47.697Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:47.749Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"277"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"3bMfuSmJ3iunG2kWG","alias":"","msg":"156","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:02.432Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:02.450Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"156"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"4AcYis8t69TC9hxJp","alias":"","msg":"7","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:06.556Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:06.581Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"7"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"4FiDijAfM3ANmQrkz","alias":"","msg":"141","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:56.415Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:56.436Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"141"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"4S9c9YvEogNtfNH4c","alias":"","msg":"119","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:46.073Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:46.091Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"119"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"4SzoQmu5hrY4a3M33","alias":"","msg":"252","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:38.832Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:38.859Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"252"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"4fmsF37sxqF3LaKg8","alias":"","msg":"158","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:03.277Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:03.310Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"158"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"4jZn8QgT2zggqpbtK","alias":"","msg":"230","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:30.893Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:30.929Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"230"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"4mGv8Pz8o4CDdN2oC","alias":"","msg":"264","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:43.105Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:43.131Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"264"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"5JuWjrs4ZgYa3CXxk","alias":"","msg":"49","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:21.227Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:21.244Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"49"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"5W9TAvaKJQfoFnftA","alias":"","msg":"37","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:17.145Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:17.159Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"37"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"5bqiprtBR4RAxWAcL","alias":"","msg":"43","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:19.185Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:19.198Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"43"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"5nCCCn7KHyca899Lj","rid":"5iyMRT843rNn4wwHv","tmid":"NAXDFHoxA44rsyujh","msg":"23","ts":new Date("2021-06-14T21:27:07.177Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:27:07.273Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"23"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"6HicGvqNRy6dsDehP","alias":"","msg":"240","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:34.481Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:34.519Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"240"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"6oNMwTjCXmcXTWeLj","alias":"","msg":"279","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:48.701Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:48.797Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"279"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"6tHmYHoJAZqKSP7uw","alias":"","msg":"176","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:10.472Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:10.490Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"176"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"7QNXvEFxMPLDtemuA","alias":"","msg":"223","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:28.287Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:28.311Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"223"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"7f3WTwk9pZkbjDrZG","alias":"","msg":"52","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:22.277Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:22.290Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"52"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"7gkmpM68YanWe3JP2","alias":"","msg":"287","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:51.637Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:51.660Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"287"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"7mSpBnb8Bdt2aZoWL","rid":"5iyMRT843rNn4wwHv","tmid":"NAXDFHoxA44rsyujh","msg":"19","ts":new Date("2021-06-14T21:27:02.653Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:27:02.754Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"19"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"7r8wpE8yzyiZEgpcw","alias":"","msg":"28","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:14.018Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:14.042Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"28"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"8KnWQxmRM5NGYt97J","alias":"","msg":"33","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:15.789Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:15.808Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"33"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"8vPWvDmtXEzEFwg4d","alias":"","msg":"96","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:37.960Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:37.980Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"96"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"9DR7WEyTEAR6ExK4n","alias":"","msg":"19","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:10.849Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:10.868Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"19"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"9FSFRTmi68FXt8xdT","alias":"","msg":"185","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:14.428Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:14.457Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"185"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"9Nc4sS2DozyAiH8is","alias":"","msg":"13","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:08.724Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:08.740Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"13"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"9R36G3Pe8yhFxWzar","alias":"","msg":"3","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:25:53.009Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:25:53.045Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"3"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"9S5QEDoXxXZbf9Fsw","rid":"5iyMRT843rNn4wwHv","tmid":"NAXDFHoxA44rsyujh","msg":"15","ts":new Date("2021-06-14T21:26:57.249Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:26:57.352Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"15"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"9TXDBQRA375tcDAJG","alias":"","msg":"108","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:42.213Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:42.225Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"108"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"9WvB32ZFdk7v7yrNb","alias":"","msg":"53","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:22.619Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:22.646Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"53"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"9x8puw8kLeqXxajNW","alias":"","msg":"293","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:53.759Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:53.787Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"293"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"9xfhY2uCdwbGALd49","alias":"","msg":"91","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:36.152Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:36.169Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"91"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"AmnEoreNR26FcXbnh","alias":"","msg":"130","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:51.034Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:51.171Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"130"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"ApW3E6fzGtuQLfvSX","alias":"","msg":"282","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:49.845Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:49.862Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"282"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"AqMwxaxRzT5neeEfe","alias":"","msg":"187","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:15.298Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:15.331Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"187"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"BE8zexooqkDwuKcu4","alias":"","msg":"56","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:23.666Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:23.691Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"56"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"BFMr3FJ9NNLP5wESf","rid":"5iyMRT843rNn4wwHv","tmid":"NAXDFHoxA44rsyujh","msg":"27","ts":new Date("2021-06-14T21:27:11.827Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:27:11.887Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"27"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"BXRu9xh39qwHnEXka","alias":"","msg":"94","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:37.229Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:37.275Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"94"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"Bs8ReZaE4SiwXH49J","alias":"","msg":"300","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:56.256Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:56.274Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"300"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"Bsb2nDT8oPwFvj9gN","alias":"","msg":"217","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:26.154Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:26.179Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"217"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"BvrzmaZKFccyhkrf3","alias":"","msg":"296","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:54.842Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:54.879Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"296"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"C89pRcerYNnApXwKZ","rid":"GFR2xxircSsyJxx9F","msg":"http://localhost:3000/group/jumping-thread?msg=rMbGKvG834q8EeNGs Go to a thread from another room","ts":new Date("2021-06-14T21:28:09.973Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:28:10.019Z"),"attachments":[{"text":"Go to jumping-thread's thread","author_name":"admin","author_icon":"/avatar/admin","message_link":"http://localhost:3000/group/jumping-thread?msg=rMbGKvG834q8EeNGs","attachments":[],"ts":new Date("2021-06-14T21:26:48.151Z")}],"urls":[{"url":"http://localhost:3000/group/jumping-thread?msg=rMbGKvG834q8EeNGs","ignoreParse":true}],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"LINK","value":{"src":{"type":"PLAIN_TEXT","value":"http://localhost:3000/group/jumping-thread?msg=rMbGKvG834q8EeNGs"},"label":{"type":"PLAIN_TEXT","value":"http://localhost:3000/group/jumping-thread?msg=rMbGKvG834q8EeNGs"}}},{"type":"PLAIN_TEXT","value":" Go to a thread from another room"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"CRefYtg5f6n2oZhJx","alias":"","msg":"274","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:46.586Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:46.637Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"274"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"CpMDo5fbb9Np54Xr7","rid":"5iyMRT843rNn4wwHv","tmid":"NAXDFHoxA44rsyujh","msg":"30","ts":new Date("2021-06-14T21:27:14.710Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:27:14.781Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"30"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"CwHLm3reBwwttySP4","alias":"","msg":"117","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:45.367Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:45.387Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"117"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"D7kQQ9vtmq7LfJdFk","rid":"5iyMRT843rNn4wwHv","tmid":"NAXDFHoxA44rsyujh","msg":"18","ts":new Date("2021-06-14T21:27:01.154Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:27:01.218Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"18"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"DR2ZakcJvyi3BTJLR","alias":"","msg":"54","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:22.975Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:22.992Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"54"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"DRAftv7fhYwBSF98P","alias":"","msg":"24","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:12.620Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:12.640Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"24"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"DuShMW4P9kiXnzMr4","alias":"","msg":"239","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:34.091Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:34.112Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"239"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"DvKX5qbzg8CWE3oNC","alias":"","msg":"1","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:24:50.182Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:24:50.225Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"1"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"DyAyQRLtPHqKwRYZb","alias":"","msg":"235","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:32.703Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:32.719Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"235"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"E5ntzuwrjmcGiyQFd","alias":"","msg":"299","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:55.903Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:55.925Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"299"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"EamwALjFX46fhnDC6","alias":"","msg":"268","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:44.506Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:44.520Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"268"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"EiMDrXBS86EqZGZhs","alias":"","msg":"234","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:32.356Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:32.376Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"234"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"EvEcMv66r75xb8FjX","alias":"","msg":"266","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:43.803Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:43.823Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"266"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"FAzwPcfoLftoNXBLQ","alias":"","msg":"257","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:40.641Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:40.661Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"257"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"FHdJd7cStGBRp6cRv","alias":"","msg":"215","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:25.459Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:25.478Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"215"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"FKR35Rpc8zFnMAmSg","alias":"","msg":"160","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:04.127Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:04.167Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"160"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"FKT9KKE4u8gW2jpSL","alias":"","msg":"281","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:49.486Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:49.509Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"281"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"FLtBpqa6bPBqSYPMA","alias":"","msg":"100","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:39.373Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:39.392Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"100"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"FcTYu6fzMbb28M75G","rid":"5iyMRT843rNn4wwHv","tmid":"NAXDFHoxA44rsyujh","msg":"24","ts":new Date("2021-06-14T21:27:08.255Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:27:08.360Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"24"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"FhcwPfvAtFQ5D8MYQ","alias":"","msg":"22","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:11.904Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:11.922Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"22"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"G7zgSoyJuWhax8P3x","alias":"","msg":"95","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:37.608Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:37.628Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"95"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"GBzrEAwBbEPPXD3M9","alias":"","msg":"74","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:30.074Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:30.091Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"74"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"GEWmTKitDazAuaz6h","alias":"","msg":"86","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:34.353Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:34.369Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"86"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"GJ4jWiCxgcJMapHTY","alias":"","msg":"61","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:25.432Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:25.457Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"61"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"GKHJ9YE9P7CcpdzPZ","alias":"","msg":"213","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:24.750Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:24.766Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"213"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"GXBzQmJ8FcBoC3gtP","alias":"","msg":"137","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:54.514Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:54.776Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"137"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"GmEYWjr2Cxg59Cdy6","alias":"","msg":"275","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:46.972Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:46.993Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"275"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"GswMnTC73YmpAopoB","alias":"","msg":"165","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:06.067Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:06.088Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"165"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"H2Y7vC4CYLZHzrQCQ","alias":"","msg":"265","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:43.461Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:43.476Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"265"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"H2qrRsJ7B5iQb3nYa","alias":"","msg":"189","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:16.042Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:16.082Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"189"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"HEjouKohtxTSr4vYE","alias":"","msg":"232","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:31.648Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:31.668Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"232"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"HMe5BrNi5PYH4ydur","rid":"5iyMRT843rNn4wwHv","tmid":"NAXDFHoxA44rsyujh","msg":"11","ts":new Date("2021-06-14T21:26:54.204Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:26:54.376Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"11"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"HP2vqtXk7H2kgopxM","alias":"","msg":"237","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:33.393Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:33.408Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"237"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"HZDTBZWzTtZG2wPYj","alias":"","msg":"162","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:04.922Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:05.009Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"162"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"HkveojpNbg6rkWrqJ","alias":"","msg":"284","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:50.555Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:50.573Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"284"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"HnZLZeDDsgF858kRx","rid":"5iyMRT843rNn4wwHv","tmid":"NAXDFHoxA44rsyujh","msg":"9","ts":new Date("2021-06-14T21:26:52.386Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:26:52.531Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"9"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"Hyt6k5bYadfc9sKJW","alias":"","msg":"89","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:35.380Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:35.400Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"89"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"J49cDnpaGPvuzf5s6","alias":"","msg":"124","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:47.930Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:47.947Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"124"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"J5ae5apoN8LZFyXiW","alias":"","msg":"199","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:19.666Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:19.685Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"199"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"J8jTENXHvWn4DCgcq","alias":"","msg":"88","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:35.036Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:35.050Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"88"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"JTQ4hu7SXXW24gRG9","alias":"","msg":"283","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:50.193Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:50.223Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"283"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"JZsxce8XjmNihE7AY","alias":"","msg":"168","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:07.339Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:07.432Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"168"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"K3twE3RhK3bskvP88","alias":"","msg":"258","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:40.989Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:41.008Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"258"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"K5tSCpctfdcB3Po9S","alias":"","msg":"63","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:26.138Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:26.168Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"63"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"KAZ24unKt2SzLiTwn","alias":"","msg":"34","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:16.140Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:16.160Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"34"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"KCGD75Dzg9sneF3yo","alias":"","msg":"29","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:14.372Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:14.395Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"29"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"KH2djT7TBQfnZtXzf","rid":"5iyMRT843rNn4wwHv","msg":"thread 2","ts":new Date("2021-06-14T21:26:44.015Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:26:44.085Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"thread 2"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"KZzFpygiB2sWXp7hd","alias":"","msg":"188","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:15.676Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:15.702Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"188"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"KuqHjst7QmS4s8qYX","alias":"","msg":"15","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:09.425Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:09.445Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"15"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"L2S3YC4AfW4SQaybC","alias":"","msg":"196","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:18.574Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:18.597Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"196"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"L4GFcEyoia8E9kkLb","alias":"","msg":"253","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:39.187Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:39.204Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"253"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"L8K2rLSpBbN3QQrXq","alias":"","msg":"38","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:17.484Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:17.498Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"38"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"LH6qPBWWfhotNdvW6","alias":"","msg":"194","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:17.860Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:17.886Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"194"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"LJudSHZjgvj3PYwPW","alias":"","msg":"229","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:30.535Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:30.556Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"229"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"LLQXCB4WnyHNwJRK4","alias":"","msg":"145","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:58.133Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:58.159Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"145"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"LLiby3sDRkQNKjG5w","alias":"","msg":"198","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:19.306Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:19.332Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"198"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"LQKgYipeHNG9wERPP","alias":"","msg":"2","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:25:52.639Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:25:52.672Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"2"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"Lnpro7sThoN89jGbo","alias":"","msg":"8","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:06.915Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:06.936Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"8"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"LwAqBPzLDJmaRnSmr","alias":"","msg":"139","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:55.592Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:55.656Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"139"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"M6xT2Lxh7tFvARmRS","alias":"","msg":"236","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:33.048Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:33.064Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"236"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"MMYNkEdFcb42hwrob","alias":"","msg":"102","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:40.065Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:40.081Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"102"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"MbgeBDDrSfztwgFT3","rid":"5iyMRT843rNn4wwHv","tmid":"NAXDFHoxA44rsyujh","msg":"10","ts":new Date("2021-06-14T21:26:53.404Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:26:53.517Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"10"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"Mg4dY3XbRuokCL4mA","alias":"","msg":"111","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:43.254Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:43.282Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"111"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"Mmxr3AgSkc9ZeCqfc","alias":"","msg":"180","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:12.402Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:12.438Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"180"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"MzTnyD7bHLQpDaDkt","alias":"","msg":"90","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:35.784Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:35.818Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"90"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"N6ADgwTr3cAkfAYr6","alias":"","msg":"173","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:09.323Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:09.397Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"173"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"NAXDFHoxA44rsyujh","rid":"5iyMRT843rNn4wwHv","msg":"thread 1","ts":new Date("2021-06-14T21:26:41.349Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:27:14.845Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"thread 1"}]}],"replies":["nM6vXyDLGGzSPsLNy"],"tcount":30,"tlm":new Date("2021-06-14T21:27:14.710Z")});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"NopPvF5ocTcK9YWyY","alias":"","msg":"97","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:38.310Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:38.334Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"97"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"NqRvSpT6vWpaMyenq","alias":"","msg":"276","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:47.330Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:47.347Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"276"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"PAz8BppytThsiyaSv","alias":"","msg":"116","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:45.010Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:45.034Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"116"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"Pi8mzMSsneD9Bku9d","alias":"","msg":"218","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:26.512Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:26.535Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"218"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"Px7brmeNGnYiDZN48","alias":"","msg":"167","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:06.866Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:06.899Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"167"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"Q9JZLA5uaiwvknQFL","alias":"","msg":"151","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:00.560Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:00.584Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"151"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"Q9LHyGvCWj8TT26jj","alias":"","msg":"193","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:17.502Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:17.528Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"193"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"Q9NgS9QRojajftfj6","alias":"","msg":"120","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:46.422Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:46.442Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"120"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"QEp4mdsvN7tATTTif","alias":"","msg":"105","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:41.105Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:41.123Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"105"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"QZncZeyQk4ach7TyF","alias":"","msg":"55","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:23.324Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:23.339Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"55"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"R7iDtoqMcP8iH9AZi","rid":"5iyMRT843rNn4wwHv","msg":"http://localhost:3000/group/jumping-thread?msg=wXb2eMCF5em722dSG Go to quoted","ts":new Date("2021-06-14T21:27:34.440Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:27:34.517Z"),"attachments":[{"text":"quoted","author_name":"admin","author_icon":"/avatar/admin","message_link":"http://localhost:3000/group/jumping-thread?msg=wXb2eMCF5em722dSG","attachments":[],"ts":new Date("2021-06-14T21:26:48.151Z")}],"urls":[{"url":"http://localhost:3000/group/jumping-thread?msg=5iyMRT843rNn4wwHv","ignoreParse":true}],"mentions":[],"channels":[]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"REFdN433cQ4knn4hY","alias":"","msg":"99","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:39.014Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:39.034Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"99"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"RKHTvjSKiGAPRRZfc","alias":"","msg":"251","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:38.455Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:38.495Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"251"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"RSEww3hBWuHhCkeeR","alias":"","msg":"211","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:24.027Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:24.064Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"211"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"RSJ2S4QoYYKTqcebb","alias":"","msg":"79","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:31.818Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:31.846Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"79"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"RWqSS9eFRtsW8kAxv","alias":"","msg":"260","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:41.693Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:41.717Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"260"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"RZ9tvpoxLm4chpayJ","alias":"","msg":"51","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:21.922Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:21.944Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"51"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"RcBwAoQHPodNp5urE","alias":"","msg":"16","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:09.778Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:09.797Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"16"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"Rj5xni8Hj9RazWE3L","alias":"","msg":"87","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:34.695Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:34.711Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"87"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"S7KPMtHTniMLbnMRw","alias":"","msg":"220","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:27.214Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:27.239Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"220"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"S7pzSFnpoEi5Fc52S","alias":"","msg":"195","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:18.218Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:18.244Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"195"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"S8ZtZfXYdgHnbGDeh","alias":"","msg":"132","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:52.135Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:52.224Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"132"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"SAn6je34GPkDiyNEh","alias":"","msg":"221","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:27.574Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:27.601Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"221"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"SLEJ4mvSD3xh7Gaby","alias":"","msg":"224","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:28.711Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:28.736Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"224"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"SQM5sg8wKFyuiFp6N","rid":"5iyMRT843rNn4wwHv","tmid":"NAXDFHoxA44rsyujh","msg":"16","ts":new Date("2021-06-14T21:26:58.848Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:26:58.998Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"16"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"SXzXF6bN4g3soN7nv","alias":"","msg":"183","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:13.641Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:13.663Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"183"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"ScCeKQunf9XP85PvK","alias":"","msg":"226","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:29.429Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:29.453Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"226"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"Sh8HLTpuRhE9bxd6w","alias":"","msg":"127","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:49.417Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:49.526Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"127"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"Sj74bsHaXr7RKdf3g","alias":"","msg":"206","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:22.236Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:22.259Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"206"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"SpDjvPCCuhDKwqRjb","alias":"","msg":"186","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:14.868Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:14.949Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"186"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"TChAZirf4q3ZwgsAp","alias":"","msg":"84","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:33.613Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:33.665Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"84"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"TFA29pKXYWkNYPfF3","alias":"","msg":"177","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:10.883Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:11.172Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"177"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"TPyLu2TTXuLBM4Kmc","alias":"","msg":"154","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:01.709Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:01.728Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"154"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"TXcETF7ftNrki3ALu","alias":"","msg":"201","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:20.446Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:20.478Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"201"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"W2gRc5ajwmYrYYiBq","alias":"","msg":"290","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:52.687Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:52.715Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"290"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"W5wrodggp3Hwe2urC","alias":"","msg":"164","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:05.709Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:05.729Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"164"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"W6JAFqquRcwbTZqBS","alias":"","msg":"228","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:30.167Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:30.196Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"228"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"WDZP2fFGfQNB9pLBt","alias":"","msg":"171","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:08.525Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:08.585Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"171"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"WNjmDuKBtvdTk2sPo","alias":"","msg":"126","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:48.839Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:48.992Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"126"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"WW3jiRvwAZiAvFa8a","alias":"","msg":"64","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:26.499Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:26.518Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"64"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"WgjPSsi6ZJhgGZ9Yy","alias":"","msg":"294","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:54.118Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:54.138Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"294"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"Wu6Q4rKfhqWgxqTwe","alias":"","msg":"85","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:34.009Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:34.028Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"85"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"X3d6dRXShATdWTAZQ","alias":"","msg":"216","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:25.808Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:25.826Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"216"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"X49ws5jXcMpaq7ywA","alias":"","msg":"238","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:33.738Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:33.759Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"238"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"XF32syPxCRi36aejC","alias":"","msg":"125","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:48.340Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:48.433Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"125"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"Xvkhsa6ysfMZkehLF","alias":"","msg":"248","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:37.356Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:37.374Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"248"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"Y8XHkq3WpexeY7Brw","alias":"","msg":"77","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:31.125Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:31.144Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"77"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"YEn2SpZ6QgeGjurvd","alias":"","msg":"208","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:22.955Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:22.973Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"208"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"YGkkNtQbXe9JbwnXn","alias":"","msg":"110","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:42.894Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:42.921Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"110"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"Ymg9aMZH5u8cPQdye","alias":"","msg":"138","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:55.162Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:55.238Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"138"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"YuHwpNgMRje5MsQJG","alias":"","msg":"47","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:20.543Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:20.557Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"47"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"Z7fqoZYFgA7TnNomA","alias":"","msg":"179","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:11.977Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:12.063Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"179"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"Z9E3BZWejTKiSvaKE","alias":"","msg":"107","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:41.868Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:41.886Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"107"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"ZFuEA3XmwGu3PAzv9","alias":"","msg":"20","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:11.198Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:11.217Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"20"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"ZHpwo4dzEjJS4sSmG","alias":"","msg":"25","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:12.970Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:12.988Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"25"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"ZJQe834wHqGsHqoYL","alias":"","msg":"209","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:23.306Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:23.327Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"209"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"ZKSaW8vspoojf6bM2","alias":"","msg":"181","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:12.827Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:12.896Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"181"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"ZP8duwLKiLaGaaW5J","alias":"","msg":"60","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:25.068Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:25.095Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"60"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"Zaoa684RSi7Rs7Rid","alias":"","msg":"192","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:17.144Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:17.170Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"192"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"ZgGv86jmZ2zFT2bHE","alias":"","msg":"76","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:30.767Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:30.799Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"76"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"ZgWXaPAjiYxNzCyYC","alias":"","msg":"203","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:21.193Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:21.209Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"203"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"Zhq9AmbzgGFiWJDyd","alias":"","msg":"256","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:40.251Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:40.302Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"256"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"Zpscdpv4Mf99uczkH","alias":"","msg":"66","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:27.214Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:27.238Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"66"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"ZsRjyeDqxgQSXsb5G","alias":"","msg":"159","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:03.702Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:03.778Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"159"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"ZzTWmQnPiHLCArw7s","alias":"","msg":"26","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:13.315Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:13.336Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"26"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"a82cWhkFEeCXEMxmP","alias":"","msg":"35","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:16.466Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:16.481Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"35"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"aFMhY68mGFMPD5eHM","alias":"","msg":"135","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:53.554Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:53.698Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"135"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"aqXfs7SvG4knixCE3","alias":"","msg":"259","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:41.335Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:41.353Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"259"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"asNxLidHfTi7E3rri","rid":"GFR2xxircSsyJxx9F","msg":"[ ](http://localhost:3000/group/jumping?msg=DvKX5qbzg8CWE3oNC) Quote first message","ts":new Date("2021-06-14T21:28:50.477Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:28:50.537Z"),"attachments":[{"text":"1","author_name":"admin","author_icon":"/avatar/admin","message_link":"http://localhost:3000/group/jumping?msg=DvKX5qbzg8CWE3oNC","attachments":[],"ts":new Date("2021-06-14T21:24:50.182Z")}],"urls":[{"url":"http://localhost:3000/group/jumping?msg=DvKX5qbzg8CWE3oNC","ignoreParse":true}],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"LINK","value":{"src":{"type":"PLAIN_TEXT","value":"http://localhost:3000/group/jumping?msg=DvKX5qbzg8CWE3oNC"},"label":{"type":"PLAIN_TEXT","value":" "}}},{"type":"PLAIN_TEXT","value":" Quote first message"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"axvp8s25ARwDpfzmh","alias":"","msg":"136","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:54.051Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:54.108Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"136"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"b4mfvGcu54E5fZcFT","alias":"","msg":"175","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:10.090Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:10.139Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"175"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"b5E537jXp9K4oN4Wi","alias":"","msg":"246","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:36.635Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:36.664Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"246"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"bKGeCjGTDGxqEZ6hm","alias":"","msg":"161","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:04.498Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:04.522Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"161"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"bQvAAAGyDWfFF6Y7A","alias":"","msg":"163","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:05.358Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:05.380Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"163"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"bTNtxyTgianagFSNx","alias":"","msg":"112","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:43.614Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:43.632Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"112"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"bYJ54jdELZ3QdHHas","alias":"","msg":"244","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:35.923Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:35.944Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"244"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"baWZ2thegi7MzuqdG","alias":"","msg":"254","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:39.537Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:39.557Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"254"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"bjJtt5nXd9WNgyFfH","rid":"5iyMRT843rNn4wwHv","tmid":"NAXDFHoxA44rsyujh","msg":"21","ts":new Date("2021-06-14T21:27:04.747Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:27:04.852Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"21"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"bsefeQWb2q2TbtMw7","alias":"","msg":"242","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:35.213Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:35.231Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"242"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"btXJwZ48vySPKm53G","alias":"","msg":"40","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:18.166Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:18.181Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"40"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"c2iHGieZ8bpnt35rF","rid":"5iyMRT843rNn4wwHv","tmid":"NAXDFHoxA44rsyujh","msg":"28","ts":new Date("2021-06-14T21:27:12.665Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:27:12.718Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"28"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"c3pTEP9xYmiMRbPZ4","alias":"","msg":"249","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:37.704Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:37.738Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"249"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"cFFH3n7Rt2ycvJyuj","alias":"","msg":"270","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:45.206Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:45.223Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"270"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"cZw93Xs7hCywM22rw","alias":"","msg":"101","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:39.717Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:39.736Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"101"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"coBfxKdjuMdr6nAo9","alias":"","msg":"115","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:44.656Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:44.677Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"115"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"ctJwtBmsAragPidYK","alias":"","msg":"214","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:25.103Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:25.122Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"214"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"cu7CR5vzM7zhHcyxp","alias":"","msg":"155","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:02.072Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:02.101Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"155"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"czpi4xpGasv7qLEDG","rid":"5iyMRT843rNn4wwHv","tmid":"NAXDFHoxA44rsyujh","msg":"5","ts":new Date("2021-06-14T21:26:50.306Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:26:50.415Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"5"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"dA923aH8Pum3yaGFH","alias":"","msg":"170","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:08.150Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:08.174Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"170"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"dADdCiC86XSM6x3H5","alias":"","msg":"113","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:43.956Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:43.974Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"113"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"dJ4RcvX7WP8xBjh3x","alias":"","msg":"57","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:24.020Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:24.043Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"57"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"dcYJDKLis496fq37P","alias":"","msg":"30","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:14.728Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:14.748Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"30"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"dsNcCY6TFcR8DJdhh","alias":"","msg":"45","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:19.860Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:19.874Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"45"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"duF48GeHr6JXE627H","alias":"","msg":"121","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:46.816Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:46.900Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"121"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"eCXzwsPZN4aC9oasY","alias":"","msg":"142","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:56.815Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:56.895Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"142"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"ebRbDWuZ7HCgzAdnB","alias":"","msg":"288","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:51.990Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:52.012Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"288"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"etXetwZLWJ8quLbXY","alias":"","msg":"152","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:00.916Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:00.935Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"152"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"f2PJHaeQhN38ZWYPc","rid":"5iyMRT843rNn4wwHv","tmid":"NAXDFHoxA44rsyujh","msg":"20","ts":new Date("2021-06-14T21:27:03.534Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:27:03.605Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"20"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"f36eGwj5ZXT3FzXsQ","alias":"","msg":"122","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:47.241Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:47.260Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"122"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"f3QBqS3TRsfQknctT","rid":"5iyMRT843rNn4wwHv","tmid":"NAXDFHoxA44rsyujh","msg":"29","ts":new Date("2021-06-14T21:27:13.767Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:27:13.882Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"29"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"f5mHjp7PgC4oxKxWB","alias":"","msg":"233","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:31.997Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:32.023Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"233"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"fH5EArKGppbm5fu4H","alias":"","msg":"207","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:22.600Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:22.624Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"207"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"fWxDpwWjLtDiWaGNh","alias":"","msg":"298","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:55.560Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:55.576Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"298"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"fjw4BsPLrxN8wRw9P","alias":"","msg":"123","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:47.587Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:47.603Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"123"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"fmxCFF5urELfPt5o4","alias":"","msg":"210","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:23.661Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:23.687Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"210"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"fpgKLzsGpj6YwX6nj","alias":"","msg":"247","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:36.999Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:37.026Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"247"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"fsy2dZJgmmboowJ8N","t":"uj","rid":"GENERAL","ts":new Date("2020-03-12T14:16:48.462Z"),"msg":"admin","u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin"},"groupable":false,"_updatedAt":new Date("2020-03-12T14:16:48.462Z")});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"fuaaSP7JwX7tBoQKf","rid":"5iyMRT843rNn4wwHv","tmid":"NAXDFHoxA44rsyujh","msg":"22","ts":new Date("2021-06-14T21:27:06.201Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:27:06.309Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"22"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"fwdGhi3DjYRPCvK9a","alias":"","msg":"39","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:17.823Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:17.837Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"39"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"gMCRJXDfAz6iCz36n","alias":"","msg":"166","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:06.445Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:06.528Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"166"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"gSek3hYhat9HZgxZn","alias":"","msg":"263","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:42.744Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:42.769Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"263"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"gmNPD2NzrYTcL4vbi","alias":"","msg":"114","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:44.305Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:44.325Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"114"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"gqvXKFvaHviN6WT6d","alias":"","msg":"36","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:16.807Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:16.820Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"36"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"hADa3458ZBWoA2vis","alias":"","msg":"297","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:55.211Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:55.229Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"297"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"hWGecLQ9J3QmPb5tZ","alias":"","msg":"42","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:18.847Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:18.862Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"42"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"he7eJ5uQkavMG2pRw","alias":"","msg":"291","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:53.044Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:53.064Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"291"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"i5v8nqpENnELkuKKK","alias":"","msg":"98","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:38.669Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:38.686Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"98"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"iAHZaZtecC9DTPh5M","alias":"","msg":"118","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:45.719Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:45.741Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"118"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"iDhXx9AMwdGn6eA8g","alias":"","msg":"72","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:29.378Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:29.399Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"72"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"iEbZ89N6nn7BrNJjb","alias":"","msg":"143","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:57.291Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:57.428Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"143"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"iTD6csdpfXsBjw2Cm","alias":"","msg":"271","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:45.550Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:45.562Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"271"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"iXLFap36XtvBEFN5v","alias":"","msg":"10","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:07.627Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:07.651Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"10"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"ind3Datf2D7PaZzFZ","alias":"","msg":"73","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:29.726Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:29.745Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"73"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"iuBBQN8GYYnzreXGr","alias":"","msg":"289","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:52.341Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:52.356Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"289"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"ivZn9uDwQc5gQJM34","alias":"","msg":"93","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:36.852Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:36.882Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"93"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"j54HwbxYvXjRjMadK","alias":"","msg":"150","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:00.149Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:00.221Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"150"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"j9PSMJej8Wcpa4Ytx","alias":"","msg":"44","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:19.522Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:19.535Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"44"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"jLfKGGCYNK53XHSTL","alias":"","msg":"103","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:40.408Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:40.429Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"103"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"jPniEqszEwDwuaiuj","alias":"","msg":"21","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:11.551Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:11.571Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"21"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"jb9wEPkba3zpPEtmJ","alias":"","msg":"68","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:27.931Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:27.953Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"68"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"jvtiBQASkTzCAQbDR","alias":"","msg":"157","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:02.837Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:02.916Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"157"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"k4cpqEJdJswa9Gi5Y","alias":"","msg":"261","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:42.048Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:42.062Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"261"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"kDetPPBzhWn93cxRF","alias":"","msg":"225","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:29.069Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:29.093Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"225"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"kFSqxJp5KZvQ7D8aE","rid":"5iyMRT843rNn4wwHv","tmid":"NAXDFHoxA44rsyujh","msg":"26","ts":new Date("2021-06-14T21:27:10.751Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:27:11.061Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"26"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"kS8jZdggkfgsTsZG5","alias":"","msg":"174","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:09.739Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:09.758Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"174"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"m7tDWPnGNRnGCue75","alias":"","msg":"280","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:49.134Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:49.157Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"280"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"mf4JSThGWDcKcMHpg","alias":"","msg":"227","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:29.784Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:29.833Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"227"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"mkh7E9F6DsZ4Tcdup","alias":"","msg":"295","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:54.475Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:54.502Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"295"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"n26SaSKE9K5om8yLj","alias":"","msg":"50","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:21.571Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:21.590Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"50"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"nCRBdtauhxPqBtg4g","alias":"","msg":"272","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:45.899Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:45.920Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"272"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"nHzxrRo6tBHscDDje","alias":"","msg":"17","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:10.137Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:10.157Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"17"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"nL6KxYJnhqiAnf6pH","alias":"","msg":"144","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:57.777Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:57.798Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"144"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"o5a6HfkxwT56K4jPQ","alias":"","msg":"292","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:53.406Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:53.431Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"292"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"o7ASiN5h6rWf5R6Zn","alias":"","msg":"71","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:29.010Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:29.045Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"71"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"oBai683KWMkxTbrXm","alias":"","msg":"109","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:42.551Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:42.565Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"109"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"oP4SBAiREiHxsCKuJ","alias":"","msg":"11","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:07.981Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:08.003Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"11"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"oR4yJeKsiAdbi2J3o","alias":"","msg":"31","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:15.084Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:15.105Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"31"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"oRgEHMjJwkK3QMPH6","alias":"","msg":"285","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:50.910Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:50.932Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"285"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"oamqgrpKs75TAzRDn","alias":"","msg":"182","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:13.249Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:13.302Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"182"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"ooG2D2kA9XKEYfLxy","alias":"","msg":"184","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:14.009Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:14.085Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"184"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"owsKBceEBzCRenLf5","alias":"","msg":"128","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:49.939Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:50.099Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"128"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"pXkDBj6n8zs5QwgoP","alias":"","msg":"219","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:26.867Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:26.884Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"219"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"phg34vrw6zgeXNM4S","rid":"5iyMRT843rNn4wwHv","tmid":"NAXDFHoxA44rsyujh","msg":"14","ts":new Date("2021-06-14T21:26:56.534Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:26:56.629Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"14"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"pobCPg2DEvSthxSms","rid":"5iyMRT843rNn4wwHv","tmid":"NAXDFHoxA44rsyujh","msg":"17","ts":new Date("2021-06-14T21:26:59.957Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:27:00.029Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"17"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"pq95BBkovDfF9QXBz","alias":"","msg":"104","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:40.758Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:40.779Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"104"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"prLoRs2LovJ2ZwB69","alias":"","msg":"23","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:12.255Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:12.282Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"23"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"q9hHwTBcNAWHJTogx","alias":"","msg":"241","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:34.868Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:34.886Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"241"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"q9vSCngMpjFmJGYKD","rid":"5iyMRT843rNn4wwHv","tmid":"NAXDFHoxA44rsyujh","msg":"to be searched","ts":new Date("2021-06-14T21:26:48.735Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:26:48.875Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"2"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"qS4Rk23v3makbdfbH","alias":"","msg":"131","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:51.580Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:51.717Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"131"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"qX4SgeQLSAkYM96JS","alias":"","msg":"46","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:20.199Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:20.217Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"46"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"qx3fGuWDaYM2KTP7b","alias":"","msg":"18","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:10.488Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:10.514Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"18"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"r3otdRoyGLyWE3QXt","alias":"","msg":"106","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:41.477Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:41.537Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"106"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"rFyiPh4ieazJ5Xujx","alias":"","msg":"212","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:24.396Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:24.419Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"212"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"rMbGKvG834q8EeNGs","rid":"5iyMRT843rNn4wwHv","tshow":false,"tmid":"NAXDFHoxA44rsyujh","msg":"Go to jumping-thread\'s thread","ts":new Date("2021-06-14T21:26:48.151Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:26:48.219Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"1"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"rRnLnmDmiEuAdCCxc","alias":"","msg":"27","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:13.667Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:13.686Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"27"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"rYdDqTMqdZc6iDfkR","alias":"","msg":"146","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:58.496Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:58.512Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"146"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"rzhvoTuvciCYKuWaz","alias":"","msg":"149","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:59.761Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:59.791Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"149"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"s6uQ9PgRQTj8eHcXd","alias":"","msg":"32","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:15.434Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:15.458Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"32"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"sEFhTtHAnByAuhm9L","alias":"","msg":"250","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:38.081Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:38.113Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"250"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"sL2q79eQMszvrndN4","alias":"","msg":"169","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:07.775Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:07.810Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"169"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"sMNLLsoDjghCTvmwc","alias":"","msg":"273","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:46.242Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:46.269Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"273"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"sPoHne32K2pdrqhmY","alias":"","msg":"80","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:32.181Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:32.203Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"80"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"sQksqnBfdfuvvFTtZ","alias":"","msg":"204","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:21.538Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:21.555Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"204"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"sYp5F5WSFBWP6dy4L","alias":"","msg":"4","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:05.437Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:05.484Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"4"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"sarBNn8KXCDibD26Z","alias":"","msg":"133","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:52.631Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:52.716Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"133"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"seqFxn6iMnefCk4oL","alias":"","msg":"286","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:51.271Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:51.305Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"286"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"sjpPh6jnmQ9cT2XtA","alias":"","msg":"245","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:36.278Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:36.307Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"245"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"skTHqNq9QnaL6odE4","alias":"","msg":"62","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:25.787Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:25.808Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"62"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"syv4LYPK7pGwH6gMR","alias":"","msg":"205","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:21.886Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:21.905Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"205"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"tA26DWrEE44d2rrQF","alias":"","msg":"59","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:24.717Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:24.737Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"59"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"tLKnMvEAK7ELxqN9m","alias":"","msg":"190","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:16.420Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:16.423Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"190"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"tm9kzLG57tmTGuDga","alias":"","msg":"5","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:05.820Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:05.848Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"5"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"tpJ6jPcf8hTE6Y9my","alias":"","msg":"231","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:31.261Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:31.305Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"231"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"ttcshiSSJSknTmXhN","alias":"","msg":"255","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:39.886Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:39.905Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"255"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"txf4Dih43e23ezkm6","alias":"","msg":"200","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:20.035Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:20.095Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"200"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"tyxqHBNYJpBs2DreP","alias":"","msg":"172","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:08.927Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:08.946Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"172"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"u3BjoxuA4pzjPGzyS","alias":"","msg":"9","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:07.267Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:07.295Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"9"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"uHwBGqbXsLWuQ4CP3","alias":"","msg":"262","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:42.389Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:42.409Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"262"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"uNzeBDetJgn9wEaQ4","alias":"","msg":"191","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:16.773Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:16.808Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"191"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"uqJDykHAvpnBrGMNF","alias":"","msg":"243","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:35.562Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:35.582Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"243"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"utqDfyM45QuRLzK3o","alias":"","msg":"78","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:31.473Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:31.491Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"78"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"v5upv7DR4BHbCwBEX","alias":"","msg":"48","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:20.883Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:20.899Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"48"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"v7HSMTfRa68Suh8at","alias":"","msg":"153","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:01.296Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:01.364Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"153"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"vYYLKrHc8yDr9AZC7","alias":"","msg":"178","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:11.540Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:11.576Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"178"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"vn9Qp6fC5s2cEKt3a","alias":"","msg":"267","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:44.152Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:44.176Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"267"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"voqrApbpcnuGtkLMp","rid":"5iyMRT843rNn4wwHv","tmid":"NAXDFHoxA44rsyujh","msg":"7","ts":new Date("2021-06-14T21:26:51.398Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:26:51.520Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"7"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"vsYTFFAkiGKsWKPdz","rid":"5iyMRT843rNn4wwHv","tmid":"NAXDFHoxA44rsyujh","msg":"thread message sent to main room","tshow":true,"ts":new Date("2021-06-14T21:26:49.776Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:26:49.935Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"4"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"vvEjAvsntsAuuPTKF","alias":"","msg":"83","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:33.249Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:33.276Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"83"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"w6HMBqLX9eYHvmZzD","alias":"","msg":"70","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:28.656Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:28.679Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"70"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"w7hroywNx2tecwn2b","alias":"","msg":"129","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:50.523Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:50.618Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"129"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"wDgerDqxzMCmqSYKz","alias":"","msg":"58","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:24.376Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:24.390Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"58"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"wSYKDGziubGABmmNb","alias":"","msg":"82","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:32.885Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:32.917Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"82"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"wXScdaF6cs3tBLbvg","rid":"5iyMRT843rNn4wwHv","tmid":"NAXDFHoxA44rsyujh","msg":"6","ts":new Date("2021-06-14T21:26:50.887Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:26:50.998Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"6"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"wXb2eMCF5em722dSG","rid":"5iyMRT843rNn4wwHv","tmid":"NAXDFHoxA44rsyujh","msg":"quoted","ts":new Date("2021-06-14T21:26:49.220Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:26:49.341Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"quoted"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"wZ2FMa6d2zMFwZwjL","alias":"","msg":"12","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:08.336Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:08.359Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"12"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"wg5oydMJc8fp5wgoR","rid":"5iyMRT843rNn4wwHv","tmid":"NAXDFHoxA44rsyujh","msg":"8","ts":new Date("2021-06-14T21:26:51.875Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:26:52.025Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"8"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"wr9zgcFELuZGzo2Xe","alias":"","msg":"147","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:58.876Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:58.991Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"147"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"xXXexskd39XS4tfXE","rid":"5iyMRT843rNn4wwHv","tmid":"NAXDFHoxA44rsyujh","msg":"25","ts":new Date("2021-06-14T21:27:09.149Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:27:09.219Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"25"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"xhCSEvqZjmWP8XCzv","alias":"","msg":"41","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:18.504Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:18.518Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"41"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"y4XkigXMgv6ACLd9R","alias":"","msg":"92","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:36.500Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:36.519Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"92"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"y8QHZid5pNvXyg9fX","rid":"5iyMRT843rNn4wwHv","tmid":"NAXDFHoxA44rsyujh","msg":"13","ts":new Date("2021-06-14T21:26:55.736Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:26:55.823Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"13"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"yKoyhAhYETLv6kXdf","alias":"","msg":"81","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:32.531Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:32.554Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"81"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"ygZKFw8DnQFhjxEnn","alias":"","msg":"148","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:59.377Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:59.427Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"148"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"zApewG2ppDrjPqwHz","alias":"","msg":"278","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:48.137Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:48.298Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"278"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"zAvAphoMoaS4m5z2s","alias":"","msg":"134","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:53.078Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:53.151Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"134"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"zGMAPTHCPwt3jBCkm","alias":"","msg":"202","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:20.825Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:20.863Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"202"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"zPfgHYTQeskiL8Jp6","alias":"","msg":"222","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:27.932Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:27.952Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"222"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"zQu55sCe6sQaPwBHJ","alias":"","msg":"67","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:27.571Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:27.596Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"67"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"zSZSann7XBW5672HA","rid":"5iyMRT843rNn4wwHv","tmid":"NAXDFHoxA44rsyujh","msg":"12","ts":new Date("2021-06-14T21:26:54.930Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:26:55.046Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"12"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"zjeYZ7WrpmJWwkuqB","alias":"","msg":"75","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:30.421Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:30.439Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"75"}]}]});
|
||||||
|
db.getCollection("rocketchat_message").insert({"_id":"ztdbnfLLo6f6hnRMo","alias":"","msg":"197","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:18.946Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:18.970Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"197"}]}]});
|
|
@ -0,0 +1 @@
|
||||||
|
db.getCollection("rocketchat_oauth_apps").insert({"_id":"zapier","name":"Zapier","active":true,"clientId":"zapier","clientSecret":"RTK6TlndaCIolhQhZ7_KHIGOKj41RnlaOq_o-7JKwLr","redirectUri":"https://zapier.com/dashboard/auth/oauth/return/RocketChatDevAPI/","_createdAt":new Date(1584022375172),"_createdBy":{"_id":"system","username":"system"},"_updatedAt":new Date(1584022375172)});
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue