Merge 4.13.0 into master (#2728)
* [NEW] Action Sheet (#2114)
* [WIP] New Action Sheet
* [NEW] Header Indicator
* [IMPROVEMENT] Header Logic
* [NEW] Use EventEmitter to show ActionSheet for while
* [FIX] Animation
* [IMPROVEMENT] Use provider
* [FIX] Add callback
* [FIX] Message Actions
* [FIX] Add MessageActions icons
* [NEW] MessageErrorActions
* [IMPROVEMENT] OnClose
* [FIX] Adjust height
* [FIX] Close/Reopen
* [CHORE] Remove react-native-action-sheet
* [CHORE] Move ActionSheet
* [FIX] Reply Message
* [IMPROVEMENT] Hide ActionSheet logic
* [WIP] Custom MessageActions Header
* [IMPROVEMENT] MessageActions Header
* [IMPROVEMENT] Enable Scroll
* [FIX] Scroll on Android
* Move to react-native-scroll-bottom-sheet
* Stash
* Refactor actions
* Revert some changes
* Trying react-native-modalize
* Back to HOC
* ActionSheet style
* HOC Header
* Reaction actionSheet
* Fix messageBox actions
* Fix add reaction
* Change to flatListProps
* fix modalize android scroll
* Use react-native-scroll-bottom-sheet
* [NEW] BottomSheet dismissable & [FIX] Android not opening
* [NEW] Show emojis based on screen width
* [WIP] Adjust to content height
* [IMPROVEMENT] Responsible
* [IMPROVEMENT] Use alert instead actionSheet at NewServerView
* [FIX] Handle tablet cases
* [IMPROVEMENT] Remove actionSheet of RoomMembersView
* [IMPROVEMENT] Min snap distance when its portrait
* [CHORE] Remove unused Components
* [IMPROVEMENT] Remove duplicated add-reaction
* [IMPROVEMENT] Refactor Icon Package
* [IMPROVEMENT] Use new icons
* [FIX] Select message at MessageActions before getOptions
* [FIX] Custom header height
* [CHORE] Remove patch & [FIX] Tablet bottom sheet
* [FIX] Use ListItem height to BottomSheet Height
* Some fixes
* [FIX] Custom MessageActions header
* [FIX] Android height adjust
* [IMPROVEMENT] Item touchable & [FIX] Respect pin permission
* [IMPROVEMENT] More than one snap point
* some size fixes
* improve code
* hide horizontal scroll indicator
* [FIX] Focus MessageBox on edit message
* [FIX] Ripple color
* [IMPROVEMENT] Backdrop must keep same opacity after 50% of the screen
* [TEST] Change animation config
* [IMPROVEMENT] BackHandler should close the ActionSheet
* [CHORE] Add react-native-safe-area-context
* [FIX] Provide a bottom padding at notch devices
* [IMPROVEMENT] Improve backdrop input/output range
* [FIX] Weird Android Snap behavior
* [PATCH] React-native-scroll-bottom-sheet
* [CI] Re-run build
* [FIX] Landscape android
* [IMPROVEMENT] Cover 50% of the screen at the landscape mode
* [FIX] Adjust emoji content to width size
* [IMPROVEMENT] Use hooks library
* [IMPROVEMENT] Close the actionSheet when orientation change
* deactivate safe-area-context for while
* [REVERT] Re-add react-native-safe-area-context (3.0.2)
* [IMPROVEMENT] Use focused background
* [TESTS] E2E Tests updated to new BottomSheet
* [NEW] Add cancel button
* [FIX] Cancel button at android
* [IMPROVEMENT] Use cancelable bottom sheet at room members view
* [IMPROVEMENT] Use better function names
* [IMPROVEMENT] Use getItemLayout
* [FIX][TEMP] Animation
* Review
* Build
* Header keyExtractor
* Rename function
* Tweak animation
* Refactoring
* useTheme
* Refactoring
* TestIDs
* Refactor
* Remove old lib
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [NEW] Add fastlane to android module and configure CI (#2100)
* [IMPROVEMENT] Use react-native-notifier for in-app notifications (#2139)
Signed-off-by: Ezequiel De Oliveira <ezequiel1de1oliveira@gmail.com>
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [CHORE] Create DimensionsContext (#2098)
Signed-off-by: Ezequiel De Oliveira <ezequiel1de1oliveira@gmail.com>
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [FIX] Remove duplicated sCU condition (#2194)
* [FIX] The auto translate toggle don't save right state (#2142)
Signed-off-by: Ezequiel De Oliveira <ezequiel1de1oliveira@gmail.com>
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [CHORE] Increase "content_hash_max_items" on Watchman (#2181)
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [NEW] IFrame authentication (#2184)
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [NEW] Send multiple attachments (#2162)
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [NEW] Omnichannel Status Toggle (#2217)
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [FIX] Typing when UI_Use_Real_Name is enabled (#2216)
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [REGRESSION] Logout failing after #2217 (#2222)
* [CHORE] Add wrapper to make Meteor methods calls over REST (#2104)
* [WIP] Use rest instead methodCall
* [WIP] Some method calls using wrapper
* [WIP] Wrap all necessary methodCalls
* fix
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [IMPROVEMENT] Mark thread as read on open (#2225)
* [IMPROVEMENT] Mark a thread as read
* Use methodCallWrapper
* Check server version
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [FIX] Read receipt icon on action sheet (#2237)
* [FIX] Handle TypeErrors on navigationRef and draftMessage due to null properties (#2232)
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [FIX] Android crashing when restoring from background (#2238)
* [FIX] Send thread attachment (#2242)
* [FIX] Iframe auth Login Button (#2241)
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [REGRESSION] Audio Recording (#2240)
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [IMPROVEMENT] Expo-av audio recorder (#2195)
* [NEW] MessageBox: Expo-av audio recorder
* Refactor MessageBox to accommodate recording button even when recording
* Rename Recording.js -> RecordAudio.js as we could implement video recording in the future
* RecordAudio: Introduce cancel and send buttons
* RecordAudio: Introduce recorderBusy state, refactor MessageBox, remove useless SafeAreaView
* RecordAudio: Better audio quality 🎉, stop recording on unmount
* RecordAudio: Use FileSystem from expo-file-system instead of RNFetchBlob
* chore: flush out react-native-audio
* fix(MessageBox): bring back some missed styles during refactor
* refactor(RecordAudio): use class component
* refactor(RecordAudio): recorder busy to class property, styling changes
* recorder initialisation changes
* fix(RecordAudio): missing await in isRecordingPermissionGranted
* fix(RecordAudio): set isRecording = false on cancel/finish, refactor perms
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [IMPROVEMENT] Unified header UX (#2234)
* Change drawer icon
* Removed iOS variation
* Patch to react-navigation-header-buttons... easier to patch then to overwrite its behaviour :(
* Correctly position title
* Header subtitle
* Layout
* Alignment
* RoomView header
* Renamed RoomHeaderLeft to LeftButtons
* RoomView back button
* Search icon on RoomView
* Refactor
* Fix header on tablet
* Fix search messages close button on tablet
* Search key command
* Network status on RoomView header subtitle
* Update tests
* Scale content
* SearchBox cancel color
* Bump version to 4.9.0 (#2248)
* [FIX] Check for UI_Use_Real_Name when sorting rooms (#2230)
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [FIX] Emoji keyboard not showing custom and frequently used emojis on Share Extension (#2251)
* [FIX] Scroll to top crashing when ref is undefined (#2252)
* [FIX] Check if exists scroll ref
* Remove scrollTo
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [FIX] AttachmentView crashing during title decode (#2253)
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [FIX] Command previews crashing when API returns an error (#2254)
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [FIX] ThreadMessagesView throwing error when subscription wasn't found (#2255)
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [FIX] Register crashing when error data is undefined (#2256)
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [FIX] Get active route returning undefined (#2257)
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [FIX] ImageViewer not recognising gestures after zoomed (#2261)
* [FIX] Zoomed in images must react to gestures
* AnimatedFastImage -> AnimatedImage
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [FIX] Android stack animation throwing illegal node ID (#2260)
* [FIX] Navigation object undefined when tapping sidebar's user header on tablet (#2259)
* [FIX] Action sheet cutting emojis on the header (#2263)
* [FIX] Action sheet cutting emojis on the header
* fix tablet case
Co-authored-by: Djorkaeff Alexandre <djorkaeff.unb@gmail.com>
* [FIX] Mime type check crashing the app (#2264)
* [FIX] Notification preferences update crashing the app (#2262)
* [FIX] Create discussion not working from MessageActions (#2265)
* [FIX] getSettings not catching errors (#2271)
* [REGRESSION] Jitsi Call doesn't send message link (#2277)
* [FIX] Messages hidden behind MessageBox (#2281)
* fix: package.json & yarn.lock to reduce vulnerabilities (#2275)
The following vulnerabilities are fixed with an upgrade:
- https://snyk.io/vuln/SNYK-JS-JPEGJS-570039
- https://snyk.io/vuln/SNYK-JS-LODASH-567746
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [i18n] Add missing german strings (#2278)
* cleaned mixed usage of "du" and "Sie"
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [CHORE] CircleCI Upgrades (#2269)
* Upgrade nvm
* Upgrade XCode
* Use nvm's default installed version of node (LTS)
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [NEW] Sign in with Apple (#2282)
* Add expo-apple-authentication
* Button
* Create new provisioning profiles
* Login with Apple
* Change provisioning profile
* Button color based on theme
Co-authored-by: Djorkaeff Alexandre <djorkaeff.unb@gmail.com>
* [FIX] MessageBox not being shown on ShareView when Preview is a video (#2283)
* Wrap video preview with ScrollView so Messagebox is shown properly
* Fix border color
* [TESTS] Test in docker (#2290)
* Add docker env with orchestration
* Update detox, update mocha config format
* One simulator at a time - mocha won't run parallel
* Docker runner, with test changes to match RC data
* Better error trapping in infrastructure control script
* Swap user provisioning from Mongo to RC API to work against existing servers
* Add docker to e2e readme
* Stop using example.com for emails
* Default detox to the tests directory
* Add working configs for both run scenarios
* Add some optional forcing of data.js version for Docker
* [CHORE] Consistent Rocket.Chat Branding (#2293)
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* Bump version to 4.10.0 (#2305)
* [FIX] Room Info actions doesn't check permissions/settings enabled (#2292)
* [FIX] Show Call Button only when Jitsi Enabled (RoomInfoView)
* [FIX] Show user info
* [FIX] Show message button only if it's possible
* [FIX] Create direct only when needed
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [FIX] Read receipts on tablet (#2297)
* fixes not working read receipts on tablet (#2295)
* fixing last commit it to make it work on both tablet and phone
* fix missing close button on tablet's modal view
* Update app/views/ReadReceiptView/index.js
* remove unnecessary param
Co-authored-by: Djorkaeff Alexandre <djorkaeff.unb@gmail.com>
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [IMPROVEMENT] Clear image cache when clear cache (#2300)
* [IMPROVEMENT] Clear image cache when clear cache
* use fork instead
* react-native-fast-image -> @rocket.chat/react-native-fast-image
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [FIX] In-app notification tap when deep in the stack not redirecting to the room (#2302)
* [FIX] Markdown preview causes app stuck (#2303)
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [CHORE] Update commonmark libs (#2306)
* [CHORE] Update commonmark fork and relateds
* [CHORE] Update commonmark.js
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* Bump lodash from 4.17.16 to 4.17.19 (#2310)
Bumps [lodash](https://github.com/lodash/lodash) from 4.17.16 to 4.17.19.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.16...4.17.19)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* [FIX] MessagesView duplicating content (#2307)
* Fix Pagination duplicacy
* Fix MessageView Duplicate Content
* [FIX] Return fetch func
Co-authored-by: Djorkaeff Alexandre <djorkaeff.unb@gmail.com>
* Update dependencies (#2301)
* Update RN to 0.63.0-rc.1
* Updating
* Fix keyboard
* Fix native stuff on Messagebox
* Update to RN 0.63.1
* Update pods
* Update patches
* Update minors
* Majors
* Remove base-64 in favour of js-base64
* others
* Pods
* Flipper
* Yarn
* Fix setInput
* [IMPROVEMENT] Native sort and limit queries (#2249)
* Update WatermelonDB to 0.18.0
* Low onEndReachedThreshold
* Query experiment
* QUERY_SIZE
* Query or fetch data
* Reorder class functions
* Reset variables
* Hide system messages
* Change this.count behaviour
* Starting on RoomsListView
* unsubscribeQuery
* onEndReached
* Separate queries
* Reusable where clause
* Refactoring
* Refactor RoomItem to accept item as prop
* Comment RoomItem tests just so jest passes
* Fix alert and status
* onPress
* Unnecessary diff
* react-fast-compare
* Native limit on ShareListView
* Tweak item description
* Lint
* Fix on foreground crash
* Suggested changes
* [FIX] Style not being applied on RoomsListView header subtitle (#2319)
* [IMPROVEMENT] Improve our PR Template (#1893)
* [IMPROVEMENT] Improve our PR Template
* Few changes
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* Revert "[CHORE] Update commonmark.js " (#2331)
* [TESTS] Idempotence for e2e tests (#2308)
* Idempotence for Assorted
* Idempotence for Onboarding
* Idempotence for Rooms
* Remove redundant expects
* Fixes and improvements
* Remove unneeded sleeps
* Make stable following merge
* Try solving early taps without long sleep
Try solving early taps without long sleep (cont)
Temporary CircleCI hack for quicker testing
Add screenshots to CircleCI for failed tests
Try solving early taps without long sleep (cont. 2)
Revert "Temporary CircleCI hack for quicker testing"
This reverts commit 4abef3a5827910c05b12ac8b8380275b60e8af4f.
* Fix flaky test with a fluent wait on the tap
* Add some new sleeps to workaround #2324
* Add test artifacts to gitignore
* More longpress for dodgy taps, wait for pin response
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [NEW] Log events from Onboarding, NewServer, Login and Register screens (#2169)
* Create method to track user event to isolate the logic to improve future refactoring
* Track Onboarding view
* Track NewServer view
* Refactor track method due to firebase already send the current screen
* Track default login and all the oAuth options
* Track default sign up in RegisterView
* Change trackUserEvent signature and update all the files
* Track the remaining login services
* Resolve requests to improve the importing logs and events
* Leave a bugsnag breadcrumb when logging an event
* Move all logEvent to the top of code block and log remaining fail events
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [FIX] Keyboard not focusing on TwoFactor component (#2314)
* Improve 2fa visual hierarchy
* Show 2fa keyboard by scheduling focus method after all interactions
* Remove unrelated styling improvements
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [IMPROVEMENT] TwoFactor component styling (#2328)
* Improve 2fa visual hierarchy
* Show 2fa keyboard by scheduling focus method after all interactions
* Remove unrelated styling improvements
* Improve 2fa component title hierarchy
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [FIX] Admin panel not logging in automatically (#2330)
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* Bump codecov from 3.6.5 to 3.7.1 (#2323)
Bumps [codecov](https://github.com/codecov/codecov-node) from 3.6.5 to 3.7.1.
- [Release notes](https://github.com/codecov/codecov-node/releases)
- [Commits](https://github.com/codecov/codecov-node/compare/v3.6.5...v3.7.1)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [CHORE] Skip waiting for build processing on TestFlight upload (#2320)
* [CHORE] Update react-native-firebase (#2336)
* Remove firebase
* Install firebase/app
* Install analytics
* Crashlytics
* Android
* Fix mocks
* Edit scheme to Debug build configuration
Co-authored-by: Djorkaeff Alexandre <djorkaeff.unb@gmail.com>
* [REGRESSION] Invite links stopped working after #2154 (#2338)
* [REGRESSION] Invite links stopped working after #2154
* Clear invite links token when close NewServerView
Co-authored-by: Djorkaeff Alexandre <djorkaeff.unb@gmail.com>
* [TESTS] Fix some simple text (#2332)
* Clearer infrastructure wait message
* Use a generic mailbox rather than spamming Diego
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [FIX] i18n being called outside render (#2334)
* Fix I18n usage in ThemeView
Signed-off-by: Ezequiel De Oliveira <ezequiel1de1oliveira@gmail.com>
* Fix I18n usage in NotificationPreferencesView
Signed-off-by: Ezequiel De Oliveira <ezequiel1de1oliveira@gmail.com>
* Fix some I18n wrong uses
Signed-off-by: Ezequiel De Oliveira <ezequiel1de1oliveira@gmail.com>
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [FIX] MessagesView title not working (#2294)
* Set title in header of room actions view items
Signed-off-by: Ezequiel De Oliveira <ezequiel1de1oliveira@gmail.com>
* Remove unneeded spaces
Signed-off-by: Ezequiel De Oliveira <ezequiel1de1oliveira@gmail.com>
* Set header title on constructor
Signed-off-by: Ezequiel De Oliveira <ezequiel1de1oliveira@gmail.com>
* Remove unused navigation options
Signed-off-by: Ezequiel De Oliveira <ezequiel1de1oliveira@gmail.com>
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [TESTS] Stabilise Room Actions test (#2333)
* Stabilise Room Actions test
* Fix Create Room test
* Be more tolerant of slow starting apps in CI
* Be more tolerant of slow running apps in CI
* Switch visibility checks ti stabilise Room Create test in CI
* Move slow simulator readiness waiting to initial navigateToX methods rather than repeatedly in tests without description of purpose
* [CHORE] Update icon names (#2318)
* [CHORE] Move Detox to Github Actions (#2340)
* Initial workflow for iOS detox tests
* Increase timeout
* Parallelise tests and optimise when to build
* Refine GH Actions logic
* Improve Detox App caching
* Upload failed test artifacts
* Rate limiting aware data setup
* Remove detox tests from Circle CI
* Revert "Rate limiting aware data setup"
This reverts commit d115604270f719de775018b9b06e89f2bfdc2dc7.
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [NEW] Push notification data privacy (#2213)
* [WIP] Notification Service
* [WIP] Android push notification privacy
* [WIP] Retry request when it fails (iOS)
* [WIP] Override notification bundle
* [CHORE] Remove unnecessary import
* [WIP] Check notification Type (iOS)
* [WIP] Change to notification endpoint
* eof
* fix unwrap conditional value
* turn run request synchronous
* fix bundle info
* eof
* remove extra tab
* undo unnecessary change
* remove not working code for a while
* fix notification title
* change endpoint and received/sent data
* message-id-only working properly on android
* notification privacy working on ios
* invalidate circleCI yarn cache
* Fix provisioning profiles
* fix notification service version
* fix unwrap nil
* compatibility older servers android
* show received notification when cant fetch content from server
* undo some android changes
* prevent group & reply fallback notifications
* dont show more than one fallback notification by server
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [IMPROVEMENT] Apply new mention colors (#2351)
* New mention colors
* Increase letterSpacing for mentions
* Refactor
* UnreadBadge
* Add migration
* [FIX] Missing icons (#2353)
* [FIX] Long press gestures not working properly on Android (#2354)
* [FIX] In-app notification showing while in a Jitsi call (#2345)
* Hide in app notification when focused on JitsiMeetView
* Hide notifications from different rooms
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [CHORE] Only run Flipper in debug via MainApplication is debug (#2347)
* Only run Flipper in debug via MainApplication is debug
* ReactNativeFlipper package rename + gradle bump
* [CHORE] Update Flipper to 0.51.0 (#2356)
* Only run Flipper in debug via MainApplication is debug
* ReactNativeFlipper package rename + gradle bump
* Update Flipper to latest 0.51 for Android
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [NEW] Log events from RoomsList, SideDrawer and Profile (#2190)
* Create method to track user event to isolate the logic to improve future refactoring
* Track Onboarding view
* Track NewServer view
* Refactor track method due to firebase already send the current screen
* Track default login and all the oAuth options
* Track default sign up in RegisterView
* Change trackUserEvent signature and update all the files
* Track the remaining login services
* track add server, change server and search
* Track SidebarView and refactor to use react-navigation
* Track profile events and handle exceptions
* Track create channel flux
* Track send message to user via NewMessageView
* Track create direct message flux
* Handle failure of create channel and group in the saga
* Track create discussion flux
* Track navigate to directory and its actions
* Track read, favorite and hide a channel, handling its errors
* Track all channels sorting and grouping
* Resolve requests to improve the importing logs and events
* Remove unused events file
* Leave a bugsnag breadcrumb when logging an event
* Move all logEvent to the top of code block and log remaining fail events
* Move all the non-logic-dependent logEvent to the top of code block
* Improve the logging of sidebar events
* Improve events from onboarding and newserver
* Improve events from login and register view, and log enter with apple
* Improve NewMessageView events
* Improve CreateChannel events
* Improve CreateDiscussion and SelectedUsers create group events
* Improve RoomsList events and log trivial events
* Improve ProfileView events
* Remove single line function body for the sidebarNavigate
* Navigate to Status and AdminPanel View using the defined sidebarNavigate method
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [FIX] Add missing keys to push get payload (#2358)
* [IMPROVEMENT] Add deep link to Jitsi calls (#2223)
* [WIP] Jitsi Deep Links
* [WIP] Add app links
* save uniqueID servers database
* add serverInfoKey of uniqueID
* search server by call url
* open jitsi deeplink poc
* improve jitsi url
* fix
* improve comment
* add missing android scheme
* handle host not found
* Allow app links to be matched on parseDeepLinking
* Fix push notification of a call
* Minor fix
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [FIX] App hanging on splash screen when deep link params are wrong (#2359)
* Add rule when there's no host on the deep link params
* Add fallbackNavigation()
* Fix insecure hosts
* [FIX] More missing icons (#2360)
* [NEW] Log events from Room, Settings and Edit status (#2206)
* Create method to track user event to isolate the logic to improve future refactoring
* Track Onboarding view
* Track NewServer view
* Refactor track method due to firebase already send the current screen
* Track default login and all the oAuth options
* Track default sign up in RegisterView
* Change trackUserEvent signature and update all the files
* Track the remaining login services
* track add server, change server and search
* Track SidebarView and refactor to use react-navigation
* Track profile events and handle exceptions
* Track create channel flux
* Track send message to user via NewMessageView
* Track create direct message flux
* Handle failure of create channel and group in the saga
* Track create discussion flux
* Track navigate to directory and its actions
* Track read, favorite and hide a channel, handling its errors
* Track all channels sorting and grouping
* Resolve requests to improve the importing logs and events
* Remove unused events file
* Remove unused events file
* log proposed Room events
* Log proposed Message actions events
* Log EditStatus proposed events
* Log Settings proposed events
* Leave a bugsnag breadcrumb when logging an event
* Move all logEvent to the top of code block and log remaining fail events
* Move all the non-logic-dependent logEvent to the top of code block
* Move all non-logic and non-data dependent logEvent to the top of code block
* Improve the logging of sidebar events
* Improve events from onboarding and newserver
* Improve events from login and register view, and log enter with apple
* Improve NewMessageView events
* Improve CreateChannel events
* Improve CreateDiscussion and SelectedUsers create group events
* Improve RoomsList events and log trivial events
* Improve ProfileView events
* Remove single line function body for the sidebarNavigate
* Improve SettingsView events
* Log more events from ScreenLockConfigView
* Navigate to Status and AdminPanel View using the defined sidebarNavigate method
* Improve StatusView events
* Improve RoomView events
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [FIX] Vertically centralize RoomItem when `Store_Last_Message` is disabled (#2363)
* Split RoomItem into container and component
* Refactor RoomItem
* Fix wrong status
* Tests
* Wrapper
* [NEW] Omnichannel inquiry queue (#2352)
* [WIP] Omnichannel queue
* Request inquiry when login
* Show take inquiry queued room
* Queue List as a Screen
* Poc using unread badge
* Prevent navigation to empty list
* Remove chat from queue when taked
* Fix header status on omnichannel preview room
* Fix room actions view to preview queued chat
* Use isOmnichannelPreview and dont show actions when is preview
* Filter queue chats taken by other people
* Fix room info to omnichannel preview room
* Handle show Queue
* Reset inquiry store when change server
* Improve queue logic
* Disable swipe on RoomItem when is a Queue Item
* Add unreadBadge style
* Move unread badge to presentation folder
* Cleanup inquiry reducers
* Move take saga to rocketchat function
* Remove comments
* Add relevant comments
* Subscribe to public stream if is livechat manager or doesnt have departments
* Add pt-br and improve queue empty message
* Fix take when dont have view-livechat-manager permission
* Add missing events
* Create selector for inquiry queue
* Minor fixes
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [CHORE] Wrap logEvent in a try/catch (#2361)
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [FIX] Minor i18n issues (#2335)
* Add new translations to ptBr
Signed-off-by: Ezequiel De Oliveira <ezequiel1de1oliveira@gmail.com>
* Fix update language in headers
Signed-off-by: Ezequiel De Oliveira <ezequiel1de1oliveira@gmail.com>
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [IMPROVEMENT] Use parsed EJSON info on load notification (#2370)
* [NEW] Log remaining events (#2368)
* Change NAVIGATE_TO for GO_TO to reduce event size
* Log RA JitsiMeet events and join / terminate
* Log more RoomView events
* Log slash commands and handle fail
* Log RoomActions events
* Change from GO_TO to just GO
* Log RoomInfoEdit events
* Log InviteUsers and InviteUsersEdit events
* Log AutoTranslate events
* Log NotificationPreferences events
* Log remaining routes from RoomActions
* Log RoomAction toggle block user
* Fix command event
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [FIX] WorkspaceView not looking for the correct image path (#2376)
Co-authored-by: Gabriel Henriques <gabriel.henriques@rocket.chat>
* [FIX] Android targeting wrong SDK version (#2375)
* [FIX] Mentions crashing without username (#2374)
* [FIX] Missing delete icon on MessageErrorActions (#2373)
* [FIX] Quote not working on Group DM (#2372)
* [DOCS] Add Whitelabel (#2379)
* Update readme (#2381)
* Update README.md (#2378)
* Update README.md
* Update README.md
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [DOCS] Refactor Readme (#2382)
* Refactoring
* Detail docs
* Contributing
* Update CONTRIBUTING.md
Co-authored-by: Djorkaeff Alexandre <djorkaeff.unb@gmail.com>
Co-authored-by: Djorkaeff Alexandre <djorkaeff.unb@gmail.com>
* Merge beta into master (#2388)
* Sync develop on master (#275)
* Create LICENSE
* Sync master (#721)
* Merge 1.13.0 into Master (#936)
* fix last messages (#239)
* fix last messages
* Room actions (#231)
* Layout
* Empty starred list
* Favorite room
* Pinned messages
* fix last messages
* fix date on pinned messages
* fix package
* [NEW] OAuth (#241)
* Layout
* tmp
* test iscordova
* Webview redirecting
* Open and Close login actions
* Login services saved on redux
* OAuth Github
* Server regex fix
* OAuth modal style
* - Twitter login
- Remove services from redux
- Open login saga fix
* - Facebook login
- Fixed user agent
- Reactions fix
- Message url unique key fix
* Google login
* Email keyboard removed from messagebox
* - Login buttons refactored
- RoomList header
* Layout improvements
* Meteor login redirect_uri changed
* fix
* Random credentialToken state
* [NEW] Room actions: Mentioned messages and Room Members (#242)
* Mentioned messages
* Starred and pinned actions debounce
* Room members
* Open room on member touch
* [WIP] Improves (#245)
* hotfix for ios
* hotfix for ios
* Update config.yml
* Workaround for RN 0.54 on iOS (#246)
* Update iOS to RN 0.54 (#248)
* Update iOS to RN 0.54
* [WIP] Audio message functionality (#247)
* [NEW] Add module react-native-audio
* [WIP] Audio message basic UI
* [NEW] Record audio message
* Use cordova repository to get certificates
* Icon 1024
* [NEW] Room actions: block user, snippet messages, room files and leave room (#250)
* - Block user
- Load room members async
- fixed reactive change of room's read only flag
* Snippet messages
* - Room files
- Dismiss Video component on back button press
- Improvements on Image component
* Improvement on Video component
* Leave room
* Missing message types
* lint
* Reactotron working (#249)
* [NEW] Room info and Room info edit (#254)
* - Block user
- Load room members async
- fixed reactive change of room's read only flag
* Snippet messages
* - Room files
- Dismiss Video component on back button press
- Improvements on Image component
* Improvement on Video component
* Leave room
* Missing message types
* lint
* - Room info (read only)
- Missing message types
* Room info scroll
* - Tap on room header opens room info
- Layout tweaks
* - Room info edit
- iOS Toast fixed
* - Style not implemented actions as disabled
* Edit room permission
* - Save all room settings in a single call
- Implemented roomType and readOnly
* - Allow reacting when room is read only
* Message type added: room_changed_privacy
* Erase room
* Created TextInput and SwitchContainer components for reuse and readability
* - hasPermission method
* - Archive/Unarchive room
- Set Join Code
* Twitter keyboard type on iOS
* Archived room
* reactWhenReadOnly permission on message
* Active users refactored
* User roles
* - Subscribe to roles (in order to get role description info: e.g. 'core-team' to 'Rocket.Chat Team')
- Save roles to realm (for offline access)
- Save roles to redux (and get data from realm on app init)
* Lint
* code style
* password show/hide feature
* fix show/hide password
* password show/hide
* Crashlytics (#258)
* Fabric iOS
* Fabric configured on iOS and Android
* login tracked
* more logs
* fix reaction
* CI fix
* Bug fixes (#261)
* Layout fixes
* RoomsListView's SafeAreaView
* Unhandled promise rejection fix
* Prevent navigation from opening scenes twice
* Create channel fixes
* Create LICENSE
* Beta (#265)
* Fabric iOS
* Fabric configured on iOS and Android
* - react-native-fabric configured
- login tracked
* README updated
* Run scripts from README updated
* README scripts
* get rooms and messages by rest
* user status
* more improves
* more improves
* send pong on timeout
* fix some methods
* more tests
* rest messages
* Room actions (#266)
* Toggle notifications
* Search messages
* Invite users
* Mute/Unmute users in room
* rocket.cat messages
* Room topic layout fixed
* Starred messages loading onEndReached
* Room actions onEndReached
* Unnecessary login request
* Login loading
* Login services fixed
* User presence layout
* ïmproves on room actions view
* Removed unnecessary data from SelectedUsersView
* load few messages on open room, search message improve
* fix loading messages forever
* Removed state from search
* Custom message time format
* secureTextEntry layout
* Reduce android app size
* Roles subscription fix
* Public routes navigation
* fix reconnect
* - New login/register, login, register
* proguard
* Login flux
* App init/restore
* Android layout fixes
* Multiple meteor connection requests fixed
* Nested attachments
* Nested attachments
* fix check status
* New login layout (#269)
* Public routes navigation
* New login/register, login, register
* Multiple meteor connection requests fixed
* Nested attachments
* Button component
* TextInput android layout fixed
* Register fixed
* Thinner close modal button
* Requests /me after login only one time
* Static images moved
* fix reconnect
* fix ddp
* fix custom emoji
* New message layout (#273)
* Grouping messages
* Message layout
* Users typing animation
* Image attachment layout
* Fabric and image fix (#284)
* Fixed images not showing
* Keyboard libs updated
* Fabric fix and location removed (#286)
* Proguard disabled
* message with list + links fixed (#288)
* Better image cache component (#292)
* react-native-img-cache removed
* Improve list render
* Support <http://link/Text> inside markdown
* Deep linking (#291)
* deep linking
* Basic deep link working
* Deep link routing
* Multiple servers working
* Send user to the room
* Avatar initials and room type icon (#298)
* Deep linking fix and more (#294)
* Fix - Any https link was deep linking to RocketChat
* Keyboard dismiss after add new server
* Room info bug fix
* Opacity animation
* Navigation when adding server fixed
* Throttle for unnecessary render on receiving several messages
* Search inputs without autocorrect and autocapitalize
* Search messages fixed
* Messagebox unnecessary render and spotlight fixed
* react-native-keyboard-input updated
* Lint
* Tests updated
* Update all dependencies (#299)
* Update react-navigation to the latest version 🚀 (#293)
* fix(package): update react-navigation to version 2.0.0
* Code updated to support breaking changes of react-navigation
* Detox tests E2E (#283)
* RoomsListView re-render (#304)
<!-- INSTRUCTION: Keep the line below to notify all core developers about this new PR -->
@RocketChat/ReactNative
<!-- INSTRUCTION: Inform the issue number that this PR closes, or remove the line below -->
<!-- INSTRUCTION: Tell us more about your PR with screen shots if you can -->
- [x] Removed unnecessary re-renders on RoomsListView
* [NEW] Broadcast channels (#301)
* Broadcast channels
* e2e tests
* New markdown (#306)
Our current markdown is causing a lot of issues on Android devices, since it wraps everything inside a Text component.
On Android, Text doesn't support View as a child.
This PR adds react-native-markdown-renderer, that uses View as wrapper and may be better.
* Fixed audio recording issues (#310)
* Fix for "java.lang.IllegalArgumentException: unexpected url" (#313)
<!-- INSTRUCTION: Keep the line below to notify all core developers about this new PR -->
@RocketChat/ReactNative
<!-- INSTRUCTION: Inform the issue number that this PR closes, or remove the line below -->
User was able to add an invalid instance of Rocket.Chat by pressing submit button instead of "Connect" button.
<!-- INSTRUCTION: Tell us more about your PR with screen shots if you can -->
* I18n (#312)
* Unread and date separator layout improved (#319)
<!-- INSTRUCTION: Keep the line below to notify all core developers about this new PR -->
@RocketChat/ReactNative
<!-- INSTRUCTION: Inform the issue number that this PR closes, or remove the line below -->
- [x] Unread and date separator layout
- [x] "Start of conversation"/"Loading messages" label
![screen shot 2018-05-30 at 18 10 43](https://user-images.githubusercontent.com/804994/40747867-0424964a-6435-11e8-9293-31cc43c110ab.png)
![screen shot 2018-05-30 at 18 09 05](https://user-images.githubusercontent.com/804994/40747868-04484784-6435-11e8-8c31-92e0776276f0.png)
<!-- INSTRUCTION: Tell us more about your PR with screen shots if you can -->
* [FIX] iOS Universal links (#318)
* [NEW] Drawer (#322)
* [FIX] invalid user muted value
* Ddp fixes (#324)
* [NEW] User Profile (#323)
* Drawer layout
* Drawer changes
* Profile
* Profile avatar
* Set language
* Tests
* Custom fields
* Readme updated
* fix invalid user muted value
* Fix for "Cannot add a child that doesn't have a YogaNode to a parent without a measure function! (Trying to add a 'RCTVirtualText' to a 'RCTView')"
* Settings/Permissions improvements (#325)
* Changed the way we read RocketChat settings since setting.type won't be returned from server anymore
* Permissions
* Unnecessary action sheet render
* Update gradle and targetSdkVersion (#328)
* Changed the way we read RocketChat settings since setting.type won't be returned from server anymore
* Permissions
* Unnecessary action sheet render
* Update gradle
* Switched testServer to use blob
* RoomsListHeader search fixed
* Runs loadMessagesForRoom only if room has at least 20 rows
* - Logout if user's token expired
- Removed update avatar logic
- Profile dialog border on android
* - Animations disabled
- CircleCI set
* Tests updated
* "eventType argument is required" fix
* Switch push notification lib (#346)
<!-- INSTRUCTION: Keep the line below to notify all core developers about this new PR -->
@RocketChat/ReactNative
<!-- INSTRUCTION: Inform the issue number that this PR closes, or remove the line below -->
Closes #342
<!-- INSTRUCTION: Tell us more about your PR with screen shots if you can -->
* Allow x-instance-id and X-Instance-ID header (#354)
<!-- INSTRUCTION: Keep the line below to notify all core developers about this new PR -->
@RocketChat/ReactNative
<!-- INSTRUCTION: Inform the issue number that this PR closes, or remove the line below -->
Closes #137
<!-- INSTRUCTION: Tell us more about your PR with screen shots if you can -->
Some server configurations may send x-instance-id header with different case.
* Image upload improvements (#368)
<!-- INSTRUCTION: Keep the line below to notify all core developers about this new PR -->
@RocketChat/ReactNative
<!-- INSTRUCTION: Inform the issue number that this PR closes, or remove the line below -->
- [x] Crop image
- [x] Type image description (like web)
- [x] Show upload progress
- [x] "Try again" in case of error
- [x] Cancel upload while in progress
- [x] [Android] Zoom on photos
<!-- INSTRUCTION: Tell us more about your PR with screen shots if you can -->
![image](https://user-images.githubusercontent.com/804994/42526934-a12da304-844d-11e8-8668-f3d69369726a.png)
![image](https://user-images.githubusercontent.com/804994/42527829-297945fe-8450-11e8-9f0e-9e668dd33043.png)
* [NEW] Room Loading(#372)
<!-- INSTRUCTION: Keep the line below to notify all core developers about this new PR -->
@RocketChat/ReactNative
<!-- INSTRUCTION: Inform the issue number that this PR closes, or remove the line below -->
<!-- INSTRUCTION: Tell us more about your PR with screen shots if you can -->
* [FIX] Empty room name for livechat (#375)
<!-- INSTRUCTION: Keep the line below to notify all core developers about this new PR -->
@RocketChat/ReactNative
<!-- INSTRUCTION: Inform the issue number that this PR closes, or remove the line below -->
Closes #320
Closes #209
<!-- INSTRUCTION: Tell us more about your PR with screen shots if you can -->
* [NEW] Reply preview (#374)
* Updated to React Native 0.56
* Reply Preview
* [FIX] Close websocket (#379)
* Fixed a bug when closing websocket
* removeListener fixed
* [I18N] Russian translation (#381)
[I18N] Russian translation file
* [NEW] Icon (#383)
<!-- INSTRUCTION: Keep the line below to notify all core developers about this new PR -->
@RocketChat/ReactNative
<!-- INSTRUCTION: Inform the issue number that this PR closes, or remove the line below -->
<!-- INSTRUCTION: Tell us more about your PR with screen shots if you can -->
![image](https://user-images.githubusercontent.com/804994/43228416-d8af49d6-9037-11e8-8830-a1803932c7fd.png)
* [FIX] Android 8 notifications (#382)
<!-- INSTRUCTION: Keep the line below to notify all core developers about this new PR -->
@RocketChat/ReactNative
<!-- INSTRUCTION: Inform the issue number that this PR closes, or remove the line below -->
Closes #380
<!-- INSTRUCTION: Tell us more about your PR with screen shots if you can -->
* Added CocoaPods to manage react-native-image-crop-picker (#373)
<!-- INSTRUCTION: Keep the line below to notify all core developers about this new PR -->
@RocketChat/ReactNative
<!-- INSTRUCTION: Inform the issue number that this PR closes, or remove the line below -->
<!-- INSTRUCTION: Tell us more about your PR with screen shots if you can -->
react-native-image-crop-picker raised an error when uploading to TestFlight.
The lib highly recommends CocoaPods for production builds.
* Added single-server to readme (#390)
<!-- INSTRUCTION: Keep the line below to notify all core developers about this new PR -->
@RocketChat/ReactNative
<!-- INSTRUCTION: Inform the issue number that this PR closes, or remove the line below -->
Closes #386
Closes #295
<!-- INSTRUCTION: Tell us more about your PR with screen shots if you can -->
* Improve RoomsList render time (#384)
<!-- INSTRUCTION: Keep the line below to notify all core developers about this new PR -->
@RocketChat/ReactNative
<!-- INSTRUCTION: Inform the issue number that this PR closes, or remove the line below -->
<!-- INSTRUCTION: Tell us more about your PR with screen shots if you can -->
- [x] Added FlatList.getItemLayout() to improve list render time
- [x] Some texts were breaking lines at sidebar
- [x] Removed onPress from links at RoomsListView
- [x] Added eslint rule to prevent unused styles
- [x] Fixed auto focus bug at CreateChannel and NewServer
- [x] Fix change server bug
- [x] Fixed a bug when resuming in ListServer
- [x] I18n fixed
- [x] Fixed a bug on actionsheet ref not being created
- [x] Reply wasn't showing on Android
- [x] Use Notification.Builder.setColor/getColor only after Android SDK 23
- [x] Listen to app state only when inside app
- [x] Switched register push token position in order to improve login performance
- [x] When deep link changes server, it doesn't refresh rooms list
- [x] Added SafeAreaView in all views to improve iPhone X experience
- [x] Subpath regex #388
* [NEW] Empty room background (#412)
<!-- INSTRUCTION: Keep the line below to notify all core developers about this new PR -->
@RocketChat/ReactNative
<!-- INSTRUCTION: Inform the issue number that this PR closes, or remove the line below -->
Closes #398
<!-- INSTRUCTION: Tell us more about your PR with screen shots if you can -->
![aug-09-2018 11-35-32](https://user-images.githubusercontent.com/804994/43906080-cbfadf92-9bc8-11e8-9ac9-44f43d3af023.gif)
![aug-09-2018 11-35-16](https://user-images.githubusercontent.com/804994/43906082-cc19411c-9bc8-11e8-9892-c65c86951a91.gif)
![image](https://user-images.githubusercontent.com/804994/43911366-ad830cd0-9bd5-11e8-8913-6a7e87a2206c.png)
* Add roadmap (#406)
<!-- INSTRUCTION: Keep the line below to notify all core developers about this new PR -->
@RocketChat/ReactNative
<!-- INSTRUCTION: Inform the issue number that this PR closes, or remove the line below -->
Closes #45
<!-- INSTRUCTION: Tell us more about your PR with screen shots if you can -->
* [NEW] Onboarding (#407)
<!-- INSTRUCTION: Keep the line below to notify all core developers about this new PR -->
@RocketChat/ReactNative
<!-- INSTRUCTION: Inform the issue number that this PR closes, or remove the line below -->
Closes #392
<!-- INSTRUCTION: Tell us more about your PR with screen shots if you can -->
![aug-07-2018 17-03-50](https://user-images.githubusercontent.com/804994/43799447-f62074dc-9a63-11e8-8aac-bf2c4c5a8a2b.gif)
![aug-07-2018 17-03-35](https://user-images.githubusercontent.com/804994/43799446-f5f84a70-9a63-11e8-8947-265113ae9bf4.gif)
![aug-07-2018 17-03-13](https://user-images.githubusercontent.com/804994/43799445-f5d70ee6-9a63-11e8-94a9-f49c7d69fbba.gif)
* [NEW] Updated Logo on Splash screen (#409)
<!-- INSTRUCTION: Keep the line below to notify all core developers about this new PR -->
@RocketChat/ReactNative
<!-- INSTRUCTION: Inform the issue number that this PR closes, or remove the line below -->
Closes #399
<!-- INSTRUCTION: Tell us more about your PR with screen shots if you can -->
![aug-07-2018 17-39-44](https://user-images.githubusercontent.com/804994/43801415-739a0cca-9a69-11e8-8bec-d65f751e6a28.gif)
![aug-07-2018 17-31-12](https://user-images.githubusercontent.com/804994/43801416-73d19bd6-9a69-11e8-90ac-bbc7ddeed938.gif)
* [FIX] Only single attachment rendered (#417)
* [NEW] Rooms list layout (#413)
* RoomsListView layout
* Rooms list layout
* Sort component
* Header icons
* Default header colors
* Add server dropdown
* Close sort dropdown if server dropdown will open
* UserItem
* Room type icon
* Search working
* Tests updated
* Android layout
* Using realm queries instead of array iterates
* Animation duration
* Fixed render bug
* [NEW] Create channel layout (#420)
* RoomsListView layout
* Rooms list layout
* Sort component
* Header icons
* Default header colors
* Add server dropdown
* Close sort dropdown if server dropdown will open
* UserItem
* Room type icon
* Search working
* Tests updated
* Android layout
* Using realm queries instead of array iterates
* Animation duration
* Fixed render bug
* - NewMessageView
- backButtonTitle always empty
- SearchBox created
* New create channel layout
* Search refactored
* loginSuccess dismiss modal
* Tests working
* [FIX] Open unsupported videos on browser (#422)
* 1.1
* Sort/group rooms local only (#425)
* Update android api from ci
* Sort local only
* [FIX] Missing current server (#427)
* server.current removed
* Increased area of touch on header
* Hide search when sort dropdown is tapped
* default server icon url
* 1.1.1
* [NEW] Experimental Icon (#430)
* [NEW] Message layout (#426)
* message container/component
* Separator component
* Reply
* Url
* tests updated
* Minor changes
* Audio component
* Broadcast button
* Minor touches
* Reply preview
* Edited
* Minor bug fixes
* - Update roadmap
- Bump version to 1.2
* Onboarding styles fix
* [FIX] Drawer navigation won't refresh chats (#432)
* Avoid errors on Audio/Image/Video (#443)
* Bump version to 1.2.1 (#444)
* Stop supporting Android 4.4 and lower (#447)
* Several fixes for 1.2.1 (#448)
* Fix user.roles
* Better onLongPress handle on messages
* Indicator position
* Fix role undefined in system messages
* Add baseUrl in case of file attachments
* Join room fixed
* RoomView params
* Broadcast fixes
* Add server layout changes
* Use native images
* Subscribe to not joined channels
* Fix alerts without i18n
* Tests updated
* Bump version to 1.2.2 (#449)
* [NEW] Use community JSC for Android (#450)
* [NEW] Use community JSC for Android
* Quick fix on unread chats
* [NEW] Show app version (#454)
* [NEW] Portuguese translation (#452)
* [NEW] Portuguese translation
* Remove servers from sidebar
* Update dependencies (#431)
* Update dependencies
* Lint and test
* Added react-native fork
* rn 57
* Lint and tests updated
* Update xcode on circleci
* Use legacy build system
* Update tests
* Use inline requires (#459)
* Update dependencies
* Lint and test
* Added react-native fork
* rn 57
* Lint and tests updated
* Update xcode on circleci
* Use legacy build system
* Update tests
* Inline requires
* Fix eslint and remove temp gradle
* Unnecessary renders
* Update isNotch and Readme
* Tests updated
* Bump version to 1.3.0 (#461)
* Better touch handling on rooms list (#462)
* Use react-native-gesture-handler at RoomItem
* Fixed info message author
* Edit message render improvement
* Fix ws to http replace
* Bump version to 1.3.1 (#463)
* Composer layout tweaked (#464)
* Composer layout tweaked
* Fix localization error
* Bump version to 1.3.2
* [FIX] Handle deleted messages (#466)
* [FIX] Handle deleted messages
* Fix rest error
* Fix some connection issues
* [FIX] Search rooms (#468)
* Bump version to 1.3.3 (#469)
* Connecting to DDP badge (#471)
* Display custom fields on user info (#476)
* Render custom fields on user info
* renderCustomFields fix
* Display custom fields in user info
* Fix lint error
* [FIX] DDP badge wasn't hiding on fast connections (#477)
* Use Rocket.Chat JS SDK (#481)
* JS SDK
* API working
* Multiple servers
* Bump version to 1.4.0 (#482)
* [FIX] 2FA and LDAP (#488)
* [FIX] Unread rooms group order (#487)
* Use grouping setting on temp messages (#486)
* [FIX] Delete room error (#485)
* Rename to Rocket.Chat Experimental (#483)
* Update dependencies (#484)
* Bump version to 1.4.0 (#482)
* test
* one more test
* Fix build
* Regression: Wait for unmount to delete database after logout (#489)
* Bump version to 1.4.1 (#490)
* Regression: Crash on Android search (#492)
* Bump version to 1.4.2 (#493)
* Update Rocket.Chat.js.SDK (#494)
* Bump version to v1.4.3 (#495)
* [FIX] OAuth (#496)
* Smaller header icons inside the room (#499)
* [FIX] Logout (#497)
* [FIX] Logout
* Removed realm instances on rooms list
* Bump version to 1.4.4 (#498)
* Update navigation library (#501)
* v2
* Working on Android 0.57.3
* Drawer working
* Removing v1 navigator
* - Splash screen
- Icons changed
* Deeplink
* Remove EventEmitter from CreateChannelView
* Android search
* Android notifications
* OAuth
* Fix search props
* Lint and tests fixed
* Fix android build
* Improvements on iPhone X* usage
* Fix detox
* Fix android build
* Room.f added to RoomView.shouldComponentUpdate
* Animations on RoomsListView and RoomView
* Fix topbar buttons on Android
* Bump version to 1.5.0 (#503)
* Check $FABRIC_KEY availability in CircleCI (#506)
* Check $FABRIC_KEY in CircleCI
* Remove config scripts
* Check $FABRIC_KEY availability in CircleCI for iOS (#507)
* [I18n] Add Simplified Chinese(zh-CN) locale (#505)
* [FIX] iOS pop gesture not working properly (#509)
* Check if lastMessage has an attachment and show "User sent an attachment" at RoomsList (#510)
* [FIX] Messages not being loaded properly (#513)
* Fetch avatar initials from server (#512)
* Fix iOS pop gesture and open sidemenu gesture (#511)
* Bump version to 1.5.1 (#516)
* [NEW] Room header layout (#521)
* Clear iOS notification on resume/open (#520)
* [FIX] Flashing avatars on Android after #512 (#519)
* [FIX] App connects to previous server instead of the recent added (#518)
* [FIX] Room view header crashes when destructuring reducer (#523)
* [FIX] Dismiss keyboard on room close (#530)
* [FIX] Composer composer's send icon slowness (#528)
* [WIP] New Authentication layout (#536)
New Authentication layout
* Regression: Resend messages with error (#532)
* DDP Connection badge animation changed (#533)
* [FIX] Upload buttons on Android (#541)
* Bump version to 1.6.0 (#543)
* I18n: Add missing translation of simplified Chinese (#539)
* Update dependencies (#544)
* AndroidManifest changes
* Regression: Deep linking stopped working after react-native-navigation update (#549)
* [FIX] Android stuck on splash screen after hardware back button is pressed (#550)
* [FIX] Android stuck on splash screen after hardware button is pressed
* Fix empty user at asyncstorage
* Remove unused subscribe
* [FIX] x-instance-id header prop is case insensitive (#551)
* Bump version to 1.6.1 (#553)
* [FIX] x-instance-id header prop is case insensitive
* Use Rest API calls (#558)
* Chats: Don't show group header if none of the filters is selected (#560)
* [CHORE] Update Xcode image version on CircleCI (#561)
* Bump version to 1.7.0 (#562)
* [FIX] Load messages on notification tap (#564)
* Use Rest API pt 2 (#568)
* Room files
* Pinned messages
* Starred messages
* Mentioned messages
* Search messages
* Bug fixes
* Profile
* Livechat
* Block/unblock user
* Erase room
* Archive room
* Remove unused method
* Bug fix
* [CHORE] Add hold step on CircleCI before TestFlight (#572)
* [FIX] GET /info to check if it's a valid server instead of x-instance-id (#573)
* Bump version to 1.7.1 (#574)
* Unnecessary re-renders removed (#570)
* shouldComponentUpdate
* Rooms list shouldcomponentupdate
* RoomView shouldComponentUpdate
* Messagebox and Message shouldComponentUpdate
* EmojiPicker shouldComponentUpdate
* RoomActions shouldComponentUpdate
* Room info shouldComponentUpdate
* Update RNN
* Use only one Flatlist if none group filter is selected
* Update fix
* shouldComponentUpdate
* Bug fixes
* ListView changes
* Bug fix
* render list bug fix
* Changes on public channels
* - RoomView saga leak removed
- Join room e2e tests added
* Rest versions
* Method call versions
* Min RocketChat version alert
* Update dependencies (#587)
* [FIX] Better message actions (#567)
* [FIX] Back button press on message actions (#592)
* Bump version to 1.8.0 (#595)
* [FIX] LDAP login (#596)
* Create class to manage navigation (#594)
* Add Navigation class
* Place Drawer.js logic inside of Navigation
* Load less views at startup
* [FIX] v1.8.0 (#599)
* Downgrade react-native-fast-image
* Update iOS permission usage descriptions
* [FIX] Delete upload item
* Update JS SDK version (#602)
* Add Icons class (#611)
Creates Icons class to manage when to load icons from native side or react-native-vector-icons.
It also fixes `react-native run-android` #517
* Updating room indicator (#609)
Shows "Updating..." when requesting rooms from Rest API.
* [FIX] Load avatar on servers that prevent unauthenticated avatar access (#604)
App would show an empty space on servers that require authentication on avatar access
* [FIX] 2FA login in a server with LDAP enabled (#612)
* [FIX] Start loop searching for rooms updates only when connection goes down and SDK has userId (#613)
* Allow to create empty channel (#615)
* [FIX] Reply title should break text (#616)
* Bump version to 1.9.0 (#617)
* [FIX] SDK issues (#621)
* Remove listeners from room
* Properly close connections on change server
* Minor layout change on connecting badge
* [CHORE] Add TestFlight invite and update Readme (#623)
* [FIX] npm -> yarn dependencies migration (#622)
* I18n: Add French (#629)
* [FIX] Remove rooms listener (#630)
* [CHORE] Update issue template (#638)
* I18n: Add German (#641)
* Bump version to 1.10.0 (#644)
* [FIX] Prevent mass is typing dispatchs (#651)
* [FIX] Handle database errors properly (#650)
* [FIX] Change actions labels (#654)
* [FIX] Room members filter (#655)
* [FIX] uploadProgress is not a function (#656)
* [FIX] Slow messagebox (#658)
* Remove drawer (#653)
* Remove drawer (layout needs to be changed in future releases, though)
* Don't navigate outside on logout if there's other logged server
* Update react-native-navigation
* Message button (#660)
* Remove touchable opacity when scrolling messages
* Tap on disable messages closes keyboard
* Unify vibration
* Vibrate only on Android
* [FIX] Fetch rooms date (#662)
* [FIX] Select emoji error (#666)
* Update Realm to 2.24 (#667)
* Update React Native to 0.58.6 (#668)
* [FIX] Fix some language issues in German language (#664)
* New icons (#643)
* New Icons
* Remove unused assets
* Change send icon
* Layout tweaks
* Refactor Status
* Styles changed
* User layout fix
* Separator layout changes
* Sidebar status layout fix
* Fix Message.onLongPress issue
* Fix code markdown
Closes https://github.com/RocketChat/Rocket.Chat.ReactNative/issues/625
* Status lint
* Fix tests
* Navigation debounce
* RoomActions icons
* Space between components
* Group text
* Update tests
* [CHORE] Remove .debug suffix on Android (#681)
* [FIX] Fix null native Messagebox component object (#680)
* Fix null native Messagebox component object
* [iOS] Fix header alignment
* Remove unused files
* Switch to react-navigation (#687)
* Update readme (#714)
* Bump to 1.10.1 (#731)
* [FIX] Deep linking between multiple logged servers (#730)
* Fix handle invisible status (#692)
* I18n: Add Portuguese (Portugal) (#722)
* [FIX] Show ActivityIndicator in RoomMembersView (#686)
* Bump version to 1.11.0 (#761)
* Migrate from GCM to FCM (#760)
* [NEW] Scrollable room name feature (#756)
* [NEW] Scroll down floating button (#735)
* [CHORE] Added Storybook documentation (#757)
* Use FlatList in RoomView (#762)
* [FIX] iOS requiring location permission (#768)
* Room item layout (#771)
* [NEW] Draft message per room (#772)
* [FIX] Add Realm.safeAddListener (#785)
* [CHORE] Remove tvOS target (#779)
* [NEW] Discussions (#696)
* Bump version to 1.12.0 (#804)
* [NEW] Threads (#798)
* RoomsListView improvements (#819)
* [FIX] Giphy not showing (#810)
* [FIX] Apply emojify on empty texts (#824)
* Lock drawer when stack is not on root screen (#825)
* Room item layout (#835)
* [FIX] Threads (#838)
Closes #826
Closes #827
Closes #828
Closes #829
Closes #830
Closes #831
Closes #832
Closes #833
* [FIX] Smaller thread title (#846)
* [FIX] Smaller thread title
* Remove markdown notation from thread title
* On message press debounce
* Align vertical thread title
* [Regression] Search stopped working on Android after LastMessage refactor (#851)
* Load legal pages from web (#849)
* Update fetch permissions api (#850)
* Update custom emojis endpoint (#852)
* Update emoji endpoint
* Use React.memo on Markdown
* Support RC versions lower than 0.75.0
* Realm migration
* Fetch roles from rest api (#853)
* Fetch roles from rest api
* Fix RoomInfoView role get
* Remove roles from redux
* Bump version to 1.13 (#857)
* Active users improvements (#855)
* Remove connection badge (#862)
* Connecting indicator on RoomsListView header
* Connecting indicator on RoomView header
* Remove ConnectionBadge
* Show updating on RoomView load messages
* Update dependencies (#863)
* Minor updates
* Update jsc-android
* Update react-native-modal
* Minor updates
* Update react-native-fast-image
* Minor dev updates
* Few major updates
* Update react-native-keyboard-aware-scroll-view
* Update pods
* Update android-support
* Update tests
* Remove duplicated getRoleDescription function (#866)
* [FIX] Load local URL image (#871)
* [FIX] Toggle/follow thread icon (#867)
* Tweaks on sequential threads messages layout (#858)
* Tweaks on sequential threads messages
* Update tests
* Fix quote
* Prevent from deleting thread start message when positioned inside the thread
* Remove thread listener from RightButtons
* Fix error on thread start parse
* Stop parsing threads on render
* Check replied thread only if necessary
* Fix messages don't displaying
* Fix threads e2e
* RoomsListView.updateState slice
* Stop fetching hidden messages on threads
* Set initialNumToRender to 5
* [FIX] Check if room is mounted before setting state (#864)
* Tweaks on sequential threads messages
* Update tests
* Fix quote
* Prevent from deleting thread start message when positioned inside the thread
* Remove thread listener from RightButtons
* Fix error on thread start parse
* Stop parsing threads on render
* Check replied thread only if necessary
* Fix messages don't displaying
* Fix threads e2e
* RoomsListView.updateState slice
* Stop fetching hidden messages on threads
* Check if RoomView is mounted before rendering
* Refactor navigation events on RoomsListView
* Fix lint
* Fix listener
* [FIX] Typing not getting cleared after popping a room (#873)
* [CHORE] Remove e2e tests from CI (#875)
* [FIX] Remove listeners on RoomView header unmount (#874)
* [RELEASE] Merge beta into master (#1055)
* Bump version to 1.16.0 (#1014)
* [IMPROVEMENT] Share credentials with Rocket.Chat.iOS (#982)
* ✨ Create user table
* ✨ Introduce user table
* 🔥 Remove unused table
* ➕ Add userdefaults to storage data
* 💚 Fix android build
* ✨ Get credentials from iOS native client
* 🔥 Remove unused code
* ⏪ Revert sign xcode
* 🐛 Fix first login-logout
* 🎨 Use constants to UserDefaults Keys
* 🐛 Fix clear server-user-info on logout
* 🐛 Fix filter null value
* 🚑 Remove user object in logout
* ✨ Fix get servers from native-client
* 🚑 Fix error on change server
* [FIX] Don't run UserDefaults credentials on Android (#1015)
* 🐛 Fix native credentials (android)
* Fix migration loop
* [IMPROVEMENT] Hide frequently used emoji tab when empty (#792)
* [IMPROVEMENT] Bigger emoji in emoji only messages (#793)
* issue #725: bigger emoji in emoji only message
* issue-725/add storybook for Message/Emoji
* issue-725: update storybook/Message jest snapshot
* comment storybook import
* allow spaces and line breaks in emoji only message
* merge develop
* revert unnecessary spacing
* [FIX] Empty message if contains only a link (#787)
* Fix empty message if contains only a link
* 🐛 Fix empty space
* [IMPROVEMENT] Refactor empty space regex on quote (#1017)
* 🎨 Improve regex to empty space on quote
* 🎨 Improve on regex to empty space on quote
* [NEW] Custom fields on signup (#1013)
* added custom feilds on registration
* added flag as leftIcon and removed lable
* added try and catch
* typo
* [CHORE] Renew provisioning profiles (#1020)
* [NEW] Auto-translate (#1012)
* Update realm
* View original and translate working
* Read AutoTranslate_Enabled setting
* RocketChat.canAutoTranslate()
* AutoTranslateView
* Save language
* Auto-translate switch
* Translate message
* [IMPROVEMENT] Use haptics rather than vibration (#1016)
* Install expo-haptics
* Use expo-haptics rather than RN's Vibration module
* [IMPROVEMENT] Use Rest API for file upload (#1005)
* removed rn-fetch-blob and use native XMLHttpRequest instead
* removed unnessary changes
* fix android bug
* fix android bug
* added tmid support
* fix bug
* fixed isssue with cacel model
* fix problems with audio
* done requested changes
* fix bug with android
* [CHORE] [CI] [TESTS] update detox to make ci pass (#1026)
* feat: update detox to 12.11.3 to make CI pass
* ci: comment all jobs but leave e2e-test job
* commit to rerun IC e2e-test job
* ci: uncomment all CI jobs
* [NEW] Room swipe actions: mark as read/unread, hide, fav (#976)
* added unread and fav feature
* changed the layout
* fix jest
* done requested changes
* added requested changes
* [FIX] Android build (#1027)
* [FIX] Android build
* CircleCI error
* [FIX] iOS share credentials build (#1028)
* [FIX] iOS share credentials build
* Use `hasMigration` as a string
* [CI] Restore cache on CI (#1029)
* feat: add fastlane save\restore cache config; comment not needed jobs;
* install fastlane using 'bundle install'
* install fastlane using 'sudo bundle install'
* uncomment ios build commands
* run set up google services in ios folder
* add working_directory: ios to ios-build steps
* remove 'cd ios' from Fastlane build step
* add save\restore cache for npm modules
* group save_cache steps
* cache fastlane in ios-testflight job
* uncomment previously commented jobs\steps
* fix: add missing colon
* use key for caching: node-modules-{{ checksum ".circleci/config.yml" }}-{{ checksum "yarn.lock" }}
* add names for save\restore steps
* ci: add `default` step with `working_directory: ~/repo` to ios-build job
* return back caching npm: `node-v1-{{ checksum "package.json" }}-{{ arch }}`
* fix: add missing curly braces
* save\restore cache in e2e-test job; remove {{arch}} from cache names
* add names to restore_cache steps in android-build job
* add names to save_cache steps in android-build job
* add names to all save\restore steps; change checksum package.json to yarn.lock
* change `npm` to `NPM` in steps naming
* remove {{ checksum circle ci }} from android-build job and fix naming of steps
* [FIX] Rooms swipes (#1034)
* Regression: on press style feedback
* Action button styles
* Fix animations
* Styles changed
* Update subscription without having to wait for socket
* Calculate width on RoomsListView instead
* [FIX] Decrease bigger emoji size to 30 (#1031)
* [FIX] Append server URL on avatar if necessary (#1038)
* Comment removeClippedSubviews
* Comment width animation
* Remove redux from RoomItem
* Fix wrong re-render comparison
* Remove listener
* Raise minDeltaX
* memo actions
* Spring with native driver
* Refactor functions
* Fix props issues
* Remove RoomItem.height
* Long swipe
* Refactor animations
* this.rowTranslation -> this.transX
* Moved state to this
* Bump version to 1.16.1 (#1045)
* [FIX] Set UserDefaults AppGroup on notification tap (#1047)
* [FIX] Auto-translate messages as they arrive
* Fix favorite button
* [RELEASE] Merge beta into master (#1082)
* Bump version to 1.16.0 (#1014)
* [IMPROVEMENT] Share credentials with Rocket.Chat.iOS (#982)
* ✨ Create user table
* ✨ Introduce user table
* 🔥 Remove unused table
* ➕ Add userdefaults to storage data
* 💚 Fix android build
* ✨ Get credentials from iOS native client
* 🔥 Remove unused code
* ⏪ Revert sign xcode
* 🐛 Fix first login-logout
* 🎨 Use constants to UserDefaults Keys
* 🐛 Fix clear server-user-info on logout
* 🐛 Fix filter null value
* 🚑 Remove user object in logout
* ✨ Fix get servers from native-client
* 🚑 Fix error on change server
* [FIX] Don't run UserDefaults credentials on Android (#1015)
* 🐛 Fix native credentials (android)
* Fix migration loop
* [IMPROVEMENT] Hide frequently used emoji tab when empty (#792)
* [IMPROVEMENT] Bigger emoji in emoji only messages (#793)
* issue #725: bigger emoji in emoji only message
* issue-725/add storybook for Message/Emoji
* issue-725: update storybook/Message jest snapshot
* comment storybook import
* allow spaces and line breaks in emoji only message
* merge develop
* revert unnecessary spacing
* [FIX] Empty message if contains only a link (#787)
* Fix empty message if contains only a link
* 🐛 Fix empty space
* [IMPROVEMENT] Refactor empty space regex on quote (#1017)
* 🎨 Improve regex to empty space on quote
* 🎨 Improve on regex to empty space on quote
* [NEW] Custom fields on signup (#1013)
* added custom feilds on registration
* added flag as leftIcon and removed lable
* added try and catch
* typo
* [CHORE] Renew provisioning profiles (#1020)
* [NEW] Auto-translate (#1012)
* Update realm
* View original and translate working
* Read AutoTranslate_Enabled setting
* RocketChat.canAutoTranslate()
* AutoTranslateView
* Save language
* Auto-translate switch
* Translate message
* [IMPROVEMENT] Use haptics rather than vibration (#1016)
* Install expo-haptics
* Use expo-haptics rather than RN's Vibration module
* [IMPROVEMENT] Use Rest API for file upload (#1005)
* removed rn-fetch-blob and use native XMLHttpRequest instead
* removed unnessary changes
* fix android bug
* fix android bug
* added tmid support
* fix bug
* fixed isssue with cacel model
* fix problems with audio
* done requested changes
* fix bug with android
* [CHORE] [CI] [TESTS] update detox to make ci pass (#1026)
* feat: update detox to 12.11.3 to make CI pass
* ci: comment all jobs but leave e2e-test job
* commit to rerun IC e2e-test job
* ci: uncomment all CI jobs
* [NEW] Room swipe actions: mark as read/unread, hide, fav (#976)
* added unread and fav feature
* changed the layout
* fix jest
* done requested changes
* added requested changes
* [FIX] Android build (#1027)
* [FIX] Android build
* CircleCI error
* [FIX] iOS share credentials build (#1028)
* [FIX] iOS share credentials build
* Use `hasMigration` as a string
* [CI] Restore cache on CI (#1029)
* feat: add fastlane save\restore cache config; comment not needed jobs;
* install fastlane using 'bundle install'
* install fastlane using 'sudo bundle install'
* uncomment ios build commands
* run set up google services in ios folder
* add working_directory: ios to ios-build steps
* remove 'cd ios' from Fastlane build step
* add save\restore cache for npm modules
* group save_cache steps
* cache fastlane in ios-testflight job
* uncomment previously commented jobs\steps
* fix: add missing colon
* use key for caching: node-modules-{{ checksum ".circleci/config.yml" }}-{{ checksum "yarn.lock" }}
* add names for save\restore steps
* ci: add `default` step with `working_directory: ~/repo` to ios-build job
* return back caching npm: `node-v1-{{ checksum "package.json" }}-{{ arch }}`
* fix: add missing curly braces
* save\restore cache in e2e-test job; remove {{arch}} from cache names
* add names to restore_cache steps in android-build job
* add names to save_cache steps in android-build job
* add names to all save\restore steps; change checksum package.json to yarn.lock
* change `npm` to `NPM` in steps naming
* remove {{ checksum circle ci }} from android-build job and fix naming of steps
* [FIX] Rooms swipes (#1034)
* Regression: on press style feedback
* Action button styles
* Fix animations
* Styles changed
* Update subscription without having to wait for socket
* Calculate width on RoomsListView instead
* [FIX] Decrease bigger emoji size to 30 (#1031)
* [FIX] Append server URL on avatar if necessary (#1038)
* Comment removeClippedSubviews
* Comment width animation
* Remove redux from RoomItem
* Fix wrong re-render comparison
* Remove listener
* Raise minDeltaX
* memo actions
* Spring with native driver
* Refactor functions
* Fix props issues
* Remove RoomItem.height
* Long swipe
* Refactor animations
* this.rowTranslation -> this.transX
* Moved state to this
* Bump version to 1.16.1 (#1045)
* [FIX] Set UserDefaults AppGroup on notification tap (#1047)
* [FIX] Auto-translate messages as they arrive
* Fix favorite button
* [FIX] Swipe animations (#1044)
* Comment removeClippedSubviews
* Comment width animation
* Remove redux from RoomItem
* Fix wrong re-render comparison
* Remove listener
* Raise minDeltaX
* memo actions
* Spring with native driver
* Refactor functions
* Fix props issues
* Remove RoomItem.height
* Long swipe
* Refactor animations
* this.rowTranslation -> this.transX
* Moved state to this
* Fix favorite button
* [FIX] Auto-translate messages as they arrive (#1049)
* Comment removeClippedSubviews
* Comment width animation
* Remove redux from RoomItem
* Fix wrong re-render comparison
* Remove listener
* Raise minDeltaX
* memo actions
* Spring with native driver
* Refactor functions
* Fix props issues
* Remove RoomItem.height
* Long swipe
* Refactor animations
* this.rowTranslation -> this.transX
* Moved state to this
* [FIX] Auto-translate messages as they arrive
* [i18n] Add missing de translations (#1040)
* [CHORE] Switch to react-native-localize (#1043)
* Bump version to 1.17.0 (#1057)
* Load views as needed (#1056)
* [IMPROVEMENT] Change "resend" icon position (#1048)
* [NEW] Video support (#801)
* [NEW] File upload (#882)
* [NEW] Share extension (#942)
* [FIX] Share extension CI build (#1060)
* Change bundleID
* Provisioning
* get provisioning profile
* [IMPROVEMENT] Reusable toast (#1065)
* [FIX] Moment locales (#1066)
* [FIX] Share Extension issues (#1064)
* [FIX] Empty white list enables all media types upload (#1077)
* Merge branch 'master' into develop (#1079)
* [FIX] Empty white list enables all media types upload (#1080)
* Create utils to media (canUpload)
* Fix variable name
* [CHORE] Update README (#1081)
* [RELEASE] Merge beta into master (#1088)
* Bump version to 1.16.0 (#1014)
* [IMPROVEMENT] Share credentials with Rocket.Chat.iOS (#982)
* ✨ Create user table
* ✨ Introduce user table
* 🔥 Remove unused table
* ➕ Add userdefaults to storage data
* 💚 Fix android build
* ✨ Get credentials from iOS native client
* 🔥 Remove unused code
* ⏪ Revert sign xcode
* 🐛 Fix first login-logout
* 🎨 Use constants to UserDefaults Keys
* 🐛 Fix clear server-user-info on logout
* 🐛 Fix filter null value
* 🚑 Remove user object in logout
* ✨ Fix get servers from native-client
* 🚑 Fix error on change server
* [FIX] Don't run UserDefaults credentials on Android (#1015)
* 🐛 Fix native credentials (android)
* Fix migration loop
* [IMPROVEMENT] Hide frequently used emoji tab when empty (#792)
* [IMPROVEMENT] Bigger emoji in emoji only messages (#793)
* issue #725: bigger emoji in emoji only message
* issue-725/add storybook for Message/Emoji
* issue-725: update storybook/Message jest snapshot
* comment storybook import
* allow spaces and line breaks in emoji only message
* merge develop
* revert unnecessary spacing
* [FIX] Empty message if contains only a link (#787)
* Fix empty message if contains only a link
* 🐛 Fix empty space
* [IMPROVEMENT] Refactor empty space regex on quote (#1017)
* 🎨 Improve regex to empty space on quote
* 🎨 Improve on regex to empty space on quote
* [NEW] Custom fields on signup (#1013)
* added custom feilds on registration
* added flag as leftIcon and removed lable
* added try and catch
* typo
* [CHORE] Renew provisioning profiles (#1020)
* [NEW] Auto-translate (#1012)
* Update realm
* View original and translate working
* Read AutoTranslate_Enabled setting
* RocketChat.canAutoTranslate()
* AutoTranslateView
* Save language
* Auto-translate switch
* Translate message
* [IMPROVEMENT] Use haptics rather than vibration (#1016)
* Install expo-haptics
* Use expo-haptics rather than RN's Vibration module
* [IMPROVEMENT] Use Rest API for file upload (#1005)
* removed rn-fetch-blob and use native XMLHttpRequest instead
* removed unnessary changes
* fix android bug
* fix android bug
* added tmid support
* fix bug
* fixed isssue with cacel model
* fix problems with audio
* done requested changes
* fix bug with android
* [CHORE] [CI] [TESTS] update detox to make ci pass (#1026)
* feat: update detox to 12.11.3 to make CI pass
* ci: comment all jobs but leave e2e-test job
* commit to rerun IC e2e-test job
* ci: uncomment all CI jobs
* [NEW] Room swipe actions: mark as read/unread, hide, fav (#976)
* added unread and fav feature
* changed the layout
* fix jest
* done requested changes
* added requested changes
* [FIX] Android build (#1027)
* [FIX] Android build
* CircleCI error
* [FIX] iOS share credentials build (#1028)
* [FIX] iOS share credentials build
* Use `hasMigration` as a string
* [CI] Restore cache on CI (#1029)
* feat: add fastlane save\restore cache config; comment not needed jobs;
* install fastlane using 'bundle install'
* install fastlane using 'sudo bundle install'
* uncomment ios build commands
* run set up google services in ios folder
* add working_directory: ios to ios-build steps
* remove 'cd ios' from Fastlane build step
* add save\restore cache for npm modules
* group save_cache steps
* cache fastlane in ios-testflight job
* uncomment previously commented jobs\steps
* fix: add missing colon
* use key for caching: node-modules-{{ checksum ".circleci/config.yml" }}-{{ checksum "yarn.lock" }}
* add names for save\restore steps
* ci: add `default` step with `working_directory: ~/repo` to ios-build job
* return back caching npm: `node-v1-{{ checksum "package.json" }}-{{ arch }}`
* fix: add missing curly braces
* save\restore cache in e2e-test job; remove {{arch}} from cache names
* add names to restore_cache steps in android-build job
* add names to save_cache steps in android-build job
* add names to all save\restore steps; change checksum package.json to yarn.lock
* change `npm` to `NPM` in steps naming
* remove {{ checksum circle ci }} from android-build job and fix naming of steps
* [FIX] Rooms swipes (#1034)
* Regression: on press style feedback
* Action button styles
* Fix animations
* Styles changed
* Update subscription without having to wait for socket
* Calculate width on RoomsListView instead
* [FIX] Decrease bigger emoji size to 30 (#1031)
* [FIX] Append server URL on avatar if necessary (#1038)
* Comment removeClippedSubviews
* Comment width animation
* Remove redux from RoomItem
* Fix wrong re-render comparison
* Remove listener
* Raise minDeltaX
* memo actions
* Spring with native driver
* Refactor functions
* Fix props issues
* Remove RoomItem.height
* Long swipe
* Refactor animations
* this.rowTranslation -> this.transX
* Moved state to this
* Bump version to 1.16.1 (#1045)
* [FIX] Set UserDefaults AppGroup on notification tap (#1047)
* [FIX] Auto-translate messages as they arrive
* Fix favorite button
* [FIX] Swipe animations (#1044)
* Comment removeClippedSubviews
* Comment width animation
* Remove redux from RoomItem
* Fix wrong re-render comparison
* Remove listener
* Raise minDeltaX
* memo actions
* Spring with native driver
* Refactor functions
* Fix props issues
* Remove RoomItem.height
* Long swipe
* Refactor animations
* this.rowTranslation -> this.transX
* Moved state to this
* Fix favorite button
* [FIX] Auto-translate messages as they arrive (#1049)
* Comment removeClippedSubviews
* Comment width animation
* Remove redux from RoomItem
* Fix wrong re-render comparison
* Remove listener
* Raise minDeltaX
* memo actions
* Spring with native driver
* Refactor functions
* Fix props issues
* Remove RoomItem.height
* Long swipe
* Refactor animations
* this.rowTranslation -> this.transX
* Moved state to this
* [FIX] Auto-translate messages as they arrive
* [i18n] Add missing de translations (#1040)
* [CHORE] Switch to react-native-localize (#1043)
* Bump version to 1.17.0 (#1057)
* Load views as needed (#1056)
* [IMPROVEMENT] Change "resend" icon position (#1048)
* [NEW] Video support (#801)
* [NEW] File upload (#882)
* [NEW] Share extension (#942)
* [FIX] Share extension CI build (#1060)
* Change bundleID
* Provisioning
* get provisioning profile
* [IMPROVEMENT] Reusable toast (#1065)
* [FIX] Moment locales (#1066)
* [FIX] Share Extension issues (#1064)
* [FIX] Empty white list enables all media types upload (#1077)
* Merge branch 'master' into develop (#1079)
* [FIX] Empty white list enables all media types upload (#1080)
* Create utils to media (canUpload)
* Fix variable name
* [CHORE] Update README (#1081)
* [FIX] Media share type (#1086)
* [RELEASE] Merge beta into master (#1142)
* [RELEASE] Merge beta into master (#1174)
* [RELEASE] Merge beta into master (#1282)
* Merge beta into master (#1461)
* Merge beta into master (#1637)
* Merge beta into master (#1759)
* Merge beta into master (#1897)
* [FIX] Close SortDropdown on sort select (#1230)
* [FIX] Cancel upload and check failed upload (#1232)
* [FIX] Slash commands not cleaning is typing and not using state (#1233)
* [FIX] Dispatch roomsRequest on app foreground event even if not connected (#1234)
* [CHORE] Update react-native-jitsi-meet (#1235)
* [FIX] Regex on run slash command (#1223)
* Update React Native to 0.61.1 (#1236)
* Update React Native to 0.61.1
* Update patch to SSL Pinning
* Revert storybook
* [CHORE] Update react-native-safe-area-view (#1219)
* [FIX] Try/catch JSON.parse XHR response (#1238)
* [FIX] Change messagebox icon immediate on change text (#1241)
* [FIX] Update last open on message stream received (#1240)
* [FIX] Remove animation from RoomsListView.willFocus (#1239)
* [FIX] Delete message on thread (#1214)
* [REGRESSION] Markdown text (#1242)
* [FIX] Jest (#1243)
* [FIX] Avatar shown when useRealName is activated (#1162)
* Fix avatar when use real name
* Wrong indentation
* [DOCS] Add SECURITY.md (#1244)
* [CHORE] Update react-native-reanimated to 1.3.0 (#1246)
* [FIX] Run credentials migration only once (#1245)
* [CHORE] Update react-native-jitsi-meet to 2.0.1 (#1249)
* [FIX] Messagebox onChangeText issues (#1252)
* Stop ongoing debounces on messagebox unmount
* Immediately change send icon, but keep debouncing others
* Make CustomEmoji stateless function
* Fix mentions keyExtractor
* [FIX] Room subscription issues (#1255)
* [FIX] Reaction press (#1258)
* [FIX] Channel avatars not showing after application unloads (#1264)
* Revert react-native-safe-area-view (#1265)
* [FIX] Remove console on production mode (#1268)
* [FIX] Messages preview issues (#1257)
* [FIX] Select user from native credentials (#1266)
* [FIX] Some issues on preview message (#1271)
* [FIX] Audio player track and thumb not rendering on Android (#1273)
* [FIX] Record audio message throws exception when FileSystem.getInfoAsync is called (#1272)
* [FIX] China shouldn't use CallKit (#1274)
* [FIX] Watermelon batches (#1277)
* Bump version to 1.20.1 (#1285)
* [CHORE] Remove memoize-one (#1284)
* [FIX] End Jitsi call on unmount (#1291)
* [FIX] Allow self-signed certificates (#1310)
* [FIX] Set User-Agent (#1318)
* Set User-Agent Fetch & Websocket & XHR
* Set User-Agent
* Custom User Agent on fetch/websocket
* Fix names
* Use DeviceInfo
* fix server with subpath (#1322)
* [FIX] Server with https:\\ instead of https:// (#1320)
* [FIX] Server dropdown not closing after changing stack (#1299)
* [FIX] Invalid server version (#1319)
* [IMPROVEMENT] Respect "Hide counter" preference (#1306)
* [FIX] Pass isFocused as a function to Messagebox (#1309)
* [CHORE] Remove icons folder (#1290)
* [CHORE] Refactor RoomItem touchable (#1331)
* [FIX] Unnecessary rerender on RoomItem when status is undefined (#1336)
* [UPDATE DEPS] react-navigation and react-navigation-stack (#1337)
* [FIX] Avatars not loading on share extension when Accounts_AvatarBlockUnauthenticatedAccess is enabled (#1339)
* Bump version to 1.20.2 (#1340)
* [FIX] Remove some unnecessary re-renders on Messagebox (#1341)
* [REGRESSION] Use LayoutAnimation instead of Transition API (#1338)
* [FIX] Remove setState from notifications view causing watermelon object to be updated outside an action (#1342)
* [IMPROVEMENT] Save last message as message when subscription is updated (#1344)
* [UPDATE DEPS] Update RN to 0.61.3 (#1345)
* [DOCS] Update Readme (#1346)
* [CHORE] Remove react-native-scrollable-tab-view fork (#1352)
* [FIX] URL preview (#1360)
* [REGRESSION] Decrease list view memory size (#1361)
* [FIX] Paste (#1350)
* [CHORE] Update gems (#1365)
* Bump version to 1.20.3 (#1366)
* [FIX] Use Ruby 2.4 on TestFlight upload (#1368)
* [FIX] Parse Urls (#1371)
* [FIX] Parse image URL only if it's not empty (#1372)
* [FIX] Load messages issues (#1373)
* Bump version to 1.21.0 (#1376)
* [FIX] Crowd login (#1381)
* [FIX] Clicking user avatar in thread previews crashes app (#1363)
* [IMPROVEMENT] Error messages on connect (#1379)
* [FIX] ProfileView input navigation error when custom fields aren't set (#1383)
* [FIX] Batch server deletion on logout (#1382)
* Bump app to 1.22.0 (#1387)
* [FIX] Server Version (#1392)
* Update patch and minor deps (#1386)
* [FIX] Crash when open thread (#1395)
* Bump version to 1.23.0 (#1394)
* [I18N] Update ru.js (#1384)
* [FIX] CAS building wrong URL (#1362)
* [FIX] Delete messages (#1399)
* [FIX] In-app notification showing wrong content on channels (#1400)
* Bump version to 1.24.0 (#1404)
* [FIX] Prevent server with whitespace (#1402)
* [IMPROVEMENT] Keyboard and content type on login (#1403)
* [FIX] Messages stop loading (#1410)
* [NEW] Tablet support (#1300)
* [IMPROVEMENT] Authentication via deep linking (#1418)
* [IMPROVEMENT] Markdown performance when identifying emoji only content (#1422)
* [FIX] BackHandler remove random failing on development (#1423)
* Bump version to 1.25.0 (#1424)
* [CHORE] Update CI Xcode Image (#1430)
* [FIX] Rooms grouping not working properly (#1435)
* [FIX] Take a video (#1437)
* [NEW] Themes (#1298)
* [FIX] Share extension doesn't reconnect to previous selected server on Android (#1429)
* [FIX] Init local settings on notification tap (#1438)
* Bump version to 1.26.0 (#1450)
* [FIX] Emoji parser not working on Hermes (#1445)
* [NEW] Enable Hermes (#1446)
* [FIX] Automatic theme repeating (#1457)
* [CHORE] Sync Experimental and Official app versions (#1458)
* [DOCS] Update readme (#1459)
* [FIX] Messages being sent but showing as temp status (#1469)
* [FIX] Missing messages after reconnect (#1470)
* [FIX] Few fixes on themes (#1477)
* [I18N] Missing German translations (#1465)
* Missing German translation
* adding a missing space behind colon
* added a missing space after colon
* and another attempt to finally fix this – got confused by all the branches
* some smaller fixes for the translation
* better wording
* fixed another typo
* [FIX] Crash while displaying the attached image with http on file name (#1401)
* [IMPROVEMENT] Tap app and server version to copy to clipboard (#1425)
* [NEW] Reply notification (#1448)
* [FIX] Incorrect background color login on iPad (#1480)
* [FIX] Prevent multiple tap on send (Share Extension) (#1481)
* [NEW] Image Viewer (#1479)
* [DOCS] Update Readme (#1485)
* [FIX] Jitsi with Hermes Enabled (#1523)
* [FIX] Draft messages not working with themed Messagebox (#1525)
* [FIX] Go to direct message from members list (#1519)
* [FIX] Make SAML wait for idp token instead of creating it on client (#1527)
* [FIX] Server Test Push Notification (#1508)
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [CHORE] Update to new server response (#1509)
* [FIX] Insert messages with blank users (#1529)
* Bump version to 4.2.1 (#1530)
* [FIX] Error when normalizing empty messages (#1532)
* [REGRESSION] CAS (#1570)
* Bump version to 4.2.2 (#1571)
* [FIX] Add username block condition to prevent error (#1585)
* Bump version to 4.2.3
* Bump version to 4.2.4
* Bump version to 4.3.0 (#1630)
* [FIX] Channels doesn't load (#1586)
* [FIX] Channels doesn't load
* [FIX] Update roomsUpdatedAt when subscriptions.length is 0
* [FIX] Remove unnecessary changes
* [FIX] Improve the code
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [FIX] Make SAML to work on Rocket.Chat < 2.3.0 (#1629)
* [NEW] Invite links (#1534)
* [FIX] Set the http-agent to the form that Rocket.Chat requires for logging (#1482)
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [FIX] "Following thread" and "Unfollowed Thread" is hardcoded and not translated (#1625)
* [FIX] Disable reset button if form didn't changed (#1569)
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [FIX] Header title of RoomInfoView (#1553)
* [I18N] Gallery Permissions DE (#1542)
* [FIX] Not allow to send messages to archived room (#1623)
* [FIX] Profile fields automatically reset (#1502)
* [FIX] Show attachment on ThreadMessagesView (#1493)
* [NEW] Wordpress auth (#1633)
* [CHORE] Add Start Packager script (#1639)
* [CHORE] Update RN to 0.61.5 (#1638)
* [CHORE] Update RN to 0.61.5
* [CHORE] Update react-native patch
Co-authored-by: Djorkaeff Alexandre <djorkaeff.unb@gmail.com>
* Bump version to 4.3.1 (#1641)
* [FIX] Change force logout rule (#1640)
* Bump version to 4.4.0 (#1643)
* [IMPROVEMENT] Use MessagingStyle on Android Notification (#1575)
* [NEW] Request review (#1627)
* [NEW] Pull to refresh RoomView (#1657)
* [FIX] Unsubscribe from room (#1655)
* [FIX] Server with subdirs (#1646)
* [NEW] Clear cache (#1660)
* [IMPROVEMENT] Memoize and batch subscriptions updates (#1642)
* [FIX] Disallow empty sharing (#1664)
* [REGRESSION] Use HTTPS links for sharing and markets protocol for review (#1663)
* [FIX] In some cases, share extension doesn't load images (#1649)
* [i18n] DE translations for new invite function and some minor fixes (#1631)
* [FIX] Remove duplicate jetify step (#1628)
minor: also remove 'cd' calls
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [REGRESSION] Read messages (#1666)
* [i18n] German translations missing (#1670)
* [FIX] Notifications crash on older Android Versions (#1672)
* [i18n] Added Dutch translation (#1676)
* [NEW] Omnichannel Beta (#1674)
* [NEW] Confirm logout/clear cache (#1688)
* [I18N] Add es-ES language (#1495)
* [NEW] UiKit Beta (#1497)
* [IMPROVEMENT] Use reselect (#1696)
* [FIX] Notification in Android API level less than 24 (#1692)
* [IMPROVEMENT] Send tmid on slash commands and media (#1698)
* [FIX] Unhandled action on UIKit (#1703)
* [NEW] Pull to refresh RoomsList (#1701)
* [IMPROVEMENT] Reset app when language is changed (#1702)
* [FIX] Small fixes on UIKit (#1709)
* [FIX] Spotlight (#1719)
* [CHORE] Update react-native-image-crop-picker (#1712)
* [FIX] Messages Overlapping (Android) and MessageBox Scroll (iOS) (#1720)
* [REGRESSION] Remove @ and # from mention (#1721)
* [NEW] Direct message from user info (#1516)
* [FIX] Delete slash commands (#1723)
* [IMPROVEMENT] Hold URL to copy (#1684)
* [FIX] Different sourcemaps generation for Hermes (#1724)
* [FIX] Different sourcemaps generation for Hermes
* Upload sourcemaps after build
* [REVERT] Show emoji keyboard on Android (#1738)
* [FIX] Stop logging react-native-image-crop-picker (#1745)
* [FIX] Prevent toast ref error (#1744)
* [FIX] Prevent reaction map error (#1743)
* [FIX] Add missing calls to user info (#1741)
* [FIX] Catch room unsubscribe error (#1739)
* [i18n] Missing German keys (#1735)
* [FIX] Missing i18n on MessagesView title (#1733)
* [FIX] UIKit Modal: Weird behavior on Android Tablet (#1742)
* [i18n] Missing key on German (#1747)
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [i18n] Add Italian (#1736)
…
* [CHORE] Improve ISSUE_TEMPLATE.md (#2390)
* Bump version to 4.11.0 (#2392)
* [i18n] Update fr.js (#2380)
* Update fr.js
* Update fr.js
* Update fr.js
* Update fr.js
* Update fr.js
* Update fr.js
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [CHORE] Add to internal lane instead of alpha (#2400)
* [CHORE] Remove Google Services files from repo (#2405)
* Android
* iOS
* [FIX] Fix broken StatusView on tablet (#2407)
Signed-off-by: Ezequiel De Oliveira <ezequiel1de1oliveira@gmail.com>
* [FIX] REST for method calls not raising errors (#2408)
* [FIX] REST for Method calls not raising erorrs
* Remove unnecessary lint disable
* [NEW] Encrypt user credentials and preferences (#2247)
* install react-native-mmkv-storage
* wip ios migration
* change all js rn-user-defaults -> react-native-mmkv-storage
* remove all rn-user-defaults native references (iOS)
* android migration from rn-user-defaults to react-native-mmkv-storage
* ios app group accessible mmkv
* handle get errors
* remove access of credentials from legacy native apps
* remove data of user defaults
* remove no longer necessary import
* js mmkv encryption
* run migration only once
* reply from notification android
* fix app group key access at native level ios
* encrypt user credentials using a specific key
* ios encrypt with random key
* use a random key at the first encryption
* encrypt migrated data on js land
* remove unused function
* reply notifications ios should be working
* use fix instanceID
* android ejson retrieve encrypted data
* remove encryption migrated data for a while
* encryption working between app and share extension
* fix patch react-native-notifications
* ssl pinning working using mmkv encrypted data
* improve react-native-notifications
* run encrypt migration data only once
* fix build
* fix patches magic string
* fix mmkv id
* mmkv -> userPreferences
* fix instance id on android migration
* cast our oldest sharedPreferences string into an object
* revert log remove
* create currentServer Rocket.Chat key
* wrap mmkv api class
* change the get logic
* move userPreferences to lib
* move encrypt migrated data to userPreferences class
* check if the new object is new before insert
* invalidate ci yarn cache
* fix sort migration from android shared preferences
* fix splashscreen forever
* invalidate yarn cache
* invalidate yarn cache
* fix patch
* Minor change
* fix android notifications looking for wrong mmkv instance
* Fix some issues on iOS mmkv native access
* Remove unnecessary code
* Fix notification reply and ssl pinning
* WIP NotificationService use MMKV credentials
* Add KeychainGroup
* Notification idOnly get credentials from mmkv
* Some fixes
* Invalidate yarn cache
* Pods
* Use MMKVAppExtension on NotificationService
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [IMPROVEMENT] Use font icons on login services (#2412)
* Replace font
* Use CustomIcon
* Remove native assets
* [FIX] SharedPreferences data migration (#2413)
* [IMPROVEMENT] Move directory to header (#2414)
* [FIX] Android crashing on receive a notification (#2415)
* [NEW] User notification preferences (#2403)
* Button to preferences view
Signed-off-by: Ezequiel De Oliveira <ezequiel1de1oliveira@gmail.com>
* Create screen to preferences and listItem to notifications
Signed-off-by: Ezequiel De Oliveira <ezequiel1de1oliveira@gmail.com>
* Refactoring NotificationPreferencesView
Signed-off-by: Ezequiel De Oliveira <ezequiel1de1oliveira@gmail.com>
* List notification preferences
Signed-off-by: Ezequiel De Oliveira <ezequiel1de1oliveira@gmail.com>
* Adding translations to labels
Signed-off-by: Ezequiel De Oliveira <ezequiel1de1oliveira@gmail.com>
* SetUserPreferences api call
Signed-off-by: Ezequiel De Oliveira <ezequiel1de1oliveira@gmail.com>
* Saving new user preference in API
Signed-off-by: Ezequiel De Oliveira <ezequiel1de1oliveira@gmail.com>
* Fix lint
Signed-off-by: Ezequiel De Oliveira <ezequiel1de1oliveira@gmail.com>
* Add in-app notification test
Signed-off-by: Ezequiel De Oliveira <ezequiel1de1oliveira@gmail.com>
* Fix in app mentions preference
Signed-off-by: Ezequiel De Oliveira <ezequiel1de1oliveira@gmail.com>
* Improve object in testInAppNotification
Signed-off-by: Ezequiel De Oliveira <ezequiel1de1oliveira@gmail.com>
* Removing improper options for NotificationpreferencesView
Signed-off-by: Ezequiel De Oliveira <ezequiel1de1oliveira@gmail.com>
* Adding API version
Signed-off-by: Ezequiel De Oliveira <ezequiel1de1oliveira@gmail.com>
* Use redux in UserNotificationPrefView
Signed-off-by: Ezequiel De Oliveira <ezequiel1de1oliveira@gmail.com>
* Remove in app test
Signed-off-by: Ezequiel De Oliveira <ezequiel1de1oliveira@gmail.com>
* Use components from another view
Signed-off-by: Ezequiel De Oliveira <ezequiel1de1oliveira@gmail.com>
* Removing verification for testing in-app notifications
Signed-off-by: Ezequiel De Oliveira <ezequiel1de1oliveira@gmail.com>
* Move to ProfileView
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [IMPROVEMENT] Verify Enterprise status on Omnichannel (#2399)
* Add enterpriseModules on Redux
* Fetch enterprise modules and put on redux
* hasLicense
* Clear modules
* Hide omnichannel rooms
* Minor refactor
* Hide omnichannel toggle
* Check license on user status
* Apply on search
* lint
* Look for 'livechat-enterprise'
* One module is enough to enable the features
* Unhide omnichannel rooms
* Sort tweaks
* Move omnichannel toggle to RoomsListView
* Remove omnichannel toggle from SettingsView
* Fix toggle
* Ask to enable omnichannel
* Lint
* Fix issues found on review
* [FIX] Change some icons (#2419)
* [FIX] User Preferences (#2418)
* [FIX] User Preferences
* PreferencesView -> UserPreferencesView
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [IMPROVEMENT] Customize Sign in with Apple button (#2420)
* [Snyk] Security upgrade lodash from 4.17.19 to 4.17.20 (#2416)
The following vulnerabilities are fixed with an upgrade:
- https://snyk.io/vuln/SNYK-JS-LODASH-590103
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [NEW] Add to F-Droid (#2171)
* create play and foss build
* update package.json to generate each build
* check1
* requested changes
* initial commit
* Update config.yml
* minor changes
* remove bugsnag from foss build
* remove bugsnag tasks from foss job
* fix stuck screen
* fixes
* update
* fix lint
* finalise 🚀
* requested changes
* share app for fdroid
* update
* use negation for builds
* requested change
* update share app
* fix issues due to latest sync
* add extra line
* fix lint
* update
* update
* fix bugsnag issue
* Update config.yml
* Fix store url
* Foss release instead of debug
* Add hold for foss
* Fix build
* requested changes
* update name and icons
* update
* fix
* Revert "Bump version to 4.11.0 (#2392)"
This reverts commit ea287980d9
.
* finalise
Co-authored-by: Djorkaeff Alexandre <djorkaeff.unb@gmail.com>
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [FIX] Commit pods after #2171 (#2424)
* [IMPROVEMENT] Add subscription and room events on the same batch queue (#2423)
* [IMPROVEMENT] Add subscription and room events on the same batch queue
* Send both params
* Unused var
* [IMPROVEMENT] Show "Chats in Progress" group (#2425)
* [NEW] Logout from other logged in locations (#2386)
* Logout from other logged in locations
* Add UI feedback for the request result
* Refactor request to use the proper REST API
* Change backgroundColor
* I18n
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [FIX] App can't reopening a room in some cases (#2429)
* [FIX] Logout from custom oauth (#2377)
* New field in table of users
Signed-off-by: Ezequiel De Oliveira <ezequiel1de1oliveira@gmail.com>
* Saving when the user logged in with email and password
Signed-off-by: Ezequiel De Oliveira <ezequiel1de1oliveira@gmail.com>
* Saving login method info
Signed-off-by: Ezequiel De Oliveira <ezequiel1de1oliveira@gmail.com>
* Ask for the user to clear cookies
Signed-off-by: Ezequiel De Oliveira <ezequiel1de1oliveira@gmail.com>
* Fix lint
Signed-off-by: Ezequiel De Oliveira <ezequiel1de1oliveira@gmail.com>
* Removing loginMethod from redux and add I18n
Signed-off-by: Ezequiel De Oliveira <ezequiel1de1oliveira@gmail.com>
* Using async/await instead of then/catch
Signed-off-by: Ezequiel De Oliveira <ezequiel1de1oliveira@gmail.com>
* Fix lint
Signed-off-by: Ezequiel De Oliveira <ezequiel1de1oliveira@gmail.com>
* Pods
* Added dismissText on showConfirmationAlert
* Fix iOS
* Rename function
* I18n tweaks
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [FIX] Wrong date and time shown in file section (#2409)
* Adding missing prop to item object
Signed-off-by: Ezequiel De Oliveira <ezequiel1de1oliveira@gmail.com>
* Resolving the missing date in the files section in a more elegant way
Signed-off-by: Ezequiel De Oliveira <ezequiel1de1oliveira@gmail.com>
* Using ts attribute always inside of an item object
Signed-off-by: Ezequiel De Oliveira <ezequiel1de1oliveira@gmail.com>
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [FIX] Verify useRealName setting on files screen (#2427)
Signed-off-by: Ezequiel De Oliveira <ezequiel1de1oliveira@gmail.com>
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [FIX] Apply theme on Directory description (#2428)
Signed-off-by: Ezequiel De Oliveira <ezequiel1de1oliveira@gmail.com>
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [FIX] Wrong merge resolution after #2171 (#2431)
* [FIX] Upload to internal looking for the wrong path after #2171 (#2432)
* [FIX] Detox tests (#2433)
* Spotlight issues
* Fix room tests
* Fix roomactions tests
* [FIX] Crashlytics reportError not working after #2171 (#2436)
* [FIX] Logout from custom oauth when using password (#2435)
* [FIX] Logout from custom oauth when using password
* Remove an useless const
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [IMPROVEMENT] Move toggle and inquiry to Enterprise Edition license (#2426)
* [IMPROVEMENT] Move toggle and inquiry to Enterprise
* Move inquiry stream to ee
* Emit inquiry subscribe
* imports to ee last
* Add readme to ee
Co-authored-by: Djorkaeff Alexandre <djorkaeff.unb@gmail.com>
* [CHORE] App Group path as a iOS constant (#2439)
* [FIX] Chrome debugging
* Remove rn-fetch-blob
* [CHORE] Use Rocket.Chat JS SDK's official repo (#2440)
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [IMPROVEMENT] Disable HTTP for production on Android (#2357)
* Only enable HTTP and user CAs on debug builds and
* Allow User CAs in prod
* Add config on debug
* Add lint
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [NEW] E2E Encryption (#2394)
* Add E2EKey to Subscription Model
* Install react-native-simple-crypto
* Install bytebuffer
* Add translations
* CreateChannel Encrypted toggle
* Request E2E_Enabled setting
* Add some E2E API methods
* POC E2E Encryption
* Garbage remove
* Remove keys cleaner
* Android cast JWK -> PKCS1
* Initialize E2E when Login Success
* Add some translations
* Add e2e property to Message model
* Send Encrypted messages
* (iOS) PKCS1 -> JWK & e2e.setUserPublicAndPrivateKeys
* (Android) PKCS1 -> JWK & e2e.setUserPublicAndPrivateKeys
* Create an encrypted channel
* Fix app crashing on RoomsList
* Create room key
* Set Room E2E Key (Android)
* Edit room encrypted
* Show encrypted icon on messages
* logEvents
* Decrypt pending subscriptions & messages
* Handle user cancel e2e password entry
* E2ESavePasswordView
* Update Snapshot
* Add encrypted props to message on Send
* Thread messages encryption
* E2E -> Encryption
* Share Extension: Share encrypted text
* (POC) Search messages on Encrypted room
* Provide room key to new users
* Request roomKey on stream-notify-room-users
* Add e2eKeyId to Room Model
* (WIP) E2E Encryption Screens
* Remove encryption subscription file
* Move E2E_Enable to Server Model
* Encryption List Banner
* Move Encryption init to Sagas
* Show banner only when enabled
* Use RocketChat/react-native-simple-crypto
* Search on WM only when is an Encrypted channel
* (WIP) Encryption Banner
* Encryption banner
* Patch -> Fork
* Improve send encrypted message
* Update simple-crypto
* Not decrypt already decrypted messages
* Add comments
* Change eslint disable to inline
* Improve code
* Remove comment
* Some fixes
* (WIP) Encryption Screens
* Improve sub find
* Resend an encrypted message
* Fix comment
* Code improvements
* Hide e2e buttons on features if it is not enabled
* InApp notifications of a encrypted room
* Encryption stop logic
* Edit encrypted message
* DB batch on decryptPending
* Encryption ready client
* Comments
* Handle getRoomInstance errors
* Multiple messages decrypt
* Remove unnecessary try/catch
* Fix decrypt all messages history
* Just add a questionmark
* Fix some subscriptions missing decrypt
* Disable request key logic
* Fix unicode emojis
* Fix e2ekey request
* roomId -> subscription
* Decrypt subscription after merge
* E2ERoom -> EncryptionRoom
* Fix infinite loading
* Handle import key errors
* Handle request key errors
* Move e2eRequestRoomKey to Rocket.Chat
* WIP handshake when key should be requested
* Add search messages explanation
* Remove some TODO and update comments
* Improvements
* Dont show message hash to user
* Handle key request & prevent multiple calls
* Request E2EKey on decryptSubscription that doesn't exists on database yet
* Insert decrypted subscription
* Fix crash after login
* Decrypt sub when receive the key
* Decrypt pending messages of a room
* Encrypted as a switch
* Buffer to Base64 URI Safe
* Add a relevant comment
* Prevent import key without a privateKey
* Prevent create a new instance when client is not ready
* Update simple-crypto & remove replace trick
* More comments
* Remove useless comment
* Remove useless try/catch
* I18n all E2E screens
* E2ESavePassword -> E2ESaveYourPassword
* Prevent multiple views on message when is not encrypted
* Fix encryption toggle not working sometimes
* follow some suggestions
* dont rotate icons
* remove unnecessary condition
* remove unreachable event
* create channel comment
* disable no-bitwise rule for entire file
* loadKeys -> persistKeys
* getMasterKey -> generateMasterKey
* explicit difference between E2EKey & e2eKeyId
* roomId -> rid
* group columns
* Remove server selector
* missing log events
* remove comment
* use stored public key
* update simple-crypto & remove base64-js patch
* add some logs
* remove unreachable condition
* log errors
* handle errors on provide key directly on subscription
* Downgrade RocketChat/react-native-simple-crypto
* improve get room instance
* migration of older apps
* check encrypted status before send a message
* wait client ready
* use our own base64-js
* add more jest tests
* explain return
* remove unncessary stop
* thrown error to caller
* remove superfluous checks
* use Encryption property
* change ready state logic
* ready -> establishing
* encryption.room -> encryptionRoom
* EncryptionRoom -> Room
* add documentation
* wait establishing before provide a room key
* remove superfluous condition
* improve error handling logic
* fallback e2ekey set
* remove no longer necessary check
* remove e.g.
* improve getRoomInstance
* import from index
* use batch
* fix a comment
* decrypt tmsg
* dont show hash when message is encrypted
* Fix detox
* Apply suggestions from code review
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [CHORE] Update run-ios and run-android scripts (#2450)
* [IMPROVEMENT] Show errors on server enter (#2449)
* Catching errors
* [IMPROVEMENT] Show errors on server enter
* "Not rc server" instead of "invalid or insecure url" msg
* [NEW] Show server history (#2421)
* Add dropdown
Signed-off-by: Ezequiel De Oliveira <ezequiel1de1oliveira@gmail.com>
* Adding new table to serverSchema
Signed-off-by: Ezequiel De Oliveira <ezequiel1de1oliveira@gmail.com>
* Saving if not exists
Signed-off-by: Ezequiel De Oliveira <ezequiel1de1oliveira@gmail.com>
* list of visited servers finished
Signed-off-by: Ezequiel De Oliveira <ezequiel1de1oliveira@gmail.com>
* Fix lint
Signed-off-by: Ezequiel De Oliveira <ezequiel1de1oliveira@gmail.com>
* Rename ServerLinks to ServersHistory
* Refactor
* Save username
* Sort servers desc
* ServerInput
* Item
* Refactor
* Layout tweaks
* Layout
* query by text
* Small refactor
* Redirecting to login
* Save username for oauth
* Fix keyboard persist
* Add tests
* Unnecessary yield
* Stop rendering FlatList logic when there's no servers on history
* Dismiss keyboard and autocomplete when tapped outside server TextInput
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [NEW] Toggle analytics events (#2422)
* Create flow to toggle analytics events on memory
* Persist toggle analytics events
* Update crash report to contemplate analytics events
* Minor tweaks
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [FIX] Local database searches using non-latin characters (#2462)
* [FIX] Local database searches using non-latin characters
* Add tests
* [FIX] Read receipt crashing in some cases (#2464)
* [IMPROVEMENT] Add "Allow_Save_Media_to_Gallery" setting (#2459)
* [IMPROVEMENT] Add "Allow_Save_Media_to_Gallery" setting
* Default true for old servers
* [FIX] Jitsi breaking changes (#2468)
* [FIX] Jitsi breaking changes
* Update yarn cache
* Update WatermelonDB to 0.19.0 (#2469)
* [FIX] Jitsi breaking changes
* Update yarn cache
* Update watermelon to 0.19
* [FIX] SanitizeLikeString util crashes for empty strings (#2471)
* [i18n] Add Traditional Chinese (zh_TW) (#2465)
* I18n: Add Traditional Chinese language file(zh_TW)
* Minor fixes
* I18n: Add missing translation and fix some weird words
* fix escape char
* Fix minor issues
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [I18n] Improve Simplified Chinese (zh_CN) (#2466)
* I18n: Improve Simplified Chinese(zh_CN) language file
* I18n: Add missing translation
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [CHORE] Simplify i18n files (#2472)
* [FIX] Remove assets from share extension on iOS (#2473)
* [CHORE] Change database location to Experimental Apps (#2483)
* change database location of experimental apps
* fix migration from older versions
* [FIX] WatermelonDB caching Date as String (#2484)
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [NEW] E2E Encryption push (Android) (#2481)
* poc push encryption android
* eof
* format code
* react-native-simple-crypto update
* prevent find sub twice
* remove storage and use ejson storage
* invalidate yarn cache
* Bump crypto and fix db path
* Fix google-services path
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [FIX] Language set by web client (#2488)
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [i18n] Improve Chinese translation (zh-TW, zh-CN) (#2486)
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [i18n] Add missing italian strings (#2487)
fix some existing ones too
* [NEW] E2E Encryption push (iOS) (#2463)
* link pods to notification service
* push encryption poc
* decrypt room key poc
* read user key from mmkv and cast into a pkcs
* push decrypt poc (iOS)
* expose needed watermelon methods
* watermelon -> database
* indent & simple-crypto update
* string extensions
* storage
* toBase64 -> toData
* remove a forced unwrap
* remove unused import
* database driver
* improvement
* folder structure & watermelon bridge
* more improvement stuff
* watermelon -> database
* reuse database instance
* improvement
* database fix: bypass watermelon cache
* some code improvements
* encryption instances
* start api stuff
* network layer
* improve notification service
* improve folder structure
* watermelon patch
* retry fetch logic
* rocketchat class
* fix try to decrypt without a roomKey
* fallback to original content that is translated
* some fixes to rocketchat logic
* merge develop
* remove unnecessary extension
* [CHORE] Improve reply notification code (iOS)
* undo sign changes
* remove mocked value
* import direct from library
* send message request
* reply notification with encrypted message working properly
* revert apple sign
* fix api onerror
* trick to display sender name on group notifications
* revert data.host change
* fix some multithread issues
* use sendername sent by server
* small improvement
* Bump crypto lib
* Update ios/NotificationService/NotificationService.swift
* add experimental string
* remove trailing slash
* remove trailing slash on reply
* fix decrypt messages
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [REGRESSION] HTTP Basic Auth (#2490)
* [FIX] Logout when install fresh Official and Experimental iOS app (#2493)
* [FIX] Show images in iOS 14 (#2494)
* [DOCS] Add Reactotron (#2498)
* Update about the inspection tool for our app.
Information about the Reactotron tool was missing in the contribution file.
* Update CONTRIBUTING.md
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [REGRESSION] SSL Pinning stopped working after #2449 (#2510)
* [CHORE] Reset yarn cache (#2512)
* [FIX] Fastlane iOS (#2513)
* [IMPROVEMENT] Add F-Droid modules as AdditionalModules (#2530)
* [IMPROVEMENT] Add F-Droid modules as AdditionalModules
* Fix missing import
* [CHORE] Use App Store Connect API Key (#2549)
* [CHORE] Use App Store Connect API Key
* Update bundle
* rollback keychain
* Remove keychain
* Keychain is actually needed
* Update gitignore
* [FIX] Failing iOS build on fork PR (#2558)
* Fix fastlane build for a fork PR
* Change the iOS fastlane command to build_fork
* [FIX] Avatar cache invalidation (#2311)
* [WIP] Avatar cache invalidation
* [WIP] Avatar container
* [IMPROVEMENT] Avatar container
* [CHORE] Improve code
* Allow static image on Avatar
* Fix avatar changing while change username (#1583)
Co-authored-by: Prateek93a <prateek93a@gmail.com>
* Add default props to properly update on Sidebar and ProfileView
* Fix subscribing on the wrong moment
* Storyshots update
* RoomItem using Avatar Component
* use iife to unsubscribe from user
* Use component on avatar container
* RoomItem as a React.Component
* Move servers models to servers folder
* Avatar -> AvatarContainer
* Users indexed fields
* Initialize author and check if u is present
* Not was found -> User not found (turn comments more relevant)
* RoomItemInner -> Wrapper
* Revert Avatar Touchable logic
* Revert responsability of LeftButton on Tablet Mode
* Prevent setState on constructor
* Run avatarURL only when its not static
* Add streams RC Version
* Move entire add user logic to result.success
* Reorder init on RoomItem
* onPress as a class function
* Fix roomItem using same username
* Add avatar Stories
* Fix pick an image from gallery on ProfileView
* get avatar etag on select users of create discussion
* invalidate ci cache
* Fix migration
* Fix sidebar avatar not updating
Co-authored-by: Prateek93a <prateek93a@gmail.com>
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [NEW] Channel avatars (#2504)
* [WIP] Avatar cache invalidation
* [WIP] Avatar container
* [IMPROVEMENT] Avatar container
* [CHORE] Improve code
* Allow static image on Avatar
* Fix avatar changing while change username (#1583)
Co-authored-by: Prateek93a <prateek93a@gmail.com>
* Add default props to properly update on Sidebar and ProfileView
* Fix subscribing on the wrong moment
* Storyshots update
* RoomItem using Avatar Component
* use iife to unsubscribe from user
* Use component on avatar container
* RoomItem as a React.Component
* Move servers models to servers folder
* Avatar -> AvatarContainer
* Users indexed fields
* Initialize author and check if u is present
* Not was found -> User not found (turn comments more relevant)
* RoomItemInner -> Wrapper
* Revert Avatar Touchable logic
* Revert responsability of LeftButton on Tablet Mode
* Prevent setState on constructor
* Run avatarURL only when its not static
* Add streams RC Version
* Move entire add user logic to result.success
* Reorder init on RoomItem
* onPress as a class function
* Fix roomItem using same username
* Add avatar Stories
* Fix pick an image from gallery on ProfileView
* Format Avatar URL to use RoomId.
Co-authored-by: Ezequiel De Oliveira <ezequiel1de1oliveira@gmail.com>
* edit room avatar
* invalidate cache of room images
* reinit avatar if something change
* read avatar cache on search
* room avatar changed system message
* add avatar by rid test
* update snapshot
* etag cache on select channel
* reset room avatar
* increase caching to have a better image quality
* fix lgtm warn
* invalidate ci cache
* get avatar etag on select users of create discussion
* invalidate ci cache
* Fix migration
* Fix sidebar avatar not updating
* Remove outdated comment
* Tests
Co-authored-by: Prateek93a <prateek93a@gmail.com>
Co-authored-by: Diego Mello <diegolmello@gmail.com>
Co-authored-by: Ezequiel De Oliveira <ezequiel1de1oliveira@gmail.com>
* [IMPROVEMENT] List Component (#2506)
* List.Item
* section
* Start removing theme as prop
* Remove StatusBar theme prop
* SafeAreaView theme prop
* Minor fixes
* List.Container
* Add translateTitle and translateSubtitle props
* Storybook
* Show action indicator
* Header
* Info
* Theme stories
* FlatList
* DisplayName
* Fix settings
* FlatList tweaks
* ThemeView
* Screen Lock Config
* DefaultBrowserView
* PickerView and User Prefs
* Notification Prefs
* StatusView
* Auto Translate
* InviteUsersEdit
* Visitor
* Minor fixes
* Remove Separator
* Remove iteminfo
* Font scale
* Legal
* Jitsi and e2e
* Block
* search, star, etc
* auto translate and notifications
* RoomInfo
* Refactor RoomActions
* lint
* Remove DisclosureIndicator
* padding horizontal 12
* Detox
* Tests
* Address review comments
* Fix vertical scroll
Co-authored-by: Djorkaeff Alexandre <djorkaeff.unb@gmail.com>
* [FIX] App always sends auth for Avatar requests (#2517)
* [FIX] Sending auth for Avatar requests when not necessary
* fix storybook
* Fix ShareListView not updating avatars
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [FIX] iOS uploads always cropping as squares (#2516)
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [IMPROVEMENT] Mentions layout without background (#2559)
* [IMPROVEMENT] Mentions layout without background
* Fix RoomItem
* Fix tests
* [IMPROVEMENT] Support badge number on header buttons (#2566)
* Beginning header buttons refactor
* Add HeaderButtons
* item with title
* Refactor
* Remove lib
* Refactor
* Update snapshot
* Refactor
* Update tests
* Lint
* [NEW] Threads (#2567)
* [IMPROVEMENT] Mentions layout without background
* Fix RoomItem
* Fix tests
* Smaller messagebox
* Messagebox colors tweak
* Beginning header buttons refactor
* Add HeaderButtons
* item with title
* Refactor
* Remove lib
* Refactor
* Update snapshot
* Send to channel on messagebox
* Add tshow
* Add showMessageInMainThread to login.user reducer
* Filter threads on main channel based on user setting
* Send tshow
* Add tunread
* Move unread colors logic away from UnreadBadge component so it can be used on other components
* Export UnreadBadge on index
* Add empty test
* Refactor
* Update tests
* Lint
* Thread unread user and group on RoomItem
* Thread badge working
* Started ThreadMessagesView.Item
* Fix separator
* Reactivity working
* Lint
* custom emojis aren't necessary
* Basic filter layout
* Filtering layout
* Refactor
* apply filter
* DropdownItemHeader
* default all
* few fixes
* No data found
* Fixes list performance issues
* Use locale on date formats
* Fixed minor styles
* Thread badge
* Refactor getBadgeColor
* Fix send to channel background color
* starting search threads
* Fix lint and tests
* Bump to 4.12.0 just for testing :)
* Search input layout
* query
* starting threads header
* fix unnecessary tlm on tmid messages
* Fix thread header
* lint
* Fix thread header on ShareView
* Add e2e tests
* Fix subscriptions sort
* Update stories and minor fixes
* Fix button sizes on Messagebox
* Remove comment
* Unnecessary conditional
* Add showMessageInMainThread to user collection
* Fix thread header
* Fix thread messages not working on tablet
* Reset Messagebox.tshow after sending a message
* Allow to send to channel when replying to a thread from main channel
* Unnecessary theme prop
* Address comments
* Remove re-render
* Fix scroll indicator bug
* Fix style
* Minor i18n fix
* Fix dropdown height
* I18n ptbr
* I18n
* [IMPROVEMENT] Android push notification as a heads-up notification (#2507)
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [IMPROVEMENT] Add `Change Encryption Password` and `Reset E2E Key` (#2542)
* init
* Basic tests passing
* Add SecurityPrivacyView
* List.Item
* section
* Start removing theme as prop
* Remove StatusBar theme prop
* SafeAreaView theme prop
* Minor fixes
* List.Container
* Add translateTitle and translateSubtitle props
* Storybook
* Show action indicator
* Header
* Info
* Theme stories
* FlatList
* DisplayName
* Fix settings
* FlatList tweaks
* ThemeView
* Screen Lock Config
* DefaultBrowserView
* PickerView and User Prefs
* Notification Prefs
* StatusView
* Auto Translate
* InviteUsersEdit
* Visitor
* Minor fixes
* Remove Separator
* Remove iteminfo
* Font scale
* Legal
* Jitsi and e2e
* Block
* search, star, etc
* auto translate and notifications
* RoomInfo
* Refactor RoomActions
* lint
* Remove DisclosureIndicator
* padding horizontal 12
* Detox
* Tests
* SecurityPrivacy
* E2E encryption sec view
* stash
* Reset own key
* Reset key
* Change password
* Hide content
* Small refactor
* Fix tests
* Tests passing
* Change test order
* add pt-br
* Address review comments
* tests
* Missing i18n ptbr
Co-authored-by: Djorkaeff Alexandre <djorkaeff.unb@gmail.com>
* [IMPROVEMENT] Branding update (#2580)
* iOS native icons
* Android native icons
* Foss native icons
* Experimental icon iOS
* Experimental
* Notification icon
* Splash screen
* Splash screen iOS
* Blue notification text
* Fix iOS Launch Screen Icon
* Experimental and foss
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [CHORE] Update Xcode to 12.1.0 (#2592)
* [CHORE] Update Xcode to 12.1.0
* Remove alpha from Xcode App Store Icon
* [IMPROVEMENT] Auto search when text changes in directory textfield (#2547)
Co-authored-by: Djorkaeff Alexandre <djorkaeff.unb@gmail.com>
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [FIX] Rooms header overlapping right icons (#2503)
takes into account long names on small screen which led to overlapping title and right buttons on the header bar
* [IMPROVEMENT] Jitsi lean (#2534)
* 2.10.2
* update jitsi sdk
* use our own react-native-jitsi-meet
* use own android jitsi sdk
* remove jsc reference
* use self-builded ios sdk
* update react-native-jitsi-meet
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [i18n] German word fix (#2598)
Report in German means "The Report" not "to report". Therefor "Melden" ist better suited here.
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [i18n] Improve Chinese translation (#2570)
* [FIX] App crashing when notification is received/replied (Android) (#2602)
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [FIX] Update react native CLI to support white labeling with XCode 12 (#2560)
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [i18n] Add missing German strings (#2571)
* adding missing German strings
* resolving conflict
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [REGRESSION] Avatars doesn't show up on older servers (< 3.6.0) (#2603)
* [REGRESSION] Avatars doesn't show up on older servers (< 3.6.0)
* fix: snapshots tests failing
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [FIX] Missing locales in moment helper (#2562)
* [i18n] Add missing Russian strings (#2555)
* Added waiting for network string translate
* [i18n] Add missing russian strings
* Some E2E strings
* [i18n] Add missing russian strings
* Some grammatical changes and translate optimizations
* Add english strings
* Final translate
Co-authored-by: Карлан Антон Андреевич <KarlanAA@global.bcs>
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [FIX] 'Send to channel' when replying as a quote (#2606)
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [FIX] Android notification on Dark Theme using Official main color (#2604)
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [FIX] Storybook not able to import Avatar (#2607)
* [FIX] Storybook not able to import Avatar
* Fix lint
* Mock Date.now
* Fix RU translation
* isLegacy -> serverVersion
* Remove change avatar from room info edit for servers below 3.6
* Mock for storyshots only
* lint
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [BUG] App isn't showing message for PDF/file uploads (#2584)
* Fixed the issue #2531
In app/containers/message/Reply.js added a View Contaier around the
Attachment Touchable and Added a Markdown attribute with msg set to
description of attachment to display the message if any.
* Added the condition to check if File Description Exists
Added an if statement to check if file description exists and if yes
then add a markdown with value msg equal to the description.
Also tested using 'yarn test -u' to add/update the tests.
* Made the requested Changes
Removed the condition to check for attachment description.
Added the `markdown` inside the touchable and wrapped `attachmentContainer` and the `markdown` inside a `<>` component
* Added file not showing message issue code in this branch
* Fixed the mistake in return
* fix
* Add tests
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [FIX] Header title positioning not changing according to the number of icons (#2608)
* [DOCS] Update Android Supported versions (#2611)
* [i18n] Improve Russian translation (#2609)
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [FIX] User notification preferences throwing an error when select default Email option (#2615)
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [FIX] MomentJS crashing on Spanish language (#2616)
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [FIX] AllowBackup manifest attribute causing unexpected behaviour on login (#2617)
* [FIX] Search messages crashing when show a thread message (#2618)
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [FIX] F-Droid build for store (#2557)
* [FIX] F-Droid build for store
* Trying to make Override custom push notifications on play build only
* Use play sourceSets
* Change version code
* Fix react-native-config-reader
* [FIX] F-Droid build for store
* Trying to make Override custom push notifications on play build only
* Use play sourceSets
* Change version code
* Fix react-native-config-reader
* Remove react-native-device-info Google dependencies / Use LIBRE_BUILD of react-native-jitsi-meet
* Invalidate CI Cache
* Set specific jitsi-meet-sdk
* Specify 2.10.0-libre
* jitsi-meet using an url based on play build
* update react-native-jitsi-meet
* react-native-device-info foss
* undo some unnecessary changes
* Fix notifications
Co-authored-by: Djorkaeff Alexandre <djorkaeff.unb@gmail.com>
* Merge beta into master (#2621)
* Sync develop on master (#275)
* Create LICENSE
* Sync master (#721)
* Merge 1.13.0 into Master (#936)
* fix last messages (#239)
* fix last messages
* Room actions (#231)
* Layout
* Empty starred list
* Favorite room
* Pinned messages
* fix last messages
* fix date on pinned messages
* fix package
* [NEW] OAuth (#241)
* Layout
* tmp
* test iscordova
* Webview redirecting
* Open and Close login actions
* Login services saved on redux
* OAuth Github
* Server regex fix
* OAuth modal style
* - Twitter login
- Remove services from redux
- Open login saga fix
* - Facebook login
- Fixed user agent
- Reactions fix
- Message url unique key fix
* Google login
* Email keyboard removed from messagebox
* - Login buttons refactored
- RoomList header
* Layout improvements
* Meteor login redirect_uri changed
* fix
* Random credentialToken state
* [NEW] Room actions: Mentioned messages and Room Members (#242)
* Mentioned messages
* Starred and pinned actions debounce
* Room members
* Open room on member touch
* [WIP] Improves (#245)
* hotfix for ios
* hotfix for ios
* Update config.yml
* Workaround for RN 0.54 on iOS (#246)
* Update iOS to RN 0.54 (#248)
* Update iOS to RN 0.54
* [WIP] Audio message functionality (#247)
* [NEW] Add module react-native-audio
* [WIP] Audio message basic UI
* [NEW] Record audio message
* Use cordova repository to get certificates
* Icon 1024
* [NEW] Room actions: block user, snippet messages, room files and leave room (#250)
* - Block user
- Load room members async
- fixed reactive change of room's read only flag
* Snippet messages
* - Room files
- Dismiss Video component on back button press
- Improvements on Image component
* Improvement on Video component
* Leave room
* Missing message types
* lint
* Reactotron working (#249)
* [NEW] Room info and Room info edit (#254)
* - Block user
- Load room members async
- fixed reactive change of room's read only flag
* Snippet messages
* - Room files
- Dismiss Video component on back button press
- Improvements on Image component
* Improvement on Video component
* Leave room
* Missing message types
* lint
* - Room info (read only)
- Missing message types
* Room info scroll
* - Tap on room header opens room info
- Layout tweaks
* - Room info edit
- iOS Toast fixed
* - Style not implemented actions as disabled
* Edit room permission
* - Save all room settings in a single call
- Implemented roomType and readOnly
* - Allow reacting when room is read only
* Message type added: room_changed_privacy
* Erase room
* Created TextInput and SwitchContainer components for reuse and readability
* - hasPermission method
* - Archive/Unarchive room
- Set Join Code
* Twitter keyboard type on iOS
* Archived room
* reactWhenReadOnly permission on message
* Active users refactored
* User roles
* - Subscribe to roles (in order to get role description info: e.g. 'core-team' to 'Rocket.Chat Team')
- Save roles to realm (for offline access)
- Save roles to redux (and get data from realm on app init)
* Lint
* code style
* password show/hide feature
* fix show/hide password
* password show/hide
* Crashlytics (#258)
* Fabric iOS
* Fabric configured on iOS and Android
* login tracked
* more logs
* fix reaction
* CI fix
* Bug fixes (#261)
* Layout fixes
* RoomsListView's SafeAreaView
* Unhandled promise rejection fix
* Prevent navigation from opening scenes twice
* Create channel fixes
* Create LICENSE
* Beta (#265)
* Fabric iOS
* Fabric configured on iOS and Android
* - react-native-fabric configured
- login tracked
* README updated
* Run scripts from README updated
* README scripts
* get rooms and messages by rest
* user status
* more improves
* more improves
* send pong on timeout
* fix some methods
* more tests
* rest messages
* Room actions (#266)
* Toggle notifications
* Search messages
* Invite users
* Mute/Unmute users in room
* rocket.cat messages
* Room topic layout fixed
* Starred messages loading onEndReached
* Room actions onEndReached
* Unnecessary login request
* Login loading
* Login services fixed
* User presence layout
* ïmproves on room actions view
* Removed unnecessary data from SelectedUsersView
* load few messages on open room, search message improve
* fix loading messages forever
* Removed state from search
* Custom message time format
* secureTextEntry layout
* Reduce android app size
* Roles subscription fix
* Public routes navigation
* fix reconnect
* - New login/register, login, register
* proguard
* Login flux
* App init/restore
* Android layout fixes
* Multiple meteor connection requests fixed
* Nested attachments
* Nested attachments
* fix check status
* New login layout (#269)
* Public routes navigation
* New login/register, login, register
* Multiple meteor connection requests fixed
* Nested attachments
* Button component
* TextInput android layout fixed
* Register fixed
* Thinner close modal button
* Requests /me after login only one time
* Static images moved
* fix reconnect
* fix ddp
* fix custom emoji
* New message layout (#273)
* Grouping messages
* Message layout
* Users typing animation
* Image attachment layout
* Fabric and image fix (#284)
* Fixed images not showing
* Keyboard libs updated
* Fabric fix and location removed (#286)
* Proguard disabled
* message with list + links fixed (#288)
* Better image cache component (#292)
* react-native-img-cache removed
* Improve list render
* Support <http://link/Text> inside markdown
* Deep linking (#291)
* deep linking
* Basic deep link working
* Deep link routing
* Multiple servers working
* Send user to the room
* Avatar initials and room type icon (#298)
* Deep linking fix and more (#294)
* Fix - Any https link was deep linking to RocketChat
* Keyboard dismiss after add new server
* Room info bug fix
* Opacity animation
* Navigation when adding server fixed
* Throttle for unnecessary render on receiving several messages
* Search inputs without autocorrect and autocapitalize
* Search messages fixed
* Messagebox unnecessary render and spotlight fixed
* react-native-keyboard-input updated
* Lint
* Tests updated
* Update all dependencies (#299)
* Update react-navigation to the latest version 🚀 (#293)
* fix(package): update react-navigation to version 2.0.0
* Code updated to support breaking changes of react-navigation
* Detox tests E2E (#283)
* RoomsListView re-render (#304)
<!-- INSTRUCTION: Keep the line below to notify all core developers about this new PR -->
@RocketChat/ReactNative
<!-- INSTRUCTION: Inform the issue number that this PR closes, or remove the line below -->
<!-- INSTRUCTION: Tell us more about your PR with screen shots if you can -->
- [x] Removed unnecessary re-renders on RoomsListView
* [NEW] Broadcast channels (#301)
* Broadcast channels
* e2e tests
* New markdown (#306)
Our current markdown is causing a lot of issues on Android devices, since it wraps everything inside a Text component.
On Android, Text doesn't support View as a child.
This PR adds react-native-markdown-renderer, that uses View as wrapper and may be better.
* Fixed audio recording issues (#310)
* Fix for "java.lang.IllegalArgumentException: unexpected url" (#313)
<!-- INSTRUCTION: Keep the line below to notify all core developers about this new PR -->
@RocketChat/ReactNative
<!-- INSTRUCTION: Inform the issue number that this PR closes, or remove the line below -->
User was able to add an invalid instance of Rocket.Chat by pressing submit button instead of "Connect" button.
<!-- INSTRUCTION: Tell us more about your PR with screen shots if you can -->
* I18n (#312)
* Unread and date separator layout improved (#319)
<!-- INSTRUCTION: Keep the line below to notify all core developers about this new PR -->
@RocketChat/ReactNative
<!-- INSTRUCTION: Inform the issue number that this PR closes, or remove the line below -->
- [x] Unread and date separator layout
- [x] "Start of conversation"/"Loading messages" label
![screen shot 2018-05-30 at 18 10 43](https://user-images.githubusercontent.com/804994/40747867-0424964a-6435-11e8-9293-31cc43c110ab.png)
![screen shot 2018-05-30 at 18 09 05](https://user-images.githubusercontent.com/804994/40747868-04484784-6435-11e8-8c31-92e0776276f0.png)
<!-- INSTRUCTION: Tell us more about your PR with screen shots if you can -->
* [FIX] iOS Universal links (#318)
* [NEW] Drawer (#322)
* [FIX] invalid user muted value
* Ddp fixes (#324)
* [NEW] User Profile (#323)
* Drawer layout
* Drawer changes
* Profile
* Profile avatar
* Set language
* Tests
* Custom fields
* Readme updated
* fix invalid user muted value
* Fix for "Cannot add a child that doesn't have a YogaNode to a parent without a measure function! (Trying to add a 'RCTVirtualText' to a 'RCTView')"
* Settings/Permissions improvements (#325)
* Changed the way we read RocketChat settings since setting.type won't be returned from server anymore
* Permissions
* Unnecessary action sheet render
* Update gradle and targetSdkVersion (#328)
* Changed the way we read RocketChat settings since setting.type won't be returned from server anymore
* Permissions
* Unnecessary action sheet render
* Update gradle
* Switched testServer to use blob
* RoomsListHeader search fixed
* Runs loadMessagesForRoom only if room has at least 20 rows
* - Logout if user's token expired
- Removed update avatar logic
- Profile dialog border on android
* - Animations disabled
- CircleCI set
* Tests updated
* "eventType argument is required" fix
* Switch push notification lib (#346)
<!-- INSTRUCTION: Keep the line below to notify all core developers about this new PR -->
@RocketChat/ReactNative
<!-- INSTRUCTION: Inform the issue number that this PR closes, or remove the line below -->
Closes #342
<!-- INSTRUCTION: Tell us more about your PR with screen shots if you can -->
* Allow x-instance-id and X-Instance-ID header (#354)
<!-- INSTRUCTION: Keep the line below to notify all core developers about this new PR -->
@RocketChat/ReactNative
<!-- INSTRUCTION: Inform the issue number that this PR closes, or remove the line below -->
Closes #137
<!-- INSTRUCTION: Tell us more about your PR with screen shots if you can -->
Some server configurations may send x-instance-id header with different case.
* Image upload improvements (#368)
<!-- INSTRUCTION: Keep the line below to notify all core developers about this new PR -->
@RocketChat/ReactNative
<!-- INSTRUCTION: Inform the issue number that this PR closes, or remove the line below -->
- [x] Crop image
- [x] Type image description (like web)
- [x] Show upload progress
- [x] "Try again" in case of error
- [x] Cancel upload while in progress
- [x] [Android] Zoom on photos
<!-- INSTRUCTION: Tell us more about your PR with screen shots if you can -->
![image](https://user-images.githubusercontent.com/804994/42526934-a12da304-844d-11e8-8668-f3d69369726a.png)
![image](https://user-images.githubusercontent.com/804994/42527829-297945fe-8450-11e8-9f0e-9e668dd33043.png)
* [NEW] Room Loading(#372)
<!-- INSTRUCTION: Keep the line below to notify all core developers about this new PR -->
@RocketChat/ReactNative
<!-- INSTRUCTION: Inform the issue number that this PR closes, or remove the line below -->
<!-- INSTRUCTION: Tell us more about your PR with screen shots if you can -->
* [FIX] Empty room name for livechat (#375)
<!-- INSTRUCTION: Keep the line below to notify all core developers about this new PR -->
@RocketChat/ReactNative
<!-- INSTRUCTION: Inform the issue number that this PR closes, or remove the line below -->
Closes #320
Closes #209
<!-- INSTRUCTION: Tell us more about your PR with screen shots if you can -->
* [NEW] Reply preview (#374)
* Updated to React Native 0.56
* Reply Preview
* [FIX] Close websocket (#379)
* Fixed a bug when closing websocket
* removeListener fixed
* [I18N] Russian translation (#381)
[I18N] Russian translation file
* [NEW] Icon (#383)
<!-- INSTRUCTION: Keep the line below to notify all core developers about this new PR -->
@RocketChat/ReactNative
<!-- INSTRUCTION: Inform the issue number that this PR closes, or remove the line below -->
<!-- INSTRUCTION: Tell us more about your PR with screen shots if you can -->
![image](https://user-images.githubusercontent.com/804994/43228416-d8af49d6-9037-11e8-8830-a1803932c7fd.png)
* [FIX] Android 8 notifications (#382)
<!-- INSTRUCTION: Keep the line below to notify all core developers about this new PR -->
@RocketChat/ReactNative
<!-- INSTRUCTION: Inform the issue number that this PR closes, or remove the line below -->
Closes #380
<!-- INSTRUCTION: Tell us more about your PR with screen shots if you can -->
* Added CocoaPods to manage react-native-image-crop-picker (#373)
<!-- INSTRUCTION: Keep the line below to notify all core developers about this new PR -->
@RocketChat/ReactNative
<!-- INSTRUCTION: Inform the issue number that this PR closes, or remove the line below -->
<!-- INSTRUCTION: Tell us more about your PR with screen shots if you can -->
react-native-image-crop-picker raised an error when uploading to TestFlight.
The lib highly recommends CocoaPods for production builds.
* Added single-server to readme (#390)
<!-- INSTRUCTION: Keep the line below to notify all core developers about this new PR -->
@RocketChat/ReactNative
<!-- INSTRUCTION: Inform the issue number that this PR closes, or remove the line below -->
Closes #386
Closes #295
<!-- INSTRUCTION: Tell us more about your PR with screen shots if you can -->
* Improve RoomsList render time (#384)
<!-- INSTRUCTION: Keep the line below to notify all core developers about this new PR -->
@RocketChat/ReactNative
<!-- INSTRUCTION: Inform the issue number that this PR closes, or remove the line below -->
<!-- INSTRUCTION: Tell us more about your PR with screen shots if you can -->
- [x] Added FlatList.getItemLayout() to improve list render time
- [x] Some texts were breaking lines at sidebar
- [x] Removed onPress from links at RoomsListView
- [x] Added eslint rule to prevent unused styles
- [x] Fixed auto focus bug at CreateChannel and NewServer
- [x] Fix change server bug
- [x] Fixed a bug when resuming in ListServer
- [x] I18n fixed
- [x] Fixed a bug on actionsheet ref not being created
- [x] Reply wasn't showing on Android
- [x] Use Notification.Builder.setColor/getColor only after Android SDK 23
- [x] Listen to app state only when inside app
- [x] Switched register push token position in order to improve login performance
- [x] When deep link changes server, it doesn't refresh rooms list
- [x] Added SafeAreaView in all views to improve iPhone X experience
- [x] Subpath regex #388
* [NEW] Empty room background (#412)
<!-- INSTRUCTION: Keep the line below to notify all core developers about this new PR -->
@RocketChat/ReactNative
<!-- INSTRUCTION: Inform the issue number that this PR closes, or remove the line below -->
Closes #398
<!-- INSTRUCTION: Tell us more about your PR with screen shots if you can -->
![aug-09-2018 11-35-32](https://user-images.githubusercontent.com/804994/43906080-cbfadf92-9bc8-11e8-9ac9-44f43d3af023.gif)
![aug-09-2018 11-35-16](https://user-images.githubusercontent.com/804994/43906082-cc19411c-9bc8-11e8-9892-c65c86951a91.gif)
![image](https://user-images.githubusercontent.com/804994/43911366-ad830cd0-9bd5-11e8-8913-6a7e87a2206c.png)
* Add roadmap (#406)
<!-- INSTRUCTION: Keep the line below to notify all core developers about this new PR -->
@RocketChat/ReactNative
<!-- INSTRUCTION: Inform the issue number that this PR closes, or remove the line below -->
Closes #45
<!-- INSTRUCTION: Tell us more about your PR with screen shots if you can -->
* [NEW] Onboarding (#407)
<!-- INSTRUCTION: Keep the line below to notify all core developers about this new PR -->
@RocketChat/ReactNative
<!-- INSTRUCTION: Inform the issue number that this PR closes, or remove the line below -->
Closes #392
<!-- INSTRUCTION: Tell us more about your PR with screen shots if you can -->
![aug-07-2018 17-03-50](https://user-images.githubusercontent.com/804994/43799447-f62074dc-9a63-11e8-8aac-bf2c4c5a8a2b.gif)
![aug-07-2018 17-03-35](https://user-images.githubusercontent.com/804994/43799446-f5f84a70-9a63-11e8-8947-265113ae9bf4.gif)
![aug-07-2018 17-03-13](https://user-images.githubusercontent.com/804994/43799445-f5d70ee6-9a63-11e8-94a9-f49c7d69fbba.gif)
* [NEW] Updated Logo on Splash screen (#409)
<!-- INSTRUCTION: Keep the line below to notify all core developers about this new PR -->
@RocketChat/ReactNative
<!-- INSTRUCTION: Inform the issue number that this PR closes, or remove the line below -->
Closes #399
<!-- INSTRUCTION: Tell us more about your PR with screen shots if you can -->
![aug-07-2018 17-39-44](https://user-images.githubusercontent.com/804994/43801415-739a0cca-9a69-11e8-8bec-d65f751e6a28.gif)
![aug-07-2018 17-31-12](https://user-images.githubusercontent.com/804994/43801416-73d19bd6-9a69-11e8-90ac-bbc7ddeed938.gif)
* [FIX] Only single attachment rendered (#417)
* [NEW] Rooms list layout (#413)
* RoomsListView layout
* Rooms list layout
* Sort component
* Header icons
* Default header colors
* Add server dropdown
* Close sort dropdown if server dropdown will open
* UserItem
* Room type icon
* Search working
* Tests updated
* Android layout
* Using realm queries instead of array iterates
* Animation duration
* Fixed render bug
* [NEW] Create channel layout (#420)
* RoomsListView layout
* Rooms list layout
* Sort component
* Header icons
* Default header colors
* Add server dropdown
* Close sort dropdown if server dropdown will open
* UserItem
* Room type icon
* Search working
* Tests updated
* Android layout
* Using realm queries instead of array iterates
* Animation duration
* Fixed render bug
* - NewMessageView
- backButtonTitle always empty
- SearchBox created
* New create channel layout
* Search refactored
* loginSuccess dismiss modal
* Tests working
* [FIX] Open unsupported videos on browser (#422)
* 1.1
* Sort/group rooms local only (#425)
* Update android api from ci
* Sort local only
* [FIX] Missing current server (#427)
* server.current removed
* Increased area of touch on header
* Hide search when sort dropdown is tapped
* default server icon url
* 1.1.1
* [NEW] Experimental Icon (#430)
* [NEW] Message layout (#426)
* message container/component
* Separator component
* Reply
* Url
* tests updated
* Minor changes
* Audio component
* Broadcast button
* Minor touches
* Reply preview
* Edited
* Minor bug fixes
* - Update roadmap
- Bump version to 1.2
* Onboarding styles fix
* [FIX] Drawer navigation won't refresh chats (#432)
* Avoid errors on Audio/Image/Video (#443)
* Bump version to 1.2.1 (#444)
* Stop supporting Android 4.4 and lower (#447)
* Several fixes for 1.2.1 (#448)
* Fix user.roles
* Better onLongPress handle on messages
* Indicator position
* Fix role undefined in system messages
* Add baseUrl in case of file attachments
* Join room fixed
* RoomView params
* Broadcast fixes
* Add server layout changes
* Use native images
* Subscribe to not joined channels
* Fix alerts without i18n
* Tests updated
* Bump version to 1.2.2 (#449)
* [NEW] Use community JSC for Android (#450)
* [NEW] Use community JSC for Android
* Quick fix on unread chats
* [NEW] Show app version (#454)
* [NEW] Portuguese translation (#452)
* [NEW] Portuguese translation
* Remove servers from sidebar
* Update dependencies (#431)
* Update dependencies
* Lint and test
* Added react-native fork
* rn 57
* Lint and tests updated
* Update xcode on circleci
* Use legacy build system
* Update tests
* Use inline requires (#459)
* Update dependencies
* Lint and test
* Added react-native fork
* rn 57
* Lint and tests updated
* Update xcode on circleci
* Use legacy build system
* Update tests
* Inline requires
* Fix eslint and remove temp gradle
* Unnecessary renders
* Update isNotch and Readme
* Tests updated
* Bump version to 1.3.0 (#461)
* Better touch handling on rooms list (#462)
* Use react-native-gesture-handler at RoomItem
* Fixed info message author
* Edit message render improvement
* Fix ws to http replace
* Bump version to 1.3.1 (#463)
* Composer layout tweaked (#464)
* Composer layout tweaked
* Fix localization error
* Bump version to 1.3.2
* [FIX] Handle deleted messages (#466)
* [FIX] Handle deleted messages
* Fix rest error
* Fix some connection issues
* [FIX] Search rooms (#468)
* Bump version to 1.3.3 (#469)
* Connecting to DDP badge (#471)
* Display custom fields on user info (#476)
* Render custom fields on user info
* renderCustomFields fix
* Display custom fields in user info
* Fix lint error
* [FIX] DDP badge wasn't hiding on fast connections (#477)
* Use Rocket.Chat JS SDK (#481)
* JS SDK
* API working
* Multiple servers
* Bump version to 1.4.0 (#482)
* [FIX] 2FA and LDAP (#488)
* [FIX] Unread rooms group order (#487)
* Use grouping setting on temp messages (#486)
* [FIX] Delete room error (#485)
* Rename to Rocket.Chat Experimental (#483)
* Update dependencies (#484)
* Bump version to 1.4.0 (#482)
* test
* one more test
* Fix build
* Regression: Wait for unmount to delete database after logout (#489)
* Bump version to 1.4.1 (#490)
* Regression: Crash on Android search (#492)
* Bump version to 1.4.2 (#493)
* Update Rocket.Chat.js.SDK (#494)
* Bump version to v1.4.3 (#495)
* [FIX] OAuth (#496)
* Smaller header icons inside the room (#499)
* [FIX] Logout (#497)
* [FIX] Logout
* Removed realm instances on rooms list
* Bump version to 1.4.4 (#498)
* Update navigation library (#501)
* v2
* Working on Android 0.57.3
* Drawer working
* Removing v1 navigator
* - Splash screen
- Icons changed
* Deeplink
* Remove EventEmitter from CreateChannelView
* Android search
* Android notifications
* OAuth
* Fix search props
* Lint and tests fixed
* Fix android build
* Improvements on iPhone X* usage
* Fix detox
* Fix android build
* Room.f added to RoomView.shouldComponentUpdate
* Animations on RoomsListView and RoomView
* Fix topbar buttons on Android
* Bump version to 1.5.0 (#503)
* Check $FABRIC_KEY availability in CircleCI (#506)
* Check $FABRIC_KEY in CircleCI
* Remove config scripts
* Check $FABRIC_KEY availability in CircleCI for iOS (#507)
* [I18n] Add Simplified Chinese(zh-CN) locale (#505)
* [FIX] iOS pop gesture not working properly (#509)
* Check if lastMessage has an attachment and show "User sent an attachment" at RoomsList (#510)
* [FIX] Messages not being loaded properly (#513)
* Fetch avatar initials from server (#512)
* Fix iOS pop gesture and open sidemenu gesture (#511)
* Bump version to 1.5.1 (#516)
* [NEW] Room header layout (#521)
* Clear iOS notification on resume/open (#520)
* [FIX] Flashing avatars on Android after #512 (#519)
* [FIX] App connects to previous server instead of the recent added (#518)
* [FIX] Room view header crashes when destructuring reducer (#523)
* [FIX] Dismiss keyboard on room close (#530)
* [FIX] Composer composer's send icon slowness (#528)
* [WIP] New Authentication layout (#536)
New Authentication layout
* Regression: Resend messages with error (#532)
* DDP Connection badge animation changed (#533)
* [FIX] Upload buttons on Android (#541)
* Bump version to 1.6.0 (#543)
* I18n: Add missing translation of simplified Chinese (#539)
* Update dependencies (#544)
* AndroidManifest changes
* Regression: Deep linking stopped working after react-native-navigation update (#549)
* [FIX] Android stuck on splash screen after hardware back button is pressed (#550)
* [FIX] Android stuck on splash screen after hardware button is pressed
* Fix empty user at asyncstorage
* Remove unused subscribe
* [FIX] x-instance-id header prop is case insensitive (#551)
* Bump version to 1.6.1 (#553)
* [FIX] x-instance-id header prop is case insensitive
* Use Rest API calls (#558)
* Chats: Don't show group header if none of the filters is selected (#560)
* [CHORE] Update Xcode image version on CircleCI (#561)
* Bump version to 1.7.0 (#562)
* [FIX] Load messages on notification tap (#564)
* Use Rest API pt 2 (#568)
* Room files
* Pinned messages
* Starred messages
* Mentioned messages
* Search messages
* Bug fixes
* Profile
* Livechat
* Block/unblock user
* Erase room
* Archive room
* Remove unused method
* Bug fix
* [CHORE] Add hold step on CircleCI before TestFlight (#572)
* [FIX] GET /info to check if it's a valid server instead of x-instance-id (#573)
* Bump version to 1.7.1 (#574)
* Unnecessary re-renders removed (#570)
* shouldComponentUpdate
* Rooms list shouldcomponentupdate
* RoomView shouldComponentUpdate
* Messagebox and Message shouldComponentUpdate
* EmojiPicker shouldComponentUpdate
* RoomActions shouldComponentUpdate
* Room info shouldComponentUpdate
* Update RNN
* Use only one Flatlist if none group filter is selected
* Update fix
* shouldComponentUpdate
* Bug fixes
* ListView changes
* Bug fix
* render list bug fix
* Changes on public channels
* - RoomView saga leak removed
- Join room e2e tests added
* Rest versions
* Method call versions
* Min RocketChat version alert
* Update dependencies (#587)
* [FIX] Better message actions (#567)
* [FIX] Back button press on message actions (#592)
* Bump version to 1.8.0 (#595)
* [FIX] LDAP login (#596)
* Create class to manage navigation (#594)
* Add Navigation class
* Place Drawer.js logic inside of Navigation
* Load less views at startup
* [FIX] v1.8.0 (#599)
* Downgrade react-native-fast-image
* Update iOS permission usage descriptions
* [FIX] Delete upload item
* Update JS SDK version (#602)
* Add Icons class (#611)
Creates Icons class to manage when to load icons from native side or react-native-vector-icons.
It also fixes `react-native run-android` #517
* Updating room indicator (#609)
Shows "Updating..." when requesting rooms from Rest API.
* [FIX] Load avatar on servers that prevent unauthenticated avatar access (#604)
App would show an empty space on servers that require authentication on avatar access
* [FIX] 2FA login in a server with LDAP enabled (#612)
* [FIX] Start loop searching for rooms updates only when connection goes down and SDK has userId (#613)
* Allow to create empty channel (#615)
* [FIX] Reply title should break text (#616)
* Bump version to 1.9.0 (#617)
* [FIX] SDK issues (#621)
* Remove listeners from room
* Properly close connections on change server
* Minor layout change on connecting badge
* [CHORE] Add TestFlight invite and update Readme (#623)
* [FIX] npm -> yarn dependencies migration (#622)
* I18n: Add French (#629)
* [FIX] Remove rooms listener (#630)
* [CHORE] Update issue template (#638)
* I18n: Add German (#641)
* Bump version to 1.10.0 (#644)
* [FIX] Prevent mass is typing dispatchs (#651)
* [FIX] Handle database errors properly (#650)
* [FIX] Change actions labels (#654)
* [FIX] Room members filter (#655)
* [FIX] uploadProgress is not a function (#656)
* [FIX] Slow messagebox (#658)
* Remove drawer (#653)
* Remove drawer (layout needs to be changed in future releases, though)
* Don't navigate outside on logout if there's other logged server
* Update react-native-navigation
* Message button (#660)
* Remove touchable opacity when scrolling messages
* Tap on disable messages closes keyboard
* Unify vibration
* Vibrate only on Android
* [FIX] Fetch rooms date (#662)
* [FIX] Select emoji error (#666)
* Update Realm to 2.24 (#667)
* Update React Native to 0.58.6 (#668)
* [FIX] Fix some language issues in German language (#664)
* New icons (#643)
* New Icons
* Remove unused assets
* Change send icon
* Layout tweaks
* Refactor Status
* Styles changed
* User layout fix
* Separator layout changes
* Sidebar status layout fix
* Fix Message.onLongPress issue
* Fix code markdown
Closes https://github.com/RocketChat/Rocket.Chat.ReactNative/issues/625
* Status lint
* Fix tests
* Navigation debounce
* RoomActions icons
* Space between components
* Group text
* Update tests
* [CHORE] Remove .debug suffix on Android (#681)
* [FIX] Fix null native Messagebox component object (#680)
* Fix null native Messagebox component object
* [iOS] Fix header alignment
* Remove unused files
* Switch to react-navigation (#687)
* Update readme (#714)
* Bump to 1.10.1 (#731)
* [FIX] Deep linking between multiple logged servers (#730)
* Fix handle invisible status (#692)
* I18n: Add Portuguese (Portugal) (#722)
* [FIX] Show ActivityIndicator in RoomMembersView (#686)
* Bump version to 1.11.0 (#761)
* Migrate from GCM to FCM (#760)
* [NEW] Scrollable room name feature (#756)
* [NEW] Scroll down floating button (#735)
* [CHORE] Added Storybook documentation (#757)
* Use FlatList in RoomView (#762)
* [FIX] iOS requiring location permission (#768)
* Room item layout (#771)
* [NEW] Draft message per room (#772)
* [FIX] Add Realm.safeAddListener (#785)
* [CHORE] Remove tvOS target (#779)
* [NEW] Discussions (#696)
* Bump version to 1.12.0 (#804)
* [NEW] Threads (#798)
* RoomsListView improvements (#819)
* [FIX] Giphy not showing (#810)
* [FIX] Apply emojify on empty texts (#824)
* Lock drawer when stack is not on root screen (#825)
* Room item layout (#835)
* [FIX] Threads (#838)
Closes #826
Closes #827
Closes #828
Closes #829
Closes #830
Closes #831
Closes #832
Closes #833
* [FIX] Smaller thread title (#846)
* [FIX] Smaller thread title
* Remove markdown notation from thread title
* On message press debounce
* Align vertical thread title
* [Regression] Search stopped working on Android after LastMessage refactor (#851)
* Load legal pages from web (#849)
* Update fetch permissions api (#850)
* Update custom emojis endpoint (#852)
* Update emoji endpoint
* Use React.memo on Markdown
* Support RC versions lower than 0.75.0
* Realm migration
* Fetch roles from rest api (#853)
* Fetch roles from rest api
* Fix RoomInfoView role get
* Remove roles from redux
* Bump version to 1.13 (#857)
* Active users improvements (#855)
* Remove connection badge (#862)
* Connecting indicator on RoomsListView header
* Connecting indicator on RoomView header
* Remove ConnectionBadge
* Show updating on RoomView load messages
* Update dependencies (#863)
* Minor updates
* Update jsc-android
* Update react-native-modal
* Minor updates
* Update react-native-fast-image
* Minor dev updates
* Few major updates
* Update react-native-keyboard-aware-scroll-view
* Update pods
* Update android-support
* Update tests
* Remove duplicated getRoleDescription function (#866)
* [FIX] Load local URL image (#871)
* [FIX] Toggle/follow thread icon (#867)
* Tweaks on sequential threads messages layout (#858)
* Tweaks on sequential threads messages
* Update tests
* Fix quote
* Prevent from deleting thread start message when positioned inside the thread
* Remove thread listener from RightButtons
* Fix error on thread start parse
* Stop parsing threads on render
* Check replied thread only if necessary
* Fix messages don't displaying
* Fix threads e2e
* RoomsListView.updateState slice
* Stop fetching hidden messages on threads
* Set initialNumToRender to 5
* [FIX] Check if room is mounted before setting state (#864)
* Tweaks on sequential threads messages
* Update tests
* Fix quote
* Prevent from deleting thread start message when positioned inside the thread
* Remove thread listener from RightButtons
* Fix error on thread start parse
* Stop parsing threads on render
* Check replied thread only if necessary
* Fix messages don't displaying
* Fix threads e2e
* RoomsListView.updateState slice
* Stop fetching hidden messages on threads
* Check if RoomView is mounted before rendering
* Refactor navigation events on RoomsListView
* Fix lint
* Fix listener
* [FIX] Typing not getting cleared after popping a room (#873)
* [CHORE] Remove e2e tests from CI (#875)
* [FIX] Remove listeners on RoomView header unmount (#874)
* [RELEASE] Merge beta into master (#1055)
* Bump version to 1.16.0 (#1014)
* [IMPROVEMENT] Share credentials with Rocket.Chat.iOS (#982)
* ✨ Create user table
* ✨ Introduce user table
* 🔥 Remove unused table
* ➕ Add userdefaults to storage data
* 💚 Fix android build
* ✨ Get credentials from iOS native client
* 🔥 Remove unused code
* ⏪ Revert sign xcode
* 🐛 Fix first login-logout
* 🎨 Use constants to UserDefaults Keys
* 🐛 Fix clear server-user-info on logout
* 🐛 Fix filter null value
* 🚑 Remove user object in logout
* ✨ Fix get servers from native-client
* 🚑 Fix error on change server
* [FIX] Don't run UserDefaults credentials on Android (#1015)
* 🐛 Fix native credentials (android)
* Fix migration loop
* [IMPROVEMENT] Hide frequently used emoji tab when empty (#792)
* [IMPROVEMENT] Bigger emoji in emoji only messages (#793)
* issue #725: bigger emoji in emoji only message
* issue-725/add storybook for Message/Emoji
* issue-725: update storybook/Message jest snapshot
* comment storybook import
* allow spaces and line breaks in emoji only message
* merge develop
* revert unnecessary spacing
* [FIX] Empty message if contains only a link (#787)
* Fix empty message if contains only a link
* 🐛 Fix empty space
* [IMPROVEMENT] Refactor empty space regex on quote (#1017)
* 🎨 Improve regex to empty space on quote
* 🎨 Improve on regex to empty space on quote
* [NEW] Custom fields on signup (#1013)
* added custom feilds on registration
* added flag as leftIcon and removed lable
* added try and catch
* typo
* [CHORE] Renew provisioning profiles (#1020)
* [NEW] Auto-translate (#1012)
* Update realm
* View original and translate working
* Read AutoTranslate_Enabled setting
* RocketChat.canAutoTranslate()
* AutoTranslateView
* Save language
* Auto-translate switch
* Translate message
* [IMPROVEMENT] Use haptics rather than vibration (#1016)
* Install expo-haptics
* Use expo-haptics rather than RN's Vibration module
* [IMPROVEMENT] Use Rest API for file upload (#1005)
* removed rn-fetch-blob and use native XMLHttpRequest instead
* removed unnessary changes
* fix android bug
* fix android bug
* added tmid support
* fix bug
* fixed isssue with cacel model
* fix problems with audio
* done requested changes
* fix bug with android
* [CHORE] [CI] [TESTS] update detox to make ci pass (#1026)
* feat: update detox to 12.11.3 to make CI pass
* ci: comment all jobs but leave e2e-test job
* commit to rerun IC e2e-test job
* ci: uncomment all CI jobs
* [NEW] Room swipe actions: mark as read/unread, hide, fav (#976)
* added unread and fav feature
* changed the layout
* fix jest
* done requested changes
* added requested changes
* [FIX] Android build (#1027)
* [FIX] Android build
* CircleCI error
* [FIX] iOS share credentials build (#1028)
* [FIX] iOS share credentials build
* Use `hasMigration` as a string
* [CI] Restore cache on CI (#1029)
* feat: add fastlane save\restore cache config; comment not needed jobs;
* install fastlane using 'bundle install'
* install fastlane using 'sudo bundle install'
* uncomment ios build commands
* run set up google services in ios folder
* add working_directory: ios to ios-build steps
* remove 'cd ios' from Fastlane build step
* add save\restore cache for npm modules
* group save_cache steps
* cache fastlane in ios-testflight job
* uncomment previously commented jobs\steps
* fix: add missing colon
* use key for caching: node-modules-{{ checksum ".circleci/config.yml" }}-{{ checksum "yarn.lock" }}
* add names for save\restore steps
* ci: add `default` step with `working_directory: ~/repo` to ios-build job
* return back caching npm: `node-v1-{{ checksum "package.json" }}-{{ arch }}`
* fix: add missing curly braces
* save\restore cache in e2e-test job; remove {{arch}} from cache names
* add names to restore_cache steps in android-build job
* add names to save_cache steps in android-build job
* add names to all save\restore steps; change checksum package.json to yarn.lock
* change `npm` to `NPM` in steps naming
* remove {{ checksum circle ci }} from android-build job and fix naming of steps
* [FIX] Rooms swipes (#1034)
* Regression: on press style feedback
* Action button styles
* Fix animations
* Styles changed
* Update subscription without having to wait for socket
* Calculate width on RoomsListView instead
* [FIX] Decrease bigger emoji size to 30 (#1031)
* [FIX] Append server URL on avatar if necessary (#1038)
* Comment removeClippedSubviews
* Comment width animation
* Remove redux from RoomItem
* Fix wrong re-render comparison
* Remove listener
* Raise minDeltaX
* memo actions
* Spring with native driver
* Refactor functions
* Fix props issues
* Remove RoomItem.height
* Long swipe
* Refactor animations
* this.rowTranslation -> this.transX
* Moved state to this
* Bump version to 1.16.1 (#1045)
* [FIX] Set UserDefaults AppGroup on notification tap (#1047)
* [FIX] Auto-translate messages as they arrive
* Fix favorite button
* [RELEASE] Merge beta into master (#1082)
* Bump version to 1.16.0 (#1014)
* [IMPROVEMENT] Share credentials with Rocket.Chat.iOS (#982)
* ✨ Create user table
* ✨ Introduce user table
* 🔥 Remove unused table
* ➕ Add userdefaults to storage data
* 💚 Fix android build
* ✨ Get credentials from iOS native client
* 🔥 Remove unused code
* ⏪ Revert sign xcode
* 🐛 Fix first login-logout
* 🎨 Use constants to UserDefaults Keys
* 🐛 Fix clear server-user-info on logout
* 🐛 Fix filter null value
* 🚑 Remove user object in logout
* ✨ Fix get servers from native-client
* 🚑 Fix error on change server
* [FIX] Don't run UserDefaults credentials on Android (#1015)
* 🐛 Fix native credentials (android)
* Fix migration loop
* [IMPROVEMENT] Hide frequently used emoji tab when empty (#792)
* [IMPROVEMENT] Bigger emoji in emoji only messages (#793)
* issue #725: bigger emoji in emoji only message
* issue-725/add storybook for Message/Emoji
* issue-725: update storybook/Message jest snapshot
* comment storybook import
* allow spaces and line breaks in emoji only message
* merge develop
* revert unnecessary spacing
* [FIX] Empty message if contains only a link (#787)
* Fix empty message if contains only a link
* 🐛 Fix empty space
* [IMPROVEMENT] Refactor empty space regex on quote (#1017)
* 🎨 Improve regex to empty space on quote
* 🎨 Improve on regex to empty space on quote
* [NEW] Custom fields on signup (#1013)
* added custom feilds on registration
* added flag as leftIcon and removed lable
* added try and catch
* typo
* [CHORE] Renew provisioning profiles (#1020)
* [NEW] Auto-translate (#1012)
* Update realm
* View original and translate working
* Read AutoTranslate_Enabled setting
* RocketChat.canAutoTranslate()
* AutoTranslateView
* Save language
* Auto-translate switch
* Translate message
* [IMPROVEMENT] Use haptics rather than vibration (#1016)
* Install expo-haptics
* Use expo-haptics rather than RN's Vibration module
* [IMPROVEMENT] Use Rest API for file upload (#1005)
* removed rn-fetch-blob and use native XMLHttpRequest instead
* removed unnessary changes
* fix android bug
* fix android bug
* added tmid support
* fix bug
* fixed isssue with cacel model
* fix problems with audio
* done requested changes
* fix bug with android
* [CHORE] [CI] [TESTS] update detox to make ci pass (#1026)
* feat: update detox to 12.11.3 to make CI pass
* ci: comment all jobs but leave e2e-test job
* commit to rerun IC e2e-test job
* ci: uncomment all CI jobs
* [NEW] Room swipe actions: mark as read/unread, hide, fav (#976)
* added unread and fav feature
* changed the layout
* fix jest
* done requested changes
* added requested changes
* [FIX] Android build (#1027)
* [FIX] Android build
* CircleCI error
* [FIX] iOS share credentials build (#1028)
* [FIX] iOS share credentials build
* Use `hasMigration` as a string
* [CI] Restore cache on CI (#1029)
* feat: add fastlane save\restore cache config; comment not needed jobs;
* install fastlane using 'bundle install'
* install fastlane using 'sudo bundle install'
* uncomment ios build commands
* run set up google services in ios folder
* add working_directory: ios to ios-build steps
* remove 'cd ios' from Fastlane build step
* add save\restore cache for npm modules
* group save_cache steps
* cache fastlane in ios-testflight job
* uncomment previously commented jobs\steps
* fix: add missing colon
* use key for caching: node-modules-{{ checksum ".circleci/config.yml" }}-{{ checksum "yarn.lock" }}
* add names for save\restore steps
* ci: add `default` step with `working_directory: ~/repo` to ios-build job
* return back caching npm: `node-v1-{{ checksum "package.json" }}-{{ arch }}`
* fix: add missing curly braces
* save\restore cache in e2e-test job; remove {{arch}} from cache names
* add names to restore_cache steps in android-build job
* add names to save_cache steps in android-build job
* add names to all save\restore steps; change checksum package.json to yarn.lock
* change `npm` to `NPM` in steps naming
* remove {{ checksum circle ci }} from android-build job and fix naming of steps
* [FIX] Rooms swipes (#1034)
* Regression: on press style feedback
* Action button styles
* Fix animations
* Styles changed
* Update subscription without having to wait for socket
* Calculate width on RoomsListView instead
* [FIX] Decrease bigger emoji size to 30 (#1031)
* [FIX] Append server URL on avatar if necessary (#1038)
* Comment removeClippedSubviews
* Comment width animation
* Remove redux from RoomItem
* Fix wrong re-render comparison
* Remove listener
* Raise minDeltaX
* memo actions
* Spring with native driver
* Refactor functions
* Fix props issues
* Remove RoomItem.height
* Long swipe
* Refactor animations
* this.rowTranslation -> this.transX
* Moved state to this
* Bump version to 1.16.1 (#1045)
* [FIX] Set UserDefaults AppGroup on notification tap (#1047)
* [FIX] Auto-translate messages as they arrive
* Fix favorite button
* [FIX] Swipe animations (#1044)
* Comment removeClippedSubviews
* Comment width animation
* Remove redux from RoomItem
* Fix wrong re-render comparison
* Remove listener
* Raise minDeltaX
* memo actions
* Spring with native driver
* Refactor functions
* Fix props issues
* Remove RoomItem.height
* Long swipe
* Refactor animations
* this.rowTranslation -> this.transX
* Moved state to this
* Fix favorite button
* [FIX] Auto-translate messages as they arrive (#1049)
* Comment removeClippedSubviews
* Comment width animation
* Remove redux from RoomItem
* Fix wrong re-render comparison
* Remove listener
* Raise minDeltaX
* memo actions
* Spring with native driver
* Refactor functions
* Fix props issues
* Remove RoomItem.height
* Long swipe
* Refactor animations
* this.rowTranslation -> this.transX
* Moved state to this
* [FIX] Auto-translate messages as they arrive
* [i18n] Add missing de translations (#1040)
* [CHORE] Switch to react-native-localize (#1043)
* Bump version to 1.17.0 (#1057)
* Load views as needed (#1056)
* [IMPROVEMENT] Change "resend" icon position (#1048)
* [NEW] Video support (#801)
* [NEW] File upload (#882)
* [NEW] Share extension (#942)
* [FIX] Share extension CI build (#1060)
* Change bundleID
* Provisioning
* get provisioning profile
* [IMPROVEMENT] Reusable toast (#1065)
* [FIX] Moment locales (#1066)
* [FIX] Share Extension issues (#1064)
* [FIX] Empty white list enables all media types upload (#1077)
* Merge branch 'master' into develop (#1079)
* [FIX] Empty white list enables all media types upload (#1080)
* Create utils to media (canUpload)
* Fix variable name
* [CHORE] Update README (#1081)
* [RELEASE] Merge beta into master (#1088)
* Bump version to 1.16.0 (#1014)
* [IMPROVEMENT] Share credentials with Rocket.Chat.iOS (#982)
* ✨ Create user table
* ✨ Introduce user table
* 🔥 Remove unused table
* ➕ Add userdefaults to storage data
* 💚 Fix android build
* ✨ Get credentials from iOS native client
* 🔥 Remove unused code
* ⏪ Revert sign xcode
* 🐛 Fix first login-logout
* 🎨 Use constants to UserDefaults Keys
* 🐛 Fix clear server-user-info on logout
* 🐛 Fix filter null value
* 🚑 Remove user object in logout
* ✨ Fix get servers from native-client
* 🚑 Fix error on change server
* [FIX] Don't run UserDefaults credentials on Android (#1015)
* 🐛 Fix native credentials (android)
* Fix migration loop
* [IMPROVEMENT] Hide frequently used emoji tab when empty (#792)
* [IMPROVEMENT] Bigger emoji in emoji only messages (#793)
* issue #725: bigger emoji in emoji only message
* issue-725/add storybook for Message/Emoji
* issue-725: update storybook/Message jest snapshot
* comment storybook import
* allow spaces and line breaks in emoji only message
* merge develop
* revert unnecessary spacing
* [FIX] Empty message if contains only a link (#787)
* Fix empty message if contains only a link
* 🐛 Fix empty space
* [IMPROVEMENT] Refactor empty space regex on quote (#1017)
* 🎨 Improve regex to empty space on quote
* 🎨 Improve on regex to empty space on quote
* [NEW] Custom fields on signup (#1013)
* added custom feilds on registration
* added flag as leftIcon and removed lable
* added try and catch
* typo
* [CHORE] Renew provisioning profiles (#1020)
* [NEW] Auto-translate (#1012)
* Update realm
* View original and translate working
* Read AutoTranslate_Enabled setting
* RocketChat.canAutoTranslate()
* AutoTranslateView
* Save language
* Auto-translate switch
* Translate message
* [IMPROVEMENT] Use haptics rather than vibration (#1016)
* Install expo-haptics
* Use expo-haptics rather than RN's Vibration module
* [IMPROVEMENT] Use Rest API for file upload (#1005)
* removed rn-fetch-blob and use native XMLHttpRequest instead
* removed unnessary changes
* fix android bug
* fix android bug
* added tmid support
* fix bug
* fixed isssue with cacel model
* fix problems with audio
* done requested changes
* fix bug with android
* [CHORE] [CI] [TESTS] update detox to make ci pass (#1026)
* feat: update detox to 12.11.3 to make CI pass
* ci: comment all jobs but leave e2e-test job
* commit to rerun IC e2e-test job
* ci: uncomment all CI jobs
* [NEW] Room swipe actions: mark as read/unread, hide, fav (#976)
* added unread and fav feature
* changed the layout
* fix jest
* done requested changes
* added requested changes
* [FIX] Android build (#1027)
* [FIX] Android build
* CircleCI error
* [FIX] iOS share credentials build (#1028)
* [FIX] iOS share credentials build
* Use `hasMigration` as a string
* [CI] Restore cache on CI (#1029)
* feat: add fastlane save\restore cache config; comment not needed jobs;
* install fastlane using 'bundle install'
* install fastlane using 'sudo bundle install'
* uncomment ios build commands
* run set up google services in ios folder
* add working_directory: ios to ios-build steps
* remove 'cd ios' from Fastlane build step
* add save\restore cache for npm modules
* group save_cache steps
* cache fastlane in ios-testflight job
* uncomment previously commented jobs\steps
* fix: add missing colon
* use key for caching: node-modules-{{ checksum ".circleci/config.yml" }}-{{ checksum "yarn.lock" }}
* add names for save\restore steps
* ci: add `default` step with `working_directory: ~/repo` to ios-build job
* return back caching npm: `node-v1-{{ checksum "package.json" }}-{{ arch }}`
* fix: add missing curly braces
* save\restore cache in e2e-test job; remove {{arch}} from cache names
* add names to restore_cache steps in android-build job
* add names to save_cache steps in android-build job
* add names to all save\restore steps; change checksum package.json to yarn.lock
* change `npm` to `NPM` in steps naming
* remove {{ checksum circle ci }} from android-build job and fix naming of steps
* [FIX] Rooms swipes (#1034)
* Regression: on press style feedback
* Action button styles
* Fix animations
* Styles changed
* Update subscription without having to wait for socket
* Calculate width on RoomsListView instead
* [FIX] Decrease bigger emoji size to 30 (#1031)
* [FIX] Append server URL on avatar if necessary (#1038)
* Comment removeClippedSubviews
* Comment width animation
* Remove redux from RoomItem
* Fix wrong re-render comparison
* Remove listener
* Raise minDeltaX
* memo actions
* Spring with native driver
* Refactor functions
* Fix props issues
* Remove RoomItem.height
* Long swipe
* Refactor animations
* this.rowTranslation -> this.transX
* Moved state to this
* Bump version to 1.16.1 (#1045)
* [FIX] Set UserDefaults AppGroup on notification tap (#1047)
* [FIX] Auto-translate messages as they arrive
* Fix favorite button
* [FIX] Swipe animations (#1044)
* Comment removeClippedSubviews
* Comment width animation
* Remove redux from RoomItem
* Fix wrong re-render comparison
* Remove listener
* Raise minDeltaX
* memo actions
* Spring with native driver
* Refactor functions
* Fix props issues
* Remove RoomItem.height
* Long swipe
* Refactor animations
* this.rowTranslation -> this.transX
* Moved state to this
* Fix favorite button
* [FIX] Auto-translate messages as they arrive (#1049)
* Comment removeClippedSubviews
* Comment width animation
* Remove redux from RoomItem
* Fix wrong re-render comparison
* Remove listener
* Raise minDeltaX
* memo actions
* Spring with native driver
* Refactor functions
* Fix props issues
* Remove RoomItem.height
* Long swipe
* Refactor animations
* this.rowTranslation -> this.transX
* Moved state to this
* [FIX] Auto-translate messages as they arrive
* [i18n] Add missing de translations (#1040)
* [CHORE] Switch to react-native-localize (#1043)
* Bump version to 1.17.0 (#1057)
* Load views as needed (#1056)
* [IMPROVEMENT] Change "resend" icon position (#1048)
* [NEW] Video support (#801)
* [NEW] File upload (#882)
* [NEW] Share extension (#942)
* [FIX] Share extension CI build (#1060)
* Change bundleID
* Provisioning
* get provisioning profile
* [IMPROVEMENT] Reusable toast (#1065)
* [FIX] Moment locales (#1066)
* [FIX] Share Extension issues (#1064)
* [FIX] Empty white list enables all media types upload (#1077)
* Merge branch 'master' into develop (#1079)
* [FIX] Empty white list enables all media types upload (#1080)
* Create utils to media (canUpload)
* Fix variable name
* [CHORE] Update README (#1081)
* [FIX] Media share type (#1086)
* [RELEASE] Merge beta into master (#1142)
* [RELEASE] Merge beta into master (#1174)
* [RELEASE] Merge beta into master (#1282)
* Merge beta into master (#1461)
* Merge beta into master (#1637)
* Merge beta into master (#1759)
* Merge beta into master (#1897)
* [FIX] Close SortDropdown on sort select (#1230)
* [FIX] Cancel upload and check failed upload (#1232)
* [FIX] Slash commands not cleaning is typing and not using state (#1233)
* [FIX] Dispatch roomsRequest on app foreground event even if not connected (#1234)
* [CHORE] Update react-native-jitsi-meet (#1235)
* [FIX] Regex on run slash command (#1223)
* Update React Native to 0.61.1 (#1236)
* Update React Native to 0.61.1
* Update patch to SSL Pinning
* Revert storybook
* [CHORE] Update react-native-safe-area-view (#1219)
* [FIX] Try/catch JSON.parse XHR response (#1238)
* [FIX] Change messagebox icon immediate on change text (#1241)
* [FIX] Update last open on message stream received (#1240)
* [FIX] Remove animation from RoomsListView.willFocus (#1239)
* [FIX] Delete message on thread (#1214)
* [REGRESSION] Markdown text (#1242)
* [FIX] Jest (#1243)
* [FIX] Avatar shown when useRealName is activated (#1162)
* Fix avatar when use real name
* Wrong indentation
* [DOCS] Add SECURITY.md (#1244)
* [CHORE] Update react-native-reanimated to 1.3.0 (#1246)
* [FIX] Run credentials migration only once (#1245)
* [CHORE] Update react-native-jitsi-meet to 2.0.1 (#1249)
* [FIX] Messagebox onChangeText issues (#1252)
* Stop ongoing debounces on messagebox unmount
* Immediately change send icon, but keep debouncing others
* Make CustomEmoji stateless function
* Fix mentions keyExtractor
* [FIX] Room subscription issues (#1255)
* [FIX] Reaction press (#1258)
* [FIX] Channel avatars not showing after application unloads (#1264)
* Revert react-native-safe-area-view (#1265)
* [FIX] Remove console on production mode (#1268)
* [FIX] Messages preview issues (#1257)
* [FIX] Select user from native credentials (#1266)
* [FIX] Some issues on preview message (#1271)
* [FIX] Audio player track and thumb not rendering on Android (#1273)
* [FIX] Record audio message throws exception when FileSystem.getInfoAsync is called (#1272)
* [FIX] China shouldn't use CallKit (#1274)
* [FIX] Watermelon batches (#1277)
* Bump version to 1.20.1 (#1285)
* [CHORE] Remove memoize-one (#1284)
* [FIX] End Jitsi call on unmount (#1291)
* [FIX] Allow self-signed certificates (#1310)
* [FIX] Set User-Agent (#1318)
* Set User-Agent Fetch & Websocket & XHR
* Set User-Agent
* Custom User Agent on fetch/websocket
* Fix names
* Use DeviceInfo
* fix server with subpath (#1322)
* [FIX] Server with https:\\ instead of https:// (#1320)
* [FIX] Server dropdown not closing after changing stack (#1299)
* [FIX] Invalid server version (#1319)
* [IMPROVEMENT] Respect "Hide counter" preference (#1306)
* [FIX] Pass isFocused as a function to Messagebox (#1309)
* [CHORE] Remove icons folder (#1290)
* [CHORE] Refactor RoomItem touchable (#1331)
* [FIX] Unnecessary rerender on RoomItem when status is undefined (#1336)
* [UPDATE DEPS] react-navigation and react-navigation-stack (#1337)
* [FIX] Avatars not loading on share extension when Accounts_AvatarBlockUnauthenticatedAccess is enabled (#1339)
* Bump version to 1.20.2 (#1340)
* [FIX] Remove some unnecessary re-renders on Messagebox (#1341)
* [REGRESSION] Use LayoutAnimation instead of Transition API (#1338)
* [FIX] Remove setState from notifications view causing watermelon object to be updated outside an action (#1342)
* [IMPROVEMENT] Save last message as message when subscription is updated (#1344)
* [UPDATE DEPS] Update RN to 0.61.3 (#1345)
* [DOCS] Update Readme (#1346)
* [CHORE] Remove react-native-scrollable-tab-view fork (#1352)
* [FIX] URL preview (#1360)
* [REGRESSION] Decrease list view memory size (#1361)
* [FIX] Paste (#1350)
* [CHORE] Update gems (#1365)
* Bump version to 1.20.3 (#1366)
* [FIX] Use Ruby 2.4 on TestFlight upload (#1368)
* [FIX] Parse Urls (#1371)
* [FIX] Parse image URL only if it's not empty (#1372)
* [FIX] Load messages issues (#1373)
* Bump version to 1.21.0 (#1376)
* [FIX] Crowd login (#1381)
* [FIX] Clicking user avatar in thread previews crashes app (#1363)
* [IMPROVEMENT] Error messages on connect (#1379)
* [FIX] ProfileView input navigation error when custom fields aren't set (#1383)
* [FIX] Batch server deletion on logout (#1382)
* Bump app to 1.22.0 (#1387)
* [FIX] Server Version (#1392)
* Update patch and minor deps (#1386)
* [FIX] Crash when open thread (#1395)
* Bump version to 1.23.0 (#1394)
* [I18N] Update ru.js (#1384)
* [FIX] CAS building wrong URL (#1362)
* [FIX] Delete messages (#1399)
* [FIX] In-app notification showing wrong content on channels (#1400)
* Bump version to 1.24.0 (#1404)
* [FIX] Prevent server with whitespace (#1402)
* [IMPROVEMENT] Keyboard and content type on login (#1403)
* [FIX] Messages stop loading (#1410)
* [NEW] Tablet support (#1300)
* [IMPROVEMENT] Authentication via deep linking (#1418)
* [IMPROVEMENT] Markdown performance when identifying emoji only content (#1422)
* [FIX] BackHandler remove random failing on development (#1423)
* Bump version to 1.25.0 (#1424)
* [CHORE] Update CI Xcode Image (#1430)
* [FIX] Rooms grouping not working properly (#1435)
* [FIX] Take a video (#1437)
* [NEW] Themes (#1298)
* [FIX] Share extension doesn't reconnect to previous selected server on Android (#1429)
* [FIX] Init local settings on notification tap (#1438)
* Bump version to 1.26.0 (#1450)
* [FIX] Emoji parser not working on Hermes (#1445)
* [NEW] Enable Hermes (#1446)
* [FIX] Automatic theme repeating (#1457)
* [CHORE] Sync Experimental and Official app versions (#1458)
* [DOCS] Update readme (#1459)
* [FIX] Messages being sent but showing as temp status (#1469)
* [FIX] Missing messages after reconnect (#1470)
* [FIX] Few fixes on themes (#1477)
* [I18N] Missing German translations (#1465)
* Missing German translation
* adding a missing space behind colon
* added a missing space after colon
* and another attempt to finally fix this – got confused by all the branches
* some smaller fixes for the translation
* better wording
* fixed another typo
* [FIX] Crash while displaying the attached image with http on file name (#1401)
* [IMPROVEMENT] Tap app and server version to copy to clipboard (#1425)
* [NEW] Reply notification (#1448)
* [FIX] Incorrect background color login on iPad (#1480)
* [FIX] Prevent multiple tap on send (Share Extension) (#1481)
* [NEW] Image Viewer (#1479)
* [DOCS] Update Readme (#1485)
* [FIX] Jitsi with Hermes Enabled (#1523)
* [FIX] Draft messages not working with themed Messagebox (#1525)
* [FIX] Go to direct message from members list (#1519)
* [FIX] Make SAML wait for idp token instead of creating it on client (#1527)
* [FIX] Server Test Push Notification (#1508)
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [CHORE] Update to new server response (#1509)
* [FIX] Insert messages with blank users (#1529)
* Bump version to 4.2.1 (#1530)
* [FIX] Error when normalizing empty messages (#1532)
* [REGRESSION] CAS (#1570)
* Bump version to 4.2.2 (#1571)
* [FIX] Add username block condition to prevent error (#1585)
* Bump version to 4.2.3
* Bump version to 4.2.4
* Bump version to 4.3.0 (#1630)
* [FIX] Channels doesn't load (#1586)
* [FIX] Channels doesn't load
* [FIX] Update roomsUpdatedAt when subscriptions.length is 0
* [FIX] Remove unnecessary changes
* [FIX] Improve the code
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [FIX] Make SAML to work on Rocket.Chat < 2.3.0 (#1629)
* [NEW] Invite links (#1534)
* [FIX] Set the http-agent to the form that Rocket.Chat requires for logging (#1482)
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [FIX] "Following thread" and "Unfollowed Thread" is hardcoded and not translated (#1625)
* [FIX] Disable reset button if form didn't changed (#1569)
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [FIX] Header title of RoomInfoView (#1553)
* [I18N] Gallery Permissions DE (#1542)
* [FIX] Not allow to send messages to archived room (#1623)
* [FIX] Profile fields automatically reset (#1502)
* [FIX] Show attachment on ThreadMessagesView (#1493)
* [NEW] Wordpress auth (#1633)
* [CHORE] Add Start Packager script (#1639)
* [CHORE] Update RN to 0.61.5 (#1638)
* [CHORE] Update RN to 0.61.5
* [CHORE] Update react-native patch
Co-authored-by: Djorkaeff Alexandre <djorkaeff.unb@gmail.com>
* Bump version to 4.3.1 (#1641)
* [FIX] Change force logout rule (#1640)
* Bump version to 4.4.0 (#1643)
* [IMPROVEMENT] Use MessagingStyle on Android Notification (#1575)
* [NEW] Request review (#1627)
* [NEW] Pull to refresh RoomView (#1657)
* [FIX] Unsubscribe from room (#1655)
* [FIX] Server with subdirs (#1646)
* [NEW] Clear cache (#1660)
* [IMPROVEMENT] Memoize and batch subscriptions updates (#1642)
* [FIX] Disallow empty sharing (#1664)
* [REGRESSION] Use HTTPS links for sharing and markets protocol for review (#1663)
* [FIX] In some cases, share extension doesn't load images (#1649)
* [i18n] DE translations for new invite function and some minor fixes (#1631)
* [FIX] Remove duplicate jetify step (#1628)
minor: also remove 'cd' calls
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [REGRESSION] Read messages (#1666)
* [i18n] German translations missing (#1670)
* [FIX] Notifications crash on older Android Versions (#1672)
* [i18n] Added Dutch translation (#1676)
* [NEW] Omnichannel Beta (#1674)
* [NEW] Confirm logout/clear cache (#1688)
* [I18N] Add es-ES language (#1495)
* [NEW] UiKit Beta (#1497)
* [IMPROVEMENT] Use reselect (#1696)
* [FIX] Notification in Android API level less than 24 (#1692)
* [IMPROVEMENT] Send tmid on slash commands and media (#1698)
* [FIX] Unhandled action on UIKit (#1703)
* [NEW] Pull to refresh RoomsList (#1701)
* [IMPROVEMENT] Reset app when language is changed (#1702)
* [FIX] Small fixes on UIKit (#1709)
* [FIX] Spotlight (#1719)
* [CHORE] Update react-native-image-crop-picker (#1712)
* [FIX] Messages Overlapping (Android) and MessageBox Scroll (iOS) (#1720)
* [REGRESSION] Remove @ and # from mention (#1721)
* [NEW] Direct message from user info (#1516)
* [FIX] Delete slash commands (#1723)
* [IMPROVEMENT] Hold URL to copy (#1684)
* [FIX] Different sourcemaps generation for Hermes (#1724)
* [FIX] Different sourcemaps generation for Hermes
* Upload sourcemaps after build
* [REVERT] Show emoji keyboard on Android (#1738)
* [FIX] Stop logging react-native-image-crop-picker (#1745)
* [FIX] Prevent toast ref error (#1744)
* [FIX] Prevent reaction map error (#1743)
* [FIX] Add missing calls to user info (#1741)
* [FIX] Catch room unsubscribe error (#1739)
* [i18n] Missing German keys (#1735)
* [FIX] Missing i18n on MessagesView title (#1733)
* [FIX] UIKit Modal: Weird behavior on Android Tablet (#1742)
* [i18n] Missing key on German (#1747)
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [i18n] Add Italian (#1736)
…
* [FIX] Notification stream throwing an error when there isn't a message on payload (#2637)
* [FIX] Threads not being updated and other related issues (#2636)
* Fix parent title on thread header breaking lines
* Fix https://github.com/RocketChat/Rocket.Chat.ReactNative/issues/2519
* Fix thread badge not being updated
* [FIX] Minor room header issues (#2630)
* Add hitSlop to RoomView header
* Use 1 icon padding for threads header
Co-authored-by: Djorkaeff Alexandre <djorkaeff.unb@gmail.com>
* [FIX] Whitelabel unable to find package name (#2626)
* Fixes #2625
* Fixes #2614
* Apply resValue on defaultConfig and undo unnecessary changes
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [i18n] Add missing German strings (#2619)
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [FIX] Model columns misplaced (#2640)
* [FIX] Connect a null server (#2639)
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [FIX] Jitsi users unable to unmute (#2623)
* [FIX] Jitsi users being muted always
* fix: bundle is invalid
* Update jitsi meet sdk with ui improvements
* Update JitsiMeetSDK ios
* Centralize toolbox android
* Fix images on Jitsi
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* Bump version to 4.12.1 (#2641)
* [FIX] Share extension and save image not working on Android 10 (#2651)
* Bump version to 4.13.0 (#2657)
* [FIX] Update Loading logo (#2658)
* [NEW] Support client certificates for SSL (two-way authentication) (Android) (#2624)
* wip: Android SSL Pinning
* Use own SSLPinningModule
* wip: Use Rocket.Chat own react-native
* wip: Fresco Images using custom OkHttpClient
* wip: react-native-webview onReceivedClientCertRequest
* feat: Save Images of a SSL Pinning protected server
* chore: SSLPinning package as a interface to iOS & Android implementations
* chore: update glide
* feat: load images under a client ssl certificate protected server
* chore: remove patch
* feat: Audio & Video under a SSL Client protected server
* fix: Unpin certificate when change server
* feat: Fast Image as a patch
* chore: update fast-image
* Fix merge
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [NEW] Channel actions (#2644)
* room roles
* handle owner
* endpoints
* Leader and Moderator
* Remove user from room
* stash ignore
* Add subscription.ignored column
* ignore user
* Fix icons
* I18n
* Minor i18n fixes
* Direct Message and open action sheet after a normal tap
* Fix icon
* stash isIgnored
* isManualUnignored message
* Fix update
* Ignored
* Mute, moderator, leader, owner, remove from room
* ignore
* Tests
* pt-BR
* Update pods
* Apply requested changes
* Add RC version on requests
* [NEW] Support RTL (#2656)
* wip: RTL (iOS)
* wip: RTL (Android)
* wip: reload bundle when change between RTL languages
* fix: Stack Animation on Android
* fix: update snapshot
* fix: Swipe Room Actions in RTL mode
* fix: snapshots
* Move isRTL to i18n
* Fix styling
* Update tests
* Update pods
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [FIX] Initial users' status is not fetched (#2664)
* [FIX] Messages overlapping and emoji keyboard not opening (#2670)
* Replace keyboard libs for react-native-ui-lib
* Apply Jitsi branch
* Require keyboard on bundle
* Update ui-lib
* chore: update deps
Co-authored-by: Djorkaeff Alexandre <djorkaeff.unb@gmail.com>
* [CHORE] Force normalized params for 2FA (#2683)
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [FIX] Thread message flickering while thread parent isn't found (#2676)
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [FIX] Light theme not working on Android with Dark Theme set (#2675)
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [FIX] App not prompting join code for password protected channels (#2514)
* Adding joinCode parameter
Co-authored-by: Vitor Leal <vitor_leal2201@hotmail.com>
Co-authored-by: Fernando Aguilar <fernando.aguilar@hotmail.com.br>
* Insert join code input
Signed-off-by: Vitor.Leal <vitor_leal2201@hotmail.com>
* Add joinCode field on db
Signed-off-by: Vitor.Leal <vitor_leal2201@hotmail.com>
* Add label i18 pt-br and en-us
Signed-off-by: Vitor.Leal <vitor_leal2201@hotmail.com>
* Add insert join code text
Signed-off-by: Vitor.Leal <vitor_leal2201@hotmail.com>
* Fix atribute name
Signed-off-by: Vitor.Leal <vitor_leal2201@hotmail.com>
* Add join text
Signed-off-by: Vitor.Leal <vitor_leal2201@hotmail.com>
Co-authored-by: Daniel Maike <danmke@hotmail.com>
Co-authored-by: Fernando Aguilar <fernando.aguilar@hotmail.com.br>
* Fix attributes joinCode, joinCodeRequired and pass attribute param in navigation
Signed-off-by: Daniel Maike <danmke@hotmail.com>
Co-authored-by: Vitor Leal <vitor_leal2201@hotmail.com>
* Fixing attribute joinCodeRequired pass to goRoom
Signed-off-by: Daniel Maike <danmke@hotmail.com>
* Changed textinput style
Signed-off-by: Daniel Maike <danmke@hotmail.com>
Co-authored-by: Vitor Leal <vitor_leal2201@hotmail.com>
* Delete not necessary attribute
Signed-off-by: Daniel Maike <danmke@hotmail.com>
* Fixing input style
Co-authored-by: Vitor Leal <vitor_leal2201@hotmail.com>
* Undo unncessary changes
* use a join code modal
* tests: e2e tests to join protected channel
* fix: undo unnecessary change
* tests: cancel join code
* Remove some tests
* Minor fixes
Co-authored-by: Vitor Leal <vitor_leal2201@hotmail.com>
Co-authored-by: Fernando Aguilar <fernando.aguilar@hotmail.com.br>
Co-authored-by: Djorkaeff Alexandre <djorkaeff.unb@gmail.com>
Co-authored-by: youssef-md <emaildeyoussefmuhamad@gmail.com>
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [I18n] Add Arabic (#2537)
* Arabic language setup
* Added arabic translation
* Arabic translation Proofreading
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [I18N] Add missing zh_TW and zh_CN strings (#2680)
* feat(i18n): add some missing strings and improve some translation
* fix: add missing server version
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [IMPROVEMENT] Add username on status messages (#2553)
* 1689 - missing user name for status messages
* 1689 - missing user name for status messages. Fixed broken e2e test "should pin message".
* Minor tweak
* Remove center style
* Small refactor on User
* Remove toLowerCase
* Update tests
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [FIX] Filenames are incorrect in non-latin alphabets on upload (#2671)
* fix: filename on react-native-image-crop-picker
* fix: use rn-fetch-blob to upload files
* fix: FileUpload as a service
* fix: cancel upload on iOS
* fix: file upload from share extension
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [IMPROVEMENT] Ease white labelling for Android (#2685)
* improve white labelling for Android
* Move application ID to gradle properties
* Fix CI
* Point foss sufix to main app
* Use npx on android-whitelabel script
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [FIX] Chats order (#2688)
* Persist highest value on subscription.roomUpdatedAt
* Update tests
Co-authored-by: Djorkaeff Alexandre <djorkaeff.unb@gmail.com>
* [REGRESSION] Re-enable Jitsi Chat (#2687)
* Fix main jitsi
* Fix iOS
* Clear build.gradle cache
* Don't restore gradle
* cache is back
* Use master
* Point to react-native-jitsi-meet#master
* [CHORE] Build official apps on CI (#2701)
* Duplicated target and changed Bridging Header
* Display name
* Unnecessary dumb swift file removed
* Buildable name
* Reorder Info.plist
* Rename Official target's bundle id
* Ignore .mobileprovision
* Fix provisioning of official app
* Starting signing
* stash fastfile
* starting official ci iOS
* Uncomment Fastfile keychain
* Fix CI config
* allowProvisioningUpdates
* Changing AppIcon and Splash Screen
* Remove unnecessary folder inside of Images.xcassets
* Reorder notificationservice and shareextension plists
* Fix signing
* Manual signing style for official
* Split official signing
* Update project provisioning
* Use ENV as profile
* Output match
* Keys
* TestFlight refactor
* Setting up android
* android-official-play-build job
* Start removing unnecessary fastlane tasks on Android
* Trying to refactor Android jobs
* android-env
* Remove foss build for now
* Fork
* Fix if conditions
* Fix push
* ios-build command
* Rename Android builds
* Upload dSYMs
* Refactoring workflow
* Reorder upload-to-testflight
* upload-to-google-play-beta command
* Fix ci
* Fix android fork build
* Fix keystore
* Fix options on fastlane android
* Fix keystore
* Check isOfficial on iOS
* Check isOfficial on db
* Remove unused imports
* Database names on Android
* Tag fix
* Minor fixes
* Set IS_OFFICIAL on CI
* Fix detox
* follow review suggestions
Co-authored-by: Djorkaeff Alexandre <djorkaeff.unb@gmail.com>
* [i18n] Update fr (#2697)
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [i18n] Update fr (#2705)
Typo
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [FIX] Empty space on Messagebox (#2704)
Co-authored-by: Diego Mello <diegolmello@gmail.com>
* [FIX] Yarn android scripts (#2716)
* [CHORE] Rename Experimental iOS lane (#2717)
* Move build_fork to the end
* Rename release to build_experimental
* [IMPROVEMENT] Use class variable instead of state for List's animated (#2718)
* [FIX] Bottom sheet being hidden sometimes (#2722)
* [IMPROVEMENT] Match background and text mention colors (#2723)
* [FIX] App freezing if Markdown preview contains sequential empty spaces (#2726)
* Remove sequential empty spaces from Markdown preview
* Use Markdown preview on RepliedThread
Co-authored-by: Djorkaeff Alexandre <djorkaeff.unb@gmail.com>
Co-authored-by: Govind Dixit <GOVINDDIXIT93@GMAIL.COM>
Co-authored-by: Ezequiel de Oliveira <ezequiel1de1oliveira@gmail.com>
Co-authored-by: Dan Caseley <dan@caseley.me.uk>
Co-authored-by: Youssef Muhamad <emaildeyoussefmuhamad@gmail.com>
Co-authored-by: Neil Agarwal <neil@neilagarwal.me>
Co-authored-by: Heng Sok <sokheng@idatahub.com>
Co-authored-by: Snyk bot <snyk-bot@snyk.io>
Co-authored-by: phriedrich <info@phriedrich.de>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Rohit Verma <44283521+refactor-droidyy@users.noreply.github.com>
Co-authored-by: Graham Smith <graham@wiseman-designs.com>
Co-authored-by: Gabriel Henriques <gabriel.henriques@rocket.chat>
Co-authored-by: Júlia Grala <30629556+juliagrala@users.noreply.github.com>
Co-authored-by: Guilherme Gazzo <guilhermegazzo@gmail.com>
Co-authored-by: Prateek Jain <44807945+Prateek93a@users.noreply.github.com>
Co-authored-by: Lucas Siqueira <lucassiqzro@gmail.com>
Co-authored-by: Calebe Rios <calebersmendes@gmail.com>
Co-authored-by: Pitstopper <18574776+Pitstopper@users.noreply.github.com>
Co-authored-by: Guilherme Siqueira <guilhersiqueira@gmail.com>
Co-authored-by: Prateek Jain <prateek93a@gmail.com>
Co-authored-by: devyaniChoubey <52153085+devyaniChoubey@users.noreply.github.com>
Co-authored-by: Bernard Seow <ssbing99@gmail.com>
Co-authored-by: Hiroki Ishiura <ishiura@ja2.so-net.ne.jp>
Co-authored-by: Exordian <jakob.englisch@gmail.com>
Co-authored-by: Daanchaam <daanhendriks97@gmail.com>
Co-authored-by: Iván Álvarez <ialvarezpereira@gmail.com>
Co-authored-by: Sarthak Pranesh <41206172+sarthakpranesh@users.noreply.github.com>
Co-authored-by: Michele Pellegrini <pellettiero@users.noreply.github.com>
Co-authored-by: Tanmoy Bhowmik <tanmoy.openroot@gmail.com>
Co-authored-by: Hibikine Kage <14365761+hibikine@users.noreply.github.com>
Co-authored-by: Zhaubassarova Aruzhan <49000079+azhaubassar@users.noreply.github.com>
Co-authored-by: Aroo <azhaubassar@gmail.com>
Co-authored-by: Sarthak Pranesh <sarthak.pranesh2018@vitstudent.ac.in>
Co-authored-by: Siddharth Padhi <padhisiddharth31@gmail.com>
Co-authored-by: Bruno Dantas <oliveiradantas96@gmail.com>
Co-authored-by: devyaniChoubey <devyanichoubey16@gmail.com>
Co-authored-by: nixxou <45721836+nixxou@users.noreply.github.com>
Co-authored-by: David-Tsui <st880221@gmail.com>
Co-authored-by: Vincenzo Esposito <aenon.esposito@gmail.com>
Co-authored-by: Rishabh Gupta <38923768+imrishabh18@users.noreply.github.com>
Co-authored-by: Hendy Irawan <hendy@hendyirawan.com>
Co-authored-by: Alexandru Naiman <alex.naiman.4@gmail.com>
Co-authored-by: Dani <assgex@gmail.com>
Co-authored-by: Luis <ljcp28ljcp@gmail.com>
Co-authored-by: zaphod534 <32894570+zaphod534@users.noreply.github.com>
Co-authored-by: ankar84 <ankar84@gmail.com>
Co-authored-by: Карлан Антон Андреевич <KarlanAA@global.bcs>
Co-authored-by: Saket Mahajan <saketmahajan99@gmail.com>
Co-authored-by: Marco Jakobs <mj@jacotec.de>
Co-authored-by: Daniel Maike <danmke@hotmail.com>
Co-authored-by: Vitor Leal <vitor_leal2201@hotmail.com>
Co-authored-by: Fernando Aguilar <fernando.aguilar@hotmail.com.br>
Co-authored-by: Abdullah Alhamoud <10301923+abalhamoud@users.noreply.github.com>
Co-authored-by: Dave Koo <dkoo761@gmail.com>
Co-authored-by: Fazil Boudjelal <fazildiablou@hotmail.fr>
Co-authored-by: Lucas Dousse <Cormoran96@users.noreply.github.com>
|
@ -8,6 +8,11 @@ macos: &macos
|
|||
bash-env: &bash-env
|
||||
BASH_ENV: "~/.nvm/nvm.sh"
|
||||
|
||||
android-env: &android-env
|
||||
JAVA_OPTS: '-Xms512m -Xmx2g'
|
||||
GRADLE_OPTS: '-Xmx3g -Dorg.gradle.daemon=false -Dorg.gradle.jvmargs="-Xmx2g -XX:+HeapDumpOnOutOfMemoryError"'
|
||||
TERM: dumb
|
||||
|
||||
install-npm-modules: &install-npm-modules
|
||||
name: Install NPM modules
|
||||
command: yarn
|
||||
|
@ -75,6 +80,231 @@ restore_cache: &restore-gradle-cache
|
|||
name: Restore gradle cache
|
||||
key: android-{{ checksum "android/build.gradle" }}-{{ checksum "android/app/build.gradle" }}
|
||||
|
||||
# COMMANDS
|
||||
commands:
|
||||
|
||||
android-build:
|
||||
description: "Build Android app"
|
||||
steps:
|
||||
- checkout
|
||||
|
||||
- run: *install-node
|
||||
|
||||
- restore_cache: *restore-npm-cache-linux
|
||||
|
||||
- run: *install-npm-modules
|
||||
|
||||
- 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 "FLIPPER_VERSION=0.51.0" >> ./gradle.properties
|
||||
echo -e "VERSIONCODE=$CIRCLE_BUILD_NUM" >> ./gradle.properties
|
||||
|
||||
if [[ $CIRCLE_JOB == "android-build-official" ]]; then
|
||||
echo -e "APPLICATION_ID=chat.rocket.android" >> ./gradle.properties
|
||||
echo -e "BugsnagAPIKey=$BUGSNAG_KEY_OFFICIAL" >> ./gradle.properties
|
||||
echo $CHAT_ROCKET_ANDROID_STORE_FILE_BASE64_JKS | base64 --decode > ./app/$KEYSTORE_OFFICIAL
|
||||
echo -e "KEYSTORE=$KEYSTORE_OFFICIAL" >> ./gradle.properties
|
||||
echo -e "KEYSTORE_PASSWORD=$CHAT_ROCKET_ANDROID_STORE_PASSWORD" >> ./gradle.properties
|
||||
echo -e "KEY_ALIAS=$CHAT_ROCKET_ANDROID_KEY_ALIAS" >> ./gradle.properties
|
||||
echo -e "KEY_PASSWORD=$CHAT_ROCKET_ANDROID_KEY_PASSWORD" >> ./gradle.properties
|
||||
else
|
||||
echo -e "APPLICATION_ID=chat.rocket.reactnative" >> ./gradle.properties
|
||||
echo -e "BugsnagAPIKey=$BUGSNAG_KEY" >> ./gradle.properties
|
||||
echo $KEYSTORE_BASE64 | base64 --decode > ./app/$KEYSTORE
|
||||
echo -e "KEYSTORE=$KEYSTORE" >> ./gradle.properties
|
||||
echo -e "KEYSTORE_PASSWORD=$KEYSTORE_PASSWORD" >> ./gradle.properties
|
||||
echo -e "KEY_ALIAS=$KEY_ALIAS" >> ./gradle.properties
|
||||
echo -e "KEY_PASSWORD=$KEYSTORE_PASSWORD" >> ./gradle.properties
|
||||
fi
|
||||
working_directory: android
|
||||
|
||||
- run:
|
||||
name: Set Google Services
|
||||
command: |
|
||||
if [[ $KEYSTORE ]]; then
|
||||
echo $GOOGLE_SERVICES_ANDROID | base64 --decode > google-services.json
|
||||
fi
|
||||
working_directory: android/app
|
||||
|
||||
- run:
|
||||
name: Config variables
|
||||
command: |
|
||||
if [[ $CIRCLE_JOB == "android-build-official" ]]; then
|
||||
echo -e "export default { BUGSNAG_API_KEY: '$BUGSNAG_KEY_OFFICIAL' };" > ./config.js
|
||||
else
|
||||
echo -e "export default { BUGSNAG_API_KEY: '$BUGSNAG_KEY' };" > ./config.js
|
||||
fi
|
||||
|
||||
- run:
|
||||
name: Build App
|
||||
command: |
|
||||
if [[ $CIRCLE_JOB == "android-build-official" ]]; then
|
||||
./gradlew bundleOfficialPlayRelease
|
||||
fi
|
||||
if [[ $CIRCLE_JOB == "android-build-experimental" ]]; then
|
||||
./gradlew bundleExperimentalPlayRelease
|
||||
fi
|
||||
if [[ ! $KEYSTORE ]]; then
|
||||
./gradlew assembleExperimentalPlayDebug
|
||||
fi
|
||||
working_directory: android
|
||||
|
||||
- run:
|
||||
name: Upload sourcemaps to Bugsnag
|
||||
command: |
|
||||
if [[ $CIRCLE_JOB == "android-build-official" ]]; then
|
||||
yarn generate-source-maps-android upload \
|
||||
--api-key=$BUGSNAG_KEY_OFFICIAL \
|
||||
--app-version=$CIRCLE_BUILD_NUM \
|
||||
--minifiedFile=android/app/build/generated/assets/react/officialPlay/release/app.bundle \
|
||||
--source-map=android/app/build/generated/sourcemaps/react/officialPlay/release/app.bundle.map \
|
||||
--minified-url=app.bundle \
|
||||
--upload-sources
|
||||
fi
|
||||
if [[ $CIRCLE_JOB == "android-build-experimental" ]]; then
|
||||
yarn generate-source-maps-android upload \
|
||||
--api-key=$BUGSNAG_KEY \
|
||||
--app-version=$CIRCLE_BUILD_NUM \
|
||||
--minifiedFile=android/app/build/generated/assets/react/experimentalPlay/release/app.bundle \
|
||||
--source-map=android/app/build/generated/sourcemaps/react/experimentalPlay/release/app.bundle.map \
|
||||
--minified-url=app.bundle \
|
||||
--upload-sources
|
||||
fi
|
||||
|
||||
- store_artifacts:
|
||||
path: android/app/build/outputs
|
||||
|
||||
- save_cache: *save-npm-cache-linux
|
||||
|
||||
- save_cache: *save-gradle-cache
|
||||
|
||||
- persist_to_workspace:
|
||||
root: .
|
||||
paths:
|
||||
- android/app/build/outputs
|
||||
|
||||
ios-build:
|
||||
description: "Build iOS app"
|
||||
steps:
|
||||
- checkout
|
||||
- restore_cache: *restore-gems-cache
|
||||
- restore_cache: *restore-npm-cache-mac
|
||||
- run: *install-node
|
||||
- run: *install-npm-modules
|
||||
- run: *update-fastlane-ios
|
||||
- run:
|
||||
name: Set Google Services
|
||||
command: |
|
||||
if [[ $KEYSTORE ]]; then
|
||||
echo $GOOGLE_SERVICES_IOS | base64 --decode > GoogleService-Info.plist
|
||||
fi
|
||||
working_directory: ios
|
||||
- run:
|
||||
name: Upload sourcemaps to Bugsnag
|
||||
command: |
|
||||
if [[ $CIRCLE_JOB == "ios-build-official" ]]; then
|
||||
yarn generate-source-maps-ios
|
||||
curl https://upload.bugsnag.com/react-native-source-map \
|
||||
-F apiKey=$BUGSNAG_KEY_OFFICIAL \
|
||||
-F appBundleVersion=$CIRCLE_BUILD_NUM \
|
||||
-F dev=false \
|
||||
-F platform=ios \
|
||||
-F sourceMap=@ios-release.bundle.map \
|
||||
-F bundle=@ios-release.bundle
|
||||
fi
|
||||
if [[ $CIRCLE_JOB == "ios-build-experimental" ]]; then
|
||||
yarn generate-source-maps-ios
|
||||
curl https://upload.bugsnag.com/react-native-source-map \
|
||||
-F apiKey=$BUGSNAG_KEY \
|
||||
-F appBundleVersion=$CIRCLE_BUILD_NUM \
|
||||
-F dev=false \
|
||||
-F platform=ios \
|
||||
-F sourceMap=@ios-release.bundle.map \
|
||||
-F bundle=@ios-release.bundle
|
||||
fi
|
||||
- run:
|
||||
name: Fastlane Build
|
||||
no_output_timeout: 1200
|
||||
command: |
|
||||
agvtool new-version -all $CIRCLE_BUILD_NUM
|
||||
if [[ $CIRCLE_JOB == "ios-build-official" ]]; then
|
||||
/usr/libexec/PlistBuddy -c "Set BugsnagAPIKey $BUGSNAG_KEY_OFFICIAL" ./RocketChatRN/Info.plist
|
||||
/usr/libexec/PlistBuddy -c "Set IS_OFFICIAL YES" ./RocketChatRN/Info.plist
|
||||
else
|
||||
/usr/libexec/PlistBuddy -c "Set BugsnagAPIKey $BUGSNAG_KEY" ./RocketChatRN/Info.plist
|
||||
/usr/libexec/PlistBuddy -c "Set IS_OFFICIAL NO" ./RocketChatRN/Info.plist
|
||||
fi
|
||||
|
||||
if [[ $APP_STORE_CONNECT_API_KEY ]]; then
|
||||
echo $APP_STORE_CONNECT_API_KEY | base64 --decode > ./fastlane/app_store_connect_api_key.p8
|
||||
if [[ $CIRCLE_JOB == "ios-build-official" ]]; then
|
||||
bundle exec fastlane ios build_official
|
||||
else
|
||||
if [[ $KEYSTORE ]]; then
|
||||
bundle exec fastlane ios build_experimental
|
||||
else
|
||||
bundle exec fastlane ios build_fork
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
working_directory: ios
|
||||
- save_cache: *save-npm-cache-mac
|
||||
- save_cache: *save-gems-cache
|
||||
- store_artifacts:
|
||||
path: ios/Rocket.Chat.ipa
|
||||
- store_artifacts:
|
||||
path: ios/Rocket.Chat.app.dSYM.zip
|
||||
- persist_to_workspace:
|
||||
root: .
|
||||
paths:
|
||||
- ios/*.ipa
|
||||
- ios/*.zip
|
||||
|
||||
upload-to-google-play-beta:
|
||||
description: "Upload to Google Play beta"
|
||||
parameters:
|
||||
official:
|
||||
type: boolean
|
||||
steps:
|
||||
- checkout
|
||||
- attach_workspace:
|
||||
at: android
|
||||
- run:
|
||||
name: Store the google service account key
|
||||
command: echo "$FASTLANE_GOOGLE_SERVICE_ACCOUNT" | base64 --decode > service_account.json
|
||||
working_directory: android
|
||||
- run: *update-fastlane-android
|
||||
- run:
|
||||
name: Fastlane Play Store Upload
|
||||
command: bundle exec fastlane android beta official:<< parameters.official >>
|
||||
working_directory: android
|
||||
|
||||
upload-to-testflight:
|
||||
description: "Upload to TestFlight"
|
||||
parameters:
|
||||
official:
|
||||
type: boolean
|
||||
steps:
|
||||
- checkout
|
||||
- attach_workspace:
|
||||
at: ios
|
||||
- restore_cache: *restore-gems-cache
|
||||
- run: *update-fastlane-ios
|
||||
- run:
|
||||
name: Fastlane Tesflight Upload
|
||||
command: |
|
||||
echo $APP_STORE_CONNECT_API_KEY | base64 --decode > ./fastlane/app_store_connect_api_key.p8
|
||||
bundle exec fastlane ios beta official:<< parameters.official >>
|
||||
working_directory: ios
|
||||
- save_cache: *save-gems-cache
|
||||
|
||||
version: 2.1
|
||||
|
||||
# EXECUTORS
|
||||
|
@ -119,303 +349,124 @@ jobs:
|
|||
- save_cache: *save-npm-cache-linux
|
||||
|
||||
# Android builds
|
||||
android-play-build:
|
||||
android-build-experimental:
|
||||
<<: *defaults
|
||||
docker:
|
||||
- image: circleci/android:api-28-node
|
||||
|
||||
environment:
|
||||
JAVA_OPTS: '-Xms512m -Xmx2g'
|
||||
GRADLE_OPTS: '-Xmx3g -Dorg.gradle.daemon=false -Dorg.gradle.jvmargs="-Xmx2g -XX:+HeapDumpOnOutOfMemoryError"'
|
||||
TERM: dumb
|
||||
<<: *android-env
|
||||
<<: *bash-env
|
||||
|
||||
steps:
|
||||
- checkout
|
||||
- android-build
|
||||
|
||||
- run: *install-node
|
||||
|
||||
- restore_cache: *restore-npm-cache-linux
|
||||
|
||||
- run: *install-npm-modules
|
||||
|
||||
- run: *update-fastlane-android
|
||||
|
||||
- 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 "FLIPPER_VERSION=0.51.0" >> ./gradle.properties
|
||||
|
||||
if [[ $KEYSTORE ]]; then
|
||||
echo $KEYSTORE_BASE64 | base64 --decode > ./app/$KEYSTORE
|
||||
echo -e "KEYSTORE=$KEYSTORE" >> ./gradle.properties
|
||||
echo -e "KEYSTORE_PASSWORD=$KEYSTORE_PASSWORD" >> ./gradle.properties
|
||||
echo -e "KEY_ALIAS=$KEY_ALIAS" >> ./gradle.properties
|
||||
echo -e "KEY_PASSWORD=$KEYSTORE_PASSWORD" >> ./gradle.properties
|
||||
fi
|
||||
|
||||
echo -e "VERSIONCODE=$CIRCLE_BUILD_NUM" >> ./gradle.properties
|
||||
echo -e "BugsnagAPIKey=$BUGSNAG_KEY" >> ./gradle.properties
|
||||
working_directory: android
|
||||
|
||||
- run:
|
||||
name: Set Google Services
|
||||
command: |
|
||||
if [[ $KEYSTORE ]]; then
|
||||
echo $GOOGLE_SERVICES_ANDROID | base64 --decode > google-services.json
|
||||
fi
|
||||
working_directory: android/app/src/play
|
||||
|
||||
- run:
|
||||
name: Config variables
|
||||
command: |
|
||||
echo -e "export default { BUGSNAG_API_KEY: '$BUGSNAG_KEY' };" > ./config.js
|
||||
|
||||
- run:
|
||||
name: Build Android Play App
|
||||
command: |
|
||||
if [[ $KEYSTORE ]]; then
|
||||
bundle exec fastlane android playRelease
|
||||
else
|
||||
bundle exec fastlane android playBuild
|
||||
fi
|
||||
working_directory: android
|
||||
|
||||
- run:
|
||||
name: Upload sourcemaps to Bugsnag
|
||||
command: |
|
||||
if [[ $BUGSNAG_KEY ]]; then
|
||||
yarn generate-source-maps-android upload \
|
||||
--api-key=$BUGSNAG_KEY \
|
||||
--app-version=$CIRCLE_BUILD_NUM \
|
||||
--minifiedFile=android/app/build/generated/assets/react/play/release/app.bundle \
|
||||
--source-map=android/app/build/generated/sourcemaps/react/play/release/app.bundle.map \
|
||||
--minified-url=app.bundle \
|
||||
--upload-sources
|
||||
fi
|
||||
|
||||
- store_artifacts:
|
||||
path: android/app/build/outputs
|
||||
|
||||
- save_cache: *save-npm-cache-linux
|
||||
|
||||
- save_cache: *save-gradle-cache
|
||||
|
||||
- persist_to_workspace:
|
||||
root: .
|
||||
paths:
|
||||
- android/fastlane/report.xml
|
||||
- android/app/build/outputs
|
||||
|
||||
android-foss-build:
|
||||
android-build-official:
|
||||
<<: *defaults
|
||||
docker:
|
||||
- image: circleci/android:api-28-node
|
||||
|
||||
environment:
|
||||
JAVA_OPTS: '-Xms512m -Xmx2g'
|
||||
GRADLE_OPTS: '-Xmx3g -Dorg.gradle.daemon=false -Dorg.gradle.jvmargs="-Xmx2g -XX:+HeapDumpOnOutOfMemoryError"'
|
||||
TERM: dumb
|
||||
<<: *android-env
|
||||
<<: *bash-env
|
||||
|
||||
steps:
|
||||
- checkout
|
||||
- android-build
|
||||
|
||||
- run: *install-node
|
||||
|
||||
- restore_cache: *restore-npm-cache-linux
|
||||
|
||||
- run: *install-npm-modules
|
||||
|
||||
- run: *update-fastlane-android
|
||||
|
||||
- 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 "FLIPPER_VERSION=0.51.0" >> ./gradle.properties
|
||||
echo -e "VERSIONCODE=$CIRCLE_BUILD_NUM" >> ./gradle.properties
|
||||
|
||||
if [[ $KEYSTORE ]]; then
|
||||
echo $KEYSTORE_BASE64 | base64 --decode > ./app/$KEYSTORE
|
||||
echo -e "KEYSTORE=$KEYSTORE" >> ./gradle.properties
|
||||
echo -e "KEYSTORE_PASSWORD=$KEYSTORE_PASSWORD" >> ./gradle.properties
|
||||
echo -e "KEY_ALIAS=$KEY_ALIAS" >> ./gradle.properties
|
||||
echo -e "KEY_PASSWORD=$KEYSTORE_PASSWORD" >> ./gradle.properties
|
||||
fi
|
||||
working_directory: android
|
||||
|
||||
- run:
|
||||
name: Build Android Foss App
|
||||
command: bundle exec fastlane android fossRelease
|
||||
working_directory: android
|
||||
|
||||
- store_artifacts:
|
||||
path: android/app/build/outputs
|
||||
|
||||
- save_cache: *save-npm-cache-linux
|
||||
|
||||
- save_cache: *save-gradle-cache
|
||||
|
||||
- persist_to_workspace:
|
||||
root: .
|
||||
paths:
|
||||
- android/fastlane/report.xml
|
||||
- android/app/build/outputs
|
||||
|
||||
android-google-play-beta:
|
||||
android-google-play-beta-experimental:
|
||||
<<: *defaults
|
||||
docker:
|
||||
- image: circleci/android:api-28-node
|
||||
|
||||
steps:
|
||||
- checkout
|
||||
- upload-to-google-play-beta:
|
||||
official: false
|
||||
|
||||
- attach_workspace:
|
||||
at: android
|
||||
android-google-play-beta-official:
|
||||
<<: *defaults
|
||||
docker:
|
||||
- image: circleci/android:api-28-node
|
||||
|
||||
- run:
|
||||
name: Store the google service account key
|
||||
command: echo "$FASTLANE_GOOGLE_SERVICE_ACCOUNT" | base64 --decode > service_account.json
|
||||
working_directory: android
|
||||
|
||||
- run: *update-fastlane-android
|
||||
|
||||
- run:
|
||||
name: Fastlane Play Store Upload
|
||||
command: bundle exec fastlane android beta
|
||||
working_directory: android
|
||||
steps:
|
||||
- upload-to-google-play-beta:
|
||||
official: true
|
||||
|
||||
# iOS builds
|
||||
ios-build:
|
||||
ios-build-experimental:
|
||||
executor: mac-env
|
||||
|
||||
steps:
|
||||
- checkout
|
||||
- ios-build
|
||||
|
||||
- restore_cache: *restore-gems-cache
|
||||
|
||||
- restore_cache: *restore-npm-cache-mac
|
||||
|
||||
- run: *install-node
|
||||
|
||||
- run: *install-npm-modules
|
||||
|
||||
- run: *update-fastlane-ios
|
||||
|
||||
- run:
|
||||
name: Set Google Services
|
||||
command: |
|
||||
if [[ $KEYSTORE ]]; then
|
||||
echo $GOOGLE_SERVICES_REACTNATIVE | base64 --decode > GoogleService-Info.plist
|
||||
fi
|
||||
working_directory: ios
|
||||
|
||||
- run:
|
||||
name: Upload sourcemaps to Bugsnag
|
||||
command: |
|
||||
if [[ $BUGSNAG_KEY ]]; then
|
||||
yarn generate-source-maps-ios
|
||||
curl https://upload.bugsnag.com/react-native-source-map \
|
||||
-F apiKey=$BUGSNAG_KEY \
|
||||
-F appBundleVersion=$CIRCLE_BUILD_NUM \
|
||||
-F dev=false \
|
||||
-F platform=ios \
|
||||
-F sourceMap=@ios-release.bundle.map \
|
||||
-F bundle=@ios-release.bundle
|
||||
fi
|
||||
|
||||
- run:
|
||||
name: Fastlane Build
|
||||
no_output_timeout: 1200
|
||||
command: |
|
||||
agvtool new-version -all $CIRCLE_BUILD_NUM
|
||||
/usr/libexec/PlistBuddy -c "Set BugsnagAPIKey $BUGSNAG_KEY" ./RocketChatRN/Info.plist
|
||||
|
||||
if [[ $APP_STORE_CONNECT_API_KEY ]]; then
|
||||
echo $APP_STORE_CONNECT_API_KEY | base64 --decode > ./fastlane/app_store_connect_api_key.p8
|
||||
bundle exec fastlane ios release
|
||||
else
|
||||
bundle exec fastlane ios build_fork
|
||||
fi
|
||||
working_directory: ios
|
||||
|
||||
- save_cache: *save-npm-cache-mac
|
||||
|
||||
- save_cache: *save-gems-cache
|
||||
|
||||
- store_artifacts:
|
||||
path: ios/RocketChatRN.ipa
|
||||
|
||||
- persist_to_workspace:
|
||||
root: .
|
||||
paths:
|
||||
- ios/*.ipa
|
||||
- ios/fastlane/report.xml
|
||||
|
||||
ios-testflight:
|
||||
ios-build-official:
|
||||
executor: mac-env
|
||||
|
||||
steps:
|
||||
- checkout
|
||||
- ios-build
|
||||
|
||||
- attach_workspace:
|
||||
at: ios
|
||||
ios-testflight-experimental:
|
||||
executor: mac-env
|
||||
steps:
|
||||
- upload-to-testflight:
|
||||
official: false
|
||||
|
||||
- restore_cache: *restore-gems-cache
|
||||
|
||||
- run: *update-fastlane-ios
|
||||
|
||||
- run:
|
||||
name: Fastlane Tesflight Upload
|
||||
command: |
|
||||
echo $APP_STORE_CONNECT_API_KEY | base64 --decode > ./fastlane/app_store_connect_api_key.p8
|
||||
bundle exec fastlane ios beta
|
||||
working_directory: ios
|
||||
|
||||
- save_cache: *save-gems-cache
|
||||
ios-testflight-official:
|
||||
executor: mac-env
|
||||
steps:
|
||||
- upload-to-testflight:
|
||||
official: true
|
||||
|
||||
workflows:
|
||||
build-and-test:
|
||||
jobs:
|
||||
- lint-testunit
|
||||
|
||||
- ios-build:
|
||||
# iOS Experimental
|
||||
- ios-build-experimental:
|
||||
requires:
|
||||
- lint-testunit
|
||||
- ios-hold-testflight:
|
||||
- ios-hold-testflight-experimental:
|
||||
type: approval
|
||||
requires:
|
||||
- ios-build
|
||||
- ios-testflight:
|
||||
- ios-build-experimental
|
||||
- ios-testflight-experimental:
|
||||
requires:
|
||||
- ios-hold-testflight
|
||||
- ios-hold-testflight-experimental
|
||||
|
||||
- android-play-build:
|
||||
requires:
|
||||
- lint-testunit
|
||||
- android-hold-google-play-beta:
|
||||
type: approval
|
||||
requires:
|
||||
- android-play-build
|
||||
- android-google-play-beta:
|
||||
requires:
|
||||
- android-hold-google-play-beta
|
||||
- android-hold-foss-build:
|
||||
# iOS Official
|
||||
- ios-hold-build-official:
|
||||
type: approval
|
||||
requires:
|
||||
- lint-testunit
|
||||
- android-foss-build:
|
||||
- ios-build-official:
|
||||
requires:
|
||||
- android-hold-foss-build
|
||||
- ios-hold-build-official
|
||||
- ios-hold-testflight-official:
|
||||
type: approval
|
||||
requires:
|
||||
- ios-build-official
|
||||
- ios-testflight-official:
|
||||
requires:
|
||||
- ios-hold-testflight-official
|
||||
|
||||
# Android Experimental
|
||||
- android-build-experimental:
|
||||
requires:
|
||||
- lint-testunit
|
||||
- android-hold-google-play-beta-experimental:
|
||||
type: approval
|
||||
requires:
|
||||
- android-build-experimental
|
||||
- android-google-play-beta-experimental:
|
||||
requires:
|
||||
- android-hold-google-play-beta-experimental
|
||||
|
||||
# Android Official
|
||||
- android-hold-build-official:
|
||||
type: approval
|
||||
requires:
|
||||
- lint-testunit
|
||||
- android-build-official:
|
||||
requires:
|
||||
- android-hold-build-official
|
||||
- android-hold-google-play-beta-official:
|
||||
type: approval
|
||||
requires:
|
||||
- android-build-official
|
||||
- android-google-play-beta-official:
|
||||
requires:
|
||||
- android-hold-google-play-beta-official
|
||||
|
|
|
@ -21,6 +21,7 @@ DerivedData
|
|||
*.ipa
|
||||
*.xcuserstate
|
||||
project.xcworkspace
|
||||
*.mobileprovision
|
||||
|
||||
# Android/IntelliJ
|
||||
#
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
def taskRequests = getGradle().getStartParameter().getTaskRequests().toString().toLowerCase()
|
||||
def isPlay = !taskRequests.contains("foss")
|
||||
def isFoss = taskRequests.contains("foss")
|
||||
|
||||
apply plugin: "com.android.application"
|
||||
apply plugin: 'kotlin-android'
|
||||
|
||||
if (isPlay) {
|
||||
if (!isFoss) {
|
||||
apply plugin: 'com.google.firebase.crashlytics'
|
||||
apply plugin: 'com.bugsnag.android.gradle'
|
||||
}
|
||||
|
@ -140,13 +140,13 @@ android {
|
|||
}
|
||||
|
||||
defaultConfig {
|
||||
applicationId "chat.rocket.reactnative"
|
||||
applicationId APPLICATION_ID
|
||||
minSdkVersion rootProject.ext.minSdkVersion
|
||||
targetSdkVersion rootProject.ext.targetSdkVersion
|
||||
versionCode VERSIONCODE as Integer
|
||||
versionName "4.12.1"
|
||||
versionName "4.13.0"
|
||||
vectorDrawables.useSupportLibrary = true
|
||||
if (isPlay) {
|
||||
if (!isFoss) {
|
||||
manifestPlaceholders = [BugsnagAPIKey: BugsnagAPIKey as String]
|
||||
missingDimensionStrategy "RNNotifications.reactNativeVersion", "reactNative60" // See note below!
|
||||
}
|
||||
|
@ -176,7 +176,7 @@ android {
|
|||
minifyEnabled enableProguardInReleaseBuilds
|
||||
setProguardFiles([getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'])
|
||||
signingConfig signingConfigs.release
|
||||
if (isPlay) {
|
||||
if (!isFoss) {
|
||||
firebaseCrashlytics {
|
||||
nativeSymbolUploadEnabled true
|
||||
}
|
||||
|
@ -193,10 +193,17 @@ android {
|
|||
|
||||
// applicationVariants are e.g. debug, release
|
||||
|
||||
flavorDimensions "type"
|
||||
flavorDimensions "app", "type"
|
||||
productFlavors {
|
||||
official {
|
||||
dimension = "app"
|
||||
buildConfigField "boolean", "IS_OFFICIAL", "true"
|
||||
}
|
||||
experimental {
|
||||
dimension = "app"
|
||||
buildConfigField "boolean", "IS_OFFICIAL", "false"
|
||||
}
|
||||
foss {
|
||||
applicationId "chat.rocket.android"
|
||||
dimension = "type"
|
||||
buildConfigField "boolean", "FDROID_BUILD", "true"
|
||||
}
|
||||
|
@ -206,11 +213,20 @@ android {
|
|||
}
|
||||
}
|
||||
sourceSets {
|
||||
playDebug {
|
||||
// TODO: refactor making sure notifications are working properly both on debug and release
|
||||
experimentalPlayDebug {
|
||||
java.srcDirs = ['src/main/java', 'src/play/java']
|
||||
manifest.srcFile 'src/play/AndroidManifest.xml'
|
||||
}
|
||||
playRelease {
|
||||
experimentalPlayRelease {
|
||||
java.srcDirs = ['src/main/java', 'src/play/java']
|
||||
manifest.srcFile 'src/play/AndroidManifest.xml'
|
||||
}
|
||||
officialPlayDebug {
|
||||
java.srcDirs = ['src/main/java', 'src/play/java']
|
||||
manifest.srcFile 'src/play/AndroidManifest.xml'
|
||||
}
|
||||
officialPlayRelease {
|
||||
java.srcDirs = ['src/main/java', 'src/play/java']
|
||||
manifest.srcFile 'src/play/AndroidManifest.xml'
|
||||
}
|
||||
|
@ -245,7 +261,6 @@ android {
|
|||
dependencies {
|
||||
addUnimodulesDependencies()
|
||||
implementation project(':watermelondb')
|
||||
implementation project(":reactnativekeyboardinput")
|
||||
implementation project(':@react-native-community_viewpager')
|
||||
playImplementation project(':reactnativenotifications')
|
||||
playImplementation project(':@react-native-firebase_app')
|
||||
|
@ -288,6 +303,6 @@ task copyDownloadableDepsToLibs(type: Copy) {
|
|||
}
|
||||
|
||||
apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project)
|
||||
if (isPlay) {
|
||||
if (!isFoss) {
|
||||
apply plugin: 'com.google.gms.google-services'
|
||||
}
|
||||
|
|
|
@ -0,0 +1,83 @@
|
|||
{
|
||||
"project_info": {
|
||||
"project_number": "115198584049",
|
||||
"firebase_url": "https://rocketchat-reactnative-test.firebaseio.com",
|
||||
"project_id": "rocketchat-reactnative-test",
|
||||
"storage_bucket": "rocketchat-reactnative-test.appspot.com"
|
||||
},
|
||||
"client": [
|
||||
{
|
||||
"client_info": {
|
||||
"mobilesdk_app_id": "1:115198584049:android:a79216ae48935d2c9ab550",
|
||||
"android_client_info": {
|
||||
"package_name": "chat.rocket.android"
|
||||
}
|
||||
},
|
||||
"oauth_client": [
|
||||
{
|
||||
"client_id": "115198584049-ack609b1338b827fta26s9rd2ab1aad5.apps.googleusercontent.com",
|
||||
"client_type": 3
|
||||
}
|
||||
],
|
||||
"api_key": [
|
||||
{
|
||||
"current_key": "AIzaSyAWwowhAfACHBw3YxmDOXY3QyakgjhJLqc"
|
||||
}
|
||||
],
|
||||
"services": {
|
||||
"appinvite_service": {
|
||||
"other_platform_oauth_client": [
|
||||
{
|
||||
"client_id": "115198584049-ack609b1338b827fta26s9rd2ab1aad5.apps.googleusercontent.com",
|
||||
"client_type": 3
|
||||
},
|
||||
{
|
||||
"client_id": "115198584049-0efgfvm0oh9ap55g7epmqnjm27mq3j4e.apps.googleusercontent.com",
|
||||
"client_type": 2,
|
||||
"ios_info": {
|
||||
"bundle_id": "chat.rocket.reactnative"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"client_info": {
|
||||
"mobilesdk_app_id": "1:115198584049:android:8be27b1f7c42a2ed",
|
||||
"android_client_info": {
|
||||
"package_name": "chat.rocket.reactnative"
|
||||
}
|
||||
},
|
||||
"oauth_client": [
|
||||
{
|
||||
"client_id": "115198584049-ack609b1338b827fta26s9rd2ab1aad5.apps.googleusercontent.com",
|
||||
"client_type": 3
|
||||
}
|
||||
],
|
||||
"api_key": [
|
||||
{
|
||||
"current_key": "AIzaSyAWwowhAfACHBw3YxmDOXY3QyakgjhJLqc"
|
||||
}
|
||||
],
|
||||
"services": {
|
||||
"appinvite_service": {
|
||||
"other_platform_oauth_client": [
|
||||
{
|
||||
"client_id": "115198584049-ack609b1338b827fta26s9rd2ab1aad5.apps.googleusercontent.com",
|
||||
"client_type": 3
|
||||
},
|
||||
{
|
||||
"client_id": "115198584049-0efgfvm0oh9ap55g7epmqnjm27mq3j4e.apps.googleusercontent.com",
|
||||
"client_type": 2,
|
||||
"ios_info": {
|
||||
"bundle_id": "chat.rocket.reactnative"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"configuration_version": "1"
|
||||
}
|
|
@ -1,10 +1,9 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
package="chat.rocket.reactnative">
|
||||
xmlns:tools="http://schemas.android.com/tools">
|
||||
|
||||
<application
|
||||
android:name=".MainDebugApplication"
|
||||
android:name="chat.rocket.reactnative.MainDebugApplication"
|
||||
tools:ignore="GoogleAppIndexingWarning"
|
||||
tools:replace="android:name"
|
||||
tools:targetApi="28"
|
||||
|
|
|
@ -21,6 +21,7 @@ import com.facebook.flipper.plugins.sharedpreferences.SharedPreferencesFlipperPl
|
|||
import com.facebook.react.ReactInstanceManager;
|
||||
import com.facebook.react.bridge.ReactContext;
|
||||
import com.facebook.react.modules.network.NetworkingModule;
|
||||
import com.facebook.react.modules.network.CustomClientBuilder;
|
||||
import okhttp3.OkHttpClient;
|
||||
public class ReactNativeFlipper {
|
||||
public static void initializeFlipper(Context context, ReactInstanceManager reactInstanceManager) {
|
||||
|
@ -33,7 +34,7 @@ public class ReactNativeFlipper {
|
|||
client.addPlugin(CrashReporterPlugin.getInstance());
|
||||
NetworkFlipperPlugin networkFlipperPlugin = new NetworkFlipperPlugin();
|
||||
NetworkingModule.setCustomClientBuilder(
|
||||
new NetworkingModule.CustomClientBuilder() {
|
||||
new CustomClientBuilder() {
|
||||
@Override
|
||||
public void apply(OkHttpClient.Builder builder) {
|
||||
builder.addNetworkInterceptor(new FlipperOkhttpInterceptor(networkFlipperPlugin));
|
||||
|
|
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 40 KiB |
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 5.2 KiB After Width: | Height: | Size: 5.2 KiB |
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.1 KiB |
Before Width: | Height: | Size: 4.4 KiB After Width: | Height: | Size: 4.4 KiB |
Before Width: | Height: | Size: 7.7 KiB After Width: | Height: | Size: 7.7 KiB |
Before Width: | Height: | Size: 7.3 KiB After Width: | Height: | Size: 7.3 KiB |
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 19 KiB |
|
@ -1,4 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<item name="splashBackground" type="color">#000000</item>
|
||||
</resources>
|
|
@ -1,28 +0,0 @@
|
|||
<resources>
|
||||
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
|
||||
<item name="android:colorEdgeEffect">#aaaaaa</item>
|
||||
<item name="colorPrimaryDark">@color/splashBackground</item>
|
||||
<item name="android:navigationBarColor">@color/splashBackground</item>
|
||||
</style>
|
||||
|
||||
<style name="Share.Window" parent="android:Theme">
|
||||
<item name="android:windowEnterAnimation">@null</item>
|
||||
<item name="android:windowExitAnimation">@null</item>
|
||||
</style>
|
||||
|
||||
<style name="Theme.Share.Transparent" parent="android:Theme">
|
||||
<item name="android:windowIsTranslucent">true</item>
|
||||
<item name="android:windowBackground">@color/primary_dark</item>
|
||||
<item name="android:windowContentOverlay">@null</item>
|
||||
<item name="android:windowNoTitle">true</item>
|
||||
<item name="android:windowIsFloating">true</item>
|
||||
<item name="android:backgroundDimEnabled">true</item>
|
||||
<item name="android:windowAnimationStyle">@style/Share.Window</item>
|
||||
</style>
|
||||
|
||||
<style name="BootTheme" parent="AppTheme">
|
||||
<item name="android:background">@drawable/launch_screen</item>
|
||||
<item name="colorPrimaryDark">@color/splashBackground</item>
|
||||
<item name="android:navigationBarColor">@color/splashBackground</item>
|
||||
</style>
|
||||
</resources>
|
|
@ -1,64 +1,78 @@
|
|||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
package="chat.rocket.reactnative">
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
package="chat.rocket.reactnative">
|
||||
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
|
||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
||||
|
||||
<application
|
||||
android:name=".MainApplication"
|
||||
android:label="@string/app_name"
|
||||
android:icon="@mipmap/ic_launcher"
|
||||
android:theme="@style/AppTheme"
|
||||
android:networkSecurityConfig="@xml/network_security_config"
|
||||
android:allowBackup="false"
|
||||
tools:replace="android:allowBackup"
|
||||
>
|
||||
<activity
|
||||
android:name="com.zoontek.rnbootsplash.RNBootSplashActivity"
|
||||
android:theme="@style/BootTheme">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".MainActivity"
|
||||
android:label="@string/app_name"
|
||||
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|uiMode"
|
||||
android:launchMode="singleTask"
|
||||
android:windowSoftInputMode="adjustResize"
|
||||
android:exported="true">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.DOWNLOAD_COMPLETE"/>
|
||||
</intent-filter>
|
||||
<intent-filter android:label="@string/app_name">
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<category android:name="android.intent.category.BROWSABLE" />
|
||||
<data android:scheme="https" android:host="go.rocket.chat" />
|
||||
<data android:scheme="https" android:host="jitsi.rocket.chat" />
|
||||
<data android:scheme="rocketchat" android:host="room" />
|
||||
<data android:scheme="rocketchat" android:host="auth" />
|
||||
<data android:scheme="rocketchat" android:host="jitsi.rocket.chat" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />
|
||||
<activity
|
||||
android:noHistory="true"
|
||||
android:name=".share.ShareActivity"
|
||||
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
|
||||
android:label="@string/share_extension_name"
|
||||
android:screenOrientation="portrait"
|
||||
android:theme="@style/AppTheme" >
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.SEND" />
|
||||
<action android:name="android.intent.action.SEND_MULTIPLE" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<data android:mimeType="*/*" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
</application>
|
||||
<application
|
||||
android:name="chat.rocket.reactnative.MainApplication"
|
||||
android:allowBackup="false"
|
||||
android:icon="@mipmap/ic_launcher"
|
||||
android:label="@string/app_name"
|
||||
android:networkSecurityConfig="@xml/network_security_config"
|
||||
android:requestLegacyExternalStorage="true"
|
||||
android:supportsRtl="true"
|
||||
android:theme="@style/AppTheme"
|
||||
tools:replace="android:allowBackup">
|
||||
<activity
|
||||
android:name="com.zoontek.rnbootsplash.RNBootSplashActivity"
|
||||
android:theme="@style/BootTheme">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<activity
|
||||
android:name="chat.rocket.reactnative.MainActivity"
|
||||
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|uiMode"
|
||||
android:exported="true"
|
||||
android:label="@string/app_name"
|
||||
android:launchMode="singleTask"
|
||||
android:windowSoftInputMode="adjustResize">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.DOWNLOAD_COMPLETE" />
|
||||
</intent-filter>
|
||||
<intent-filter android:label="@string/app_name">
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<category android:name="android.intent.category.BROWSABLE" />
|
||||
|
||||
<data
|
||||
android:host="go.rocket.chat"
|
||||
android:scheme="https" />
|
||||
<data
|
||||
android:host="jitsi.rocket.chat"
|
||||
android:scheme="https" />
|
||||
<data
|
||||
android:host="room"
|
||||
android:scheme="rocketchat" />
|
||||
<data
|
||||
android:host="auth"
|
||||
android:scheme="rocketchat" />
|
||||
<data
|
||||
android:host="jitsi.rocket.chat"
|
||||
android:scheme="rocketchat" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />
|
||||
<activity
|
||||
android:name="chat.rocket.reactnative.share.ShareActivity"
|
||||
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
|
||||
android:label="@string/share_extension_name"
|
||||
android:noHistory="true"
|
||||
android:screenOrientation="portrait"
|
||||
android:theme="@style/AppTheme">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.SEND" />
|
||||
<action android:name="android.intent.action.SEND_MULTIPLE" />
|
||||
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<data android:mimeType="*/*" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
</application>
|
||||
|
||||
</manifest>
|
||||
|
|
|
@ -11,7 +11,6 @@ import com.facebook.react.ReactPackage;
|
|||
import com.facebook.soloader.SoLoader;
|
||||
import com.nozbe.watermelondb.WatermelonDBPackage;
|
||||
import com.reactnativecommunity.viewpager.RNCViewPagerPackage;
|
||||
import com.wix.reactnativekeyboardinput.KeyboardInputPackage;
|
||||
|
||||
import org.unimodules.adapters.react.ModuleRegistryAdapter;
|
||||
import org.unimodules.adapters.react.ReactModuleRegistryProvider;
|
||||
|
@ -20,6 +19,7 @@ import java.util.Arrays;
|
|||
import java.util.List;
|
||||
|
||||
import chat.rocket.reactnative.generated.BasePackageList;
|
||||
import chat.rocket.reactnative.networking.SSLPinningPackage;
|
||||
|
||||
public class MainApplication extends Application implements ReactApplication {
|
||||
|
||||
|
@ -35,9 +35,9 @@ public class MainApplication extends Application implements ReactApplication {
|
|||
protected List<ReactPackage> getPackages() {
|
||||
@SuppressWarnings("UnnecessaryLocalVariable")
|
||||
List<ReactPackage> packages = new PackageList(this).getPackages();
|
||||
packages.add(new KeyboardInputPackage(MainApplication.this));
|
||||
packages.add(new WatermelonDBPackage());
|
||||
packages.add(new RNCViewPagerPackage());
|
||||
packages.add(new SSLPinningPackage());
|
||||
List<ReactPackage> unimodules = Arrays.<ReactPackage>asList(
|
||||
new ModuleRegistryAdapter(mModuleRegistryProvider)
|
||||
);
|
||||
|
|
|
@ -0,0 +1,193 @@
|
|||
package chat.rocket.reactnative.networking;
|
||||
|
||||
import com.facebook.react.bridge.ReactApplicationContext;
|
||||
import com.facebook.react.bridge.ReactContextBaseJavaModule;
|
||||
import com.facebook.react.modules.network.NetworkingModule;
|
||||
import com.facebook.react.modules.network.CustomClientBuilder;
|
||||
import com.facebook.react.modules.network.ReactCookieJarContainer;
|
||||
import com.facebook.react.modules.websocket.WebSocketModule;
|
||||
import com.facebook.react.modules.fresco.ReactOkHttpNetworkFetcher;
|
||||
import com.facebook.react.bridge.ReactMethod;
|
||||
import com.facebook.react.bridge.Promise;
|
||||
|
||||
import java.net.Socket;
|
||||
import java.security.Principal;
|
||||
import java.security.cert.CertificateException;
|
||||
import java.security.cert.X509Certificate;
|
||||
import javax.net.ssl.X509ExtendedKeyManager;
|
||||
import java.security.PrivateKey;
|
||||
import javax.net.ssl.SSLContext;
|
||||
import javax.net.ssl.X509TrustManager;
|
||||
import javax.net.ssl.SSLSocketFactory;
|
||||
import javax.net.ssl.TrustManager;
|
||||
import okhttp3.OkHttpClient;
|
||||
import java.lang.InterruptedException;
|
||||
import android.app.Activity;
|
||||
import javax.net.ssl.KeyManager;
|
||||
import android.security.KeyChain;
|
||||
import android.security.KeyChainAliasCallback;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import com.RNFetchBlob.RNFetchBlob;
|
||||
|
||||
import com.reactnativecommunity.webview.RNCWebViewManager;
|
||||
|
||||
import com.dylanvann.fastimage.FastImageOkHttpUrlLoader;
|
||||
|
||||
import expo.modules.av.player.datasource.SharedCookiesDataSourceFactory;
|
||||
|
||||
public class SSLPinningModule extends ReactContextBaseJavaModule implements KeyChainAliasCallback {
|
||||
|
||||
private Promise promise;
|
||||
private static String alias;
|
||||
private static ReactApplicationContext reactContext;
|
||||
|
||||
public SSLPinningModule(ReactApplicationContext reactContext) {
|
||||
super(reactContext);
|
||||
this.reactContext = reactContext;
|
||||
}
|
||||
|
||||
public class CustomClient implements CustomClientBuilder {
|
||||
@Override
|
||||
public void apply(OkHttpClient.Builder builder) {
|
||||
if (alias != null) {
|
||||
SSLSocketFactory sslSocketFactory = getSSLFactory(alias);
|
||||
if (sslSocketFactory != null) {
|
||||
builder.sslSocketFactory(sslSocketFactory);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected OkHttpClient getOkHttpClient() {
|
||||
OkHttpClient.Builder builder = new OkHttpClient.Builder()
|
||||
.connectTimeout(0, TimeUnit.MILLISECONDS)
|
||||
.readTimeout(0, TimeUnit.MILLISECONDS)
|
||||
.writeTimeout(0, TimeUnit.MILLISECONDS)
|
||||
.cookieJar(new ReactCookieJarContainer());
|
||||
|
||||
if (alias != null) {
|
||||
SSLSocketFactory sslSocketFactory = getSSLFactory(alias);
|
||||
if (sslSocketFactory != null) {
|
||||
builder.sslSocketFactory(sslSocketFactory);
|
||||
}
|
||||
}
|
||||
|
||||
return builder.build();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "SSLPinning";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void alias(String alias) {
|
||||
this.alias = alias;
|
||||
|
||||
this.promise.resolve(alias);
|
||||
}
|
||||
|
||||
@ReactMethod
|
||||
public void setCertificate(String data, Promise promise) {
|
||||
this.alias = data;
|
||||
|
||||
// HTTP Fetch react-native layer
|
||||
NetworkingModule.setCustomClientBuilder(new CustomClient());
|
||||
// Websocket react-native layer
|
||||
WebSocketModule.setCustomClientBuilder(new CustomClient());
|
||||
// Image networking react-native layer
|
||||
ReactOkHttpNetworkFetcher.setOkHttpClient(getOkHttpClient());
|
||||
// RNFetchBlob networking layer
|
||||
RNFetchBlob.applyCustomOkHttpClient(getOkHttpClient());
|
||||
// RNCWebView onReceivedClientCertRequest
|
||||
RNCWebViewManager.setCertificateAlias(data);
|
||||
// FastImage Glide network layer
|
||||
FastImageOkHttpUrlLoader.setOkHttpClient(getOkHttpClient());
|
||||
// Expo AV network layer
|
||||
SharedCookiesDataSourceFactory.setOkHttpClient(getOkHttpClient());
|
||||
|
||||
promise.resolve(null);
|
||||
}
|
||||
|
||||
@ReactMethod
|
||||
public void pickCertificate(Promise promise) {
|
||||
Activity activity = getCurrentActivity();
|
||||
|
||||
this.promise = promise;
|
||||
|
||||
KeyChain.choosePrivateKeyAlias(activity,
|
||||
this, // Callback
|
||||
null, // Any key types.
|
||||
null, // Any issuers.
|
||||
null, // Any host
|
||||
-1, // Any port
|
||||
"RocketChat");
|
||||
}
|
||||
|
||||
public static SSLSocketFactory getSSLFactory(final String alias) {
|
||||
try {
|
||||
final PrivateKey privKey = KeyChain.getPrivateKey(reactContext, alias);
|
||||
final X509Certificate[] certChain = KeyChain.getCertificateChain(reactContext, alias);
|
||||
|
||||
final X509ExtendedKeyManager keyManager = new X509ExtendedKeyManager() {
|
||||
@Override
|
||||
public String chooseClientAlias(String[] strings, Principal[] principals, Socket socket) {
|
||||
return alias;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String chooseServerAlias(String s, Principal[] principals, Socket socket) {
|
||||
return alias;
|
||||
}
|
||||
|
||||
@Override
|
||||
public X509Certificate[] getCertificateChain(String s) {
|
||||
return certChain;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] getClientAliases(String s, Principal[] principals) {
|
||||
return new String[]{alias};
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] getServerAliases(String s, Principal[] principals) {
|
||||
return new String[]{alias};
|
||||
}
|
||||
|
||||
@Override
|
||||
public PrivateKey getPrivateKey(String s) {
|
||||
return privKey;
|
||||
}
|
||||
};
|
||||
|
||||
final TrustManager[] trustAllCerts = new TrustManager[] {
|
||||
new X509TrustManager() {
|
||||
@Override
|
||||
public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {
|
||||
}
|
||||
|
||||
@Override
|
||||
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
|
||||
return certChain;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
final SSLContext sslContext = SSLContext.getInstance("TLS");
|
||||
sslContext.init(new KeyManager[]{keyManager}, trustAllCerts, new java.security.SecureRandom());
|
||||
SSLContext.setDefault(sslContext);
|
||||
|
||||
final SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
|
||||
|
||||
return sslSocketFactory;
|
||||
} catch (Exception e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
package chat.rocket.reactnative.networking;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import com.facebook.react.ReactPackage;
|
||||
import com.facebook.react.bridge.NativeModule;
|
||||
import com.facebook.react.bridge.ReactApplicationContext;
|
||||
import com.facebook.react.uimanager.ViewManager;
|
||||
import com.facebook.react.bridge.JavaScriptModule;
|
||||
|
||||
public class SSLPinningPackage implements ReactPackage {
|
||||
@Override
|
||||
public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
|
||||
return Arrays.<NativeModule>asList(new SSLPinningModule(reactContext));
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
}
|
|
@ -1,5 +1,4 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<item name="splashBackground" type="color">#000000</item>
|
||||
<item name="notification_text" type="color">#1D74F5</item>
|
||||
</resources>
|
|
@ -3,6 +3,7 @@
|
|||
<item name="android:colorEdgeEffect">#aaaaaa</item>
|
||||
<item name="colorPrimaryDark">@color/splashBackground</item>
|
||||
<item name="android:navigationBarColor">@color/splashBackground</item>
|
||||
<item name="android:forceDarkAllowed">false</item>
|
||||
</style>
|
||||
|
||||
<style name="Share.Window" parent="android:Theme">
|
||||
|
|
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 7.5 KiB After Width: | Height: | Size: 7.5 KiB |
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 4.0 KiB After Width: | Height: | Size: 4.0 KiB |
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 5.6 KiB After Width: | Height: | Size: 5.6 KiB |
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 8.6 KiB After Width: | Height: | Size: 8.6 KiB |
Before Width: | Height: | Size: 5.9 KiB After Width: | Height: | Size: 5.9 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
|
@ -1,10 +1,9 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
package="chat.rocket.reactnative">
|
||||
xmlns:tools="http://schemas.android.com/tools">
|
||||
|
||||
<application
|
||||
android:name=".MainPlayApplication"
|
||||
android:name="chat.rocket.reactnative.MainPlayApplication"
|
||||
android:label="@string/app_name"
|
||||
android:icon="@mipmap/ic_launcher"
|
||||
android:theme="@style/AppTheme"
|
||||
|
@ -12,11 +11,11 @@
|
|||
tools:replace="android:name"
|
||||
>
|
||||
<receiver
|
||||
android:name=".ReplyBroadcast"
|
||||
android:name="chat.rocket.reactnative.ReplyBroadcast"
|
||||
android:enabled="true"
|
||||
android:exported="false" />
|
||||
<receiver
|
||||
android:name=".DismissNotification"
|
||||
android:name="chat.rocket.reactnative.DismissNotification"
|
||||
android:enabled="true"
|
||||
android:exported="false" >
|
||||
</receiver>
|
||||
|
|
|
@ -1,40 +0,0 @@
|
|||
{
|
||||
"project_info": {
|
||||
"project_number": "115198584049",
|
||||
"firebase_url": "https://rocketchat-reactnative-test.firebaseio.com",
|
||||
"project_id": "rocketchat-reactnative-test",
|
||||
"storage_bucket": "rocketchat-reactnative-test.appspot.com"
|
||||
},
|
||||
"client": [
|
||||
{
|
||||
"client_info": {
|
||||
"mobilesdk_app_id": "1:115198584049:android:8be27b1f7c42a2ed",
|
||||
"android_client_info": {
|
||||
"package_name": "chat.rocket.reactnative"
|
||||
}
|
||||
},
|
||||
"oauth_client": [
|
||||
{
|
||||
"client_id": "115198584049-ack609b1338b827fta26s9rd2ab1aad5.apps.googleusercontent.com",
|
||||
"client_type": 3
|
||||
}
|
||||
],
|
||||
"api_key": [
|
||||
{
|
||||
"current_key": "AIzaSyAWwowhAfACHBw3YxmDOXY3QyakgjhJLqc"
|
||||
}
|
||||
],
|
||||
"services": {
|
||||
"appinvite_service": {
|
||||
"other_platform_oauth_client": [
|
||||
{
|
||||
"client_id": "115198584049-ack609b1338b827fta26s9rd2ab1aad5.apps.googleusercontent.com",
|
||||
"client_type": 3
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"configuration_version": "1"
|
||||
}
|
|
@ -1,28 +1,22 @@
|
|||
package chat.rocket.reactnative;
|
||||
|
||||
import android.util.Log;
|
||||
import android.util.Base64;
|
||||
import android.database.Cursor;
|
||||
import android.util.Base64;
|
||||
import android.util.Log;
|
||||
|
||||
import com.pedrouid.crypto.RSA;
|
||||
import com.facebook.react.bridge.Arguments;
|
||||
import com.facebook.react.bridge.ReactApplicationContext;
|
||||
import com.facebook.react.bridge.WritableMap;
|
||||
import com.google.gson.Gson;
|
||||
import com.nozbe.watermelondb.Database;
|
||||
import com.pedrouid.crypto.RCTAes;
|
||||
import com.pedrouid.crypto.RCTRsaUtils;
|
||||
import com.pedrouid.crypto.RSA;
|
||||
import com.pedrouid.crypto.Util;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
|
||||
import com.facebook.react.bridge.Promise;
|
||||
import com.facebook.react.bridge.Arguments;
|
||||
import com.facebook.react.bridge.ReactMethod;
|
||||
import com.facebook.react.bridge.ReadableMap;
|
||||
import com.facebook.react.bridge.WritableMap;
|
||||
import com.facebook.react.bridge.ReactApplicationContext;
|
||||
import com.facebook.react.bridge.ReactContextBaseJavaModule;
|
||||
|
||||
import com.nozbe.watermelondb.Database;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.lang.reflect.Field;
|
||||
import java.security.SecureRandom;
|
||||
import java.util.Arrays;
|
||||
|
||||
class Message {
|
||||
String _id;
|
||||
|
@ -69,8 +63,24 @@ class Encryption {
|
|||
public static Encryption shared = new Encryption();
|
||||
private ReactApplicationContext reactContext;
|
||||
|
||||
public Room readRoom(final Ejson ejson) {
|
||||
Database database = new Database(ejson.serverURL().replace("https://", "") + "-experimental.db", reactContext);
|
||||
public Room readRoom(final Ejson ejson) throws NoSuchFieldException {
|
||||
int resId = reactContext.getResources().getIdentifier("rn_config_reader_custom_package", "string", reactContext.getPackageName());
|
||||
String className = reactContext.getString(resId);
|
||||
Class clazz = null;
|
||||
Boolean isOfficial = false;
|
||||
try {
|
||||
clazz = Class.forName(className + ".BuildConfig");
|
||||
Field IS_OFFICIAL = clazz.getField("IS_OFFICIAL");
|
||||
isOfficial = (Boolean) IS_OFFICIAL.get(null);
|
||||
} catch (ClassNotFoundException | IllegalAccessException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
String dbName = ejson.serverURL().replace("https://", "");
|
||||
if (!isOfficial) {
|
||||
dbName += "-experimental";
|
||||
}
|
||||
dbName += ".db";
|
||||
Database database = new Database(dbName, reactContext);
|
||||
String[] query = {ejson.rid};
|
||||
Cursor cursor = database.rawQuery("select * from subscriptions where id == ? limit 1", query);
|
||||
|
||||
|
@ -152,7 +162,7 @@ class Encryption {
|
|||
|
||||
return m.text;
|
||||
} catch (Exception e) {
|
||||
Log.d("[ROCKETCHAT][ENCRYPTION]", Log.getStackTraceString(e));
|
||||
Log.d("[ROCKETCHAT][E2E]", Log.getStackTraceString(e));
|
||||
}
|
||||
|
||||
return null;
|
||||
|
@ -182,7 +192,7 @@ class Encryption {
|
|||
|
||||
return keyId + Base64.encodeToString(concat(bytes, data), Base64.NO_WRAP);
|
||||
} catch (Exception e) {
|
||||
Log.d("[ROCKETCHAT][ENCRYPTION]", Log.getStackTraceString(e));
|
||||
Log.d("[ROCKETCHAT][E2E]", Log.getStackTraceString(e));
|
||||
}
|
||||
|
||||
return message;
|
||||
|
|
|
@ -12,12 +12,12 @@ buildscript {
|
|||
minSdkVersion = 23
|
||||
compileSdkVersion = 29
|
||||
targetSdkVersion = 29
|
||||
glideVersion = "4.9.0"
|
||||
glideVersion = "4.11.0"
|
||||
kotlin_version = "1.3.50"
|
||||
supportLibVersion = "28.0.0"
|
||||
libre_build = !(isPlay.toBoolean())
|
||||
jitsi_url = isPlay ? "https://github.com/RocketChat/jitsi-maven-repository/raw/master/releases" : "https://github.com/RocketChat/jitsi-maven-repository/raw/libre/releases"
|
||||
jitsi_version = isPlay ? "2.10.2-rc" : "2.10.0-libre"
|
||||
jitsi_version = isPlay ? "2.10.2" : "2.10.0-libre"
|
||||
}
|
||||
|
||||
repositories {
|
||||
|
@ -51,13 +51,13 @@ allprojects {
|
|||
// Android JSC is installed from npm
|
||||
url("$rootDir/../node_modules/jsc-android/dist")
|
||||
}
|
||||
|
||||
maven {
|
||||
url safeExtGet("jitsi_url", "https://github.com/RocketChat/jitsi-maven-repository/raw/master/releases")
|
||||
url jitsi_url
|
||||
}
|
||||
|
||||
google()
|
||||
jcenter()
|
||||
|
||||
maven { url 'https://maven.google.com' }
|
||||
maven { url 'https://www.jitpack.io' }
|
||||
}
|
||||
|
|
|
@ -16,26 +16,20 @@
|
|||
default_platform(:android)
|
||||
|
||||
platform :android do
|
||||
desc "Play build for development"
|
||||
lane :playBuild do
|
||||
gradle(task: "assemblePlayDebug")
|
||||
end
|
||||
|
||||
desc "Foss build for release"
|
||||
lane :fossRelease do
|
||||
gradle(task: "assembleFossRelease")
|
||||
end
|
||||
|
||||
desc "Play build for release"
|
||||
lane :playRelease do
|
||||
gradle(task: "bundlePlayRelease")
|
||||
end
|
||||
|
||||
desc "Upload App to Play Store Internal"
|
||||
lane :beta do
|
||||
upload_to_play_store(
|
||||
track: 'internal',
|
||||
aab: 'android/app/build/outputs/bundle/playRelease/app-play-release.aab'
|
||||
)
|
||||
lane :beta do |options|
|
||||
if options[:official]
|
||||
upload_to_play_store(
|
||||
package_name: 'chat.rocket.android',
|
||||
track: 'internal',
|
||||
aab: 'android/app/build/outputs/bundle/officialPlayRelease/app-official-play-release.aab'
|
||||
)
|
||||
else
|
||||
upload_to_play_store(
|
||||
package_name: 'chat.rocket.reactnative',
|
||||
track: 'internal',
|
||||
aab: 'android/app/build/outputs/bundle/experimentalPlayRelease/app-experimental-play-release.aab'
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -29,6 +29,9 @@ android.enableJetifier=true
|
|||
# Version of flipper SDK to use with React Native
|
||||
FLIPPER_VERSION=0.51.0
|
||||
|
||||
# Application ID
|
||||
APPLICATION_ID=chat.rocket.reactnative
|
||||
|
||||
# App properties
|
||||
VERSIONCODE=999999999
|
||||
BugsnagAPIKey=""
|
|
@ -6,8 +6,6 @@ include ':watermelondb'
|
|||
project(':watermelondb').projectDir = new File(rootProject.projectDir, '../node_modules/@nozbe/watermelondb/native/android')
|
||||
include ':reactnativenotifications'
|
||||
project(':reactnativenotifications').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-notifications/android/app')
|
||||
include ':reactnativekeyboardinput'
|
||||
project(':reactnativekeyboardinput').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-keyboard-input/lib/android')
|
||||
include ':@react-native-community_viewpager'
|
||||
project(':@react-native-community_viewpager').projectDir = new File(rootProject.projectDir, '../node_modules/@react-native-community/viewpager/android')
|
||||
include ':@react-native-firebase_app'
|
||||
|
|
|
@ -23,11 +23,10 @@ export function selectServerFailure() {
|
|||
};
|
||||
}
|
||||
|
||||
export function serverRequest(server, certificate = null, username = null, fromServerHistory = false) {
|
||||
export function serverRequest(server, username = null, fromServerHistory = false) {
|
||||
return {
|
||||
type: SERVER.REQUEST,
|
||||
server,
|
||||
certificate,
|
||||
username,
|
||||
fromServerHistory
|
||||
};
|
||||
|
|
|
@ -11,13 +11,11 @@ export const SWITCH_TRACK_COLOR = {
|
|||
};
|
||||
|
||||
const mentions = {
|
||||
unreadBackground: '#6C727A',
|
||||
tunreadBackground: '#1d74f5',
|
||||
mentionMeColor: '#DB0C27',
|
||||
mentionMeBackground: '#F5455C',
|
||||
mentionGroupColor: '#E26D0E',
|
||||
mentionGroupBackground: '#F38C39',
|
||||
mentionOtherColor: '#DFAC00'
|
||||
unreadColor: '#6C727A',
|
||||
tunreadColor: '#1d74f5',
|
||||
mentionMeColor: '#F5455C',
|
||||
mentionGroupColor: '#F38C39',
|
||||
mentionOtherColor: '#F3BE08'
|
||||
};
|
||||
|
||||
export const themes = {
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
import RNConfigReader from 'react-native-config-reader';
|
||||
|
||||
export const isFDroidBuild = RNConfigReader.FDROID_BUILD;
|
||||
|
||||
export const isOfficial = RNConfigReader.IS_OFFICIAL;
|
||||
|
|
|
@ -56,7 +56,7 @@ export default StyleSheet.create({
|
|||
},
|
||||
text: {
|
||||
fontSize: 16,
|
||||
textAlign: 'center',
|
||||
...sharedStyles.textMedium
|
||||
...sharedStyles.textMedium,
|
||||
...sharedStyles.textAlignCenter
|
||||
}
|
||||
});
|
||||
|
|
|
@ -17,8 +17,8 @@ const styles = StyleSheet.create({
|
|||
},
|
||||
text: {
|
||||
fontSize: 16,
|
||||
textAlign: 'center',
|
||||
...sharedStyles.textMedium
|
||||
...sharedStyles.textMedium,
|
||||
...sharedStyles.textAlignCenter
|
||||
},
|
||||
disabled: {
|
||||
opacity: 0.3
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
import { StyleSheet } from 'react-native';
|
||||
|
||||
import sharedStyles from '../../views/Styles';
|
||||
|
||||
export default StyleSheet.create({
|
||||
container: {
|
||||
flex: 1
|
||||
|
@ -46,8 +48,8 @@ export default StyleSheet.create({
|
|||
flex: 1
|
||||
},
|
||||
categoryEmoji: {
|
||||
...sharedStyles.textAlignCenter,
|
||||
backgroundColor: 'transparent',
|
||||
textAlign: 'center',
|
||||
color: '#ffffff'
|
||||
},
|
||||
customCategoryEmoji: {
|
||||
|
|
|
@ -13,8 +13,13 @@ const styles = StyleSheet.create({
|
|||
}
|
||||
});
|
||||
|
||||
const ListIcon = React.memo(({ theme, name, color }) => (
|
||||
<View style={styles.icon}>
|
||||
const ListIcon = React.memo(({
|
||||
theme,
|
||||
name,
|
||||
color,
|
||||
style
|
||||
}) => (
|
||||
<View style={[styles.icon, style]}>
|
||||
<CustomIcon
|
||||
name={name}
|
||||
color={color ?? themes[theme].auxiliaryText}
|
||||
|
@ -26,7 +31,8 @@ const ListIcon = React.memo(({ theme, name, color }) => (
|
|||
ListIcon.propTypes = {
|
||||
theme: PropTypes.string,
|
||||
name: PropTypes.string,
|
||||
color: PropTypes.string
|
||||
color: PropTypes.string,
|
||||
style: PropTypes.object
|
||||
};
|
||||
|
||||
ListIcon.displayName = 'List.Icon';
|
||||
|
|
|
@ -1,5 +1,10 @@
|
|||
import React from 'react';
|
||||
import { View, Text, StyleSheet } from 'react-native';
|
||||
import {
|
||||
View,
|
||||
Text,
|
||||
StyleSheet,
|
||||
I18nManager
|
||||
} from 'react-native';
|
||||
import PropTypes from 'prop-types';
|
||||
|
||||
import Touch from '../../utils/touch';
|
||||
|
@ -39,6 +44,11 @@ const styles = StyleSheet.create({
|
|||
subtitle: {
|
||||
fontSize: 14,
|
||||
...sharedStyles.textRegular
|
||||
},
|
||||
actionIndicator: {
|
||||
...I18nManager.isRTL
|
||||
? { transform: [{ rotate: '180deg' }] }
|
||||
: {}
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -64,7 +74,7 @@ const Content = React.memo(({
|
|||
? (
|
||||
<View style={styles.rightContainer}>
|
||||
{right ? right() : null}
|
||||
{showActionIndicator ? <Icon name='chevron-right' /> : null}
|
||||
{showActionIndicator ? <Icon name='chevron-right' style={styles.actionIndicator} /> : null}
|
||||
</View>
|
||||
)
|
||||
: null}
|
||||
|
|
|
@ -12,6 +12,7 @@ import CustomEmoji from '../EmojiPicker/CustomEmoji';
|
|||
import database from '../../lib/database';
|
||||
import { Button } from '../ActionSheet';
|
||||
import { useDimensions } from '../../dimensions';
|
||||
import sharedStyles from '../../views/Styles';
|
||||
|
||||
export const HEADER_HEIGHT = 36;
|
||||
const ITEM_SIZE = 36;
|
||||
|
@ -32,7 +33,7 @@ const styles = StyleSheet.create({
|
|||
alignItems: 'center'
|
||||
},
|
||||
headerIcon: {
|
||||
textAlign: 'center',
|
||||
...sharedStyles.textAlignCenter,
|
||||
fontSize: 20,
|
||||
color: '#fff'
|
||||
},
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import React from 'react';
|
||||
import { View } from 'react-native';
|
||||
import { KeyboardRegistry } from 'react-native-keyboard-input';
|
||||
import { KeyboardRegistry } from 'react-native-ui-lib/keyboard';
|
||||
import PropTypes from 'prop-types';
|
||||
|
||||
import store from '../../lib/createStore';
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
import React, { Component } from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import {
|
||||
View, Alert, Keyboard, NativeModules, Text
|
||||
View, Alert, Keyboard, NativeModules, Text, InteractionManager
|
||||
} from 'react-native';
|
||||
import { connect } from 'react-redux';
|
||||
import { KeyboardAccessoryView } from 'react-native-keyboard-input';
|
||||
import { KeyboardAccessoryView } from 'react-native-ui-lib/keyboard';
|
||||
import ImagePicker from 'react-native-image-crop-picker';
|
||||
import equal from 'deep-equal';
|
||||
import DocumentPicker from 'react-native-document-picker';
|
||||
|
@ -50,6 +50,10 @@ import { withActionSheet } from '../ActionSheet';
|
|||
import { sanitizeLikeString } from '../../lib/database/utils';
|
||||
import { CustomIcon } from '../../lib/Icons';
|
||||
|
||||
if (isAndroid) {
|
||||
require('./EmojiKeyboard');
|
||||
}
|
||||
|
||||
const imagePickerConfig = {
|
||||
cropping: true,
|
||||
compressImageQuality: 0.8,
|
||||
|
@ -108,7 +112,7 @@ class MessageBox extends Component {
|
|||
id: ''
|
||||
},
|
||||
sharing: false,
|
||||
iOSScrollBehavior: NativeModules.KeyboardTrackingViewManager?.KeyboardTrackingScrollBehaviorFixedOffset,
|
||||
iOSScrollBehavior: NativeModules.KeyboardTrackingViewTempManager?.KeyboardTrackingScrollBehaviorFixedOffset,
|
||||
isActionsEnabled: true,
|
||||
getCustomEmoji: () => {}
|
||||
}
|
||||
|
@ -213,18 +217,19 @@ class MessageBox extends Component {
|
|||
this.setShowSend(true);
|
||||
}
|
||||
|
||||
if (isAndroid) {
|
||||
require('./EmojiKeyboard');
|
||||
}
|
||||
|
||||
if (isTablet) {
|
||||
EventEmiter.addEventListener(KEY_COMMAND, this.handleCommands);
|
||||
}
|
||||
|
||||
this.unsubscribeFocus = navigation.addListener('focus', () => {
|
||||
if (this.tracking && this.tracking.resetTracking) {
|
||||
this.tracking.resetTracking();
|
||||
}
|
||||
// didFocus
|
||||
// We should wait pushed views be dismissed
|
||||
InteractionManager.runAfterInteractions(() => {
|
||||
if (this.tracking && this.tracking.resetTracking) {
|
||||
// Reset messageBox keyboard tracking
|
||||
this.tracking.resetTracking();
|
||||
}
|
||||
});
|
||||
});
|
||||
this.unsubscribeBlur = navigation.addListener('blur', () => {
|
||||
this.component?.blur();
|
||||
|
|
|
@ -55,13 +55,13 @@ export default StyleSheet.create({
|
|||
width: 46,
|
||||
height: 36,
|
||||
fontSize: isIOS ? 30 : 25,
|
||||
textAlign: 'center'
|
||||
...sharedStyles.textAlignCenter
|
||||
},
|
||||
fixedMentionAvatar: {
|
||||
textAlign: 'center',
|
||||
width: 46,
|
||||
fontSize: 14,
|
||||
...sharedStyles.textBold
|
||||
...sharedStyles.textBold,
|
||||
...sharedStyles.textAlignCenter
|
||||
},
|
||||
mentionText: {
|
||||
fontSize: 14,
|
||||
|
|
|
@ -23,9 +23,9 @@ const styles = StyleSheet.create({
|
|||
paddingVertical: 10
|
||||
},
|
||||
title: {
|
||||
textAlign: 'center',
|
||||
fontSize: 16,
|
||||
...sharedStyles.textSemibold
|
||||
...sharedStyles.textSemibold,
|
||||
...sharedStyles.textAlignCenter
|
||||
},
|
||||
reactCount: {
|
||||
fontSize: 13,
|
||||
|
|
|
@ -11,7 +11,7 @@ import ActivityIndicator from './ActivityIndicator';
|
|||
|
||||
const styles = StyleSheet.create({
|
||||
error: {
|
||||
textAlign: 'center',
|
||||
...sharedStyles.textAlignCenter,
|
||||
paddingTop: 5
|
||||
},
|
||||
inputContainer: {
|
||||
|
@ -26,8 +26,7 @@ const styles = StyleSheet.create({
|
|||
...sharedStyles.textRegular,
|
||||
height: 48,
|
||||
fontSize: 16,
|
||||
paddingLeft: 14,
|
||||
paddingRight: 14,
|
||||
paddingHorizontal: 14,
|
||||
borderWidth: StyleSheet.hairlineWidth,
|
||||
borderRadius: 2
|
||||
},
|
||||
|
|
|
@ -14,9 +14,9 @@ const styles = StyleSheet.create({
|
|||
padding: 10
|
||||
},
|
||||
text: {
|
||||
...sharedStyles.textRegular,
|
||||
fontSize: 14,
|
||||
textAlign: 'center'
|
||||
...sharedStyles.textRegular,
|
||||
...sharedStyles.textAlignCenter
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
@ -211,7 +211,7 @@ class Markdown extends PureComponent {
|
|||
return null;
|
||||
}
|
||||
return (
|
||||
<Text style={[style, { color: themes[theme].bodyText }]} numberOfLines={numberOfLines}>
|
||||
<Text style={[styles.text, style, { color: themes[theme].bodyText }]} numberOfLines={numberOfLines}>
|
||||
{children}
|
||||
</Text>
|
||||
);
|
||||
|
@ -384,6 +384,8 @@ class Markdown extends PureComponent {
|
|||
|
||||
if (preview) {
|
||||
m = shortnameToUnicode(m);
|
||||
// Removes sequential empty spaces
|
||||
m = m.replace(/\s+/g, ' ');
|
||||
m = removeMarkdown(m);
|
||||
m = m.replace(/\n+/g, ' ');
|
||||
return (
|
||||
|
|
|
@ -6,7 +6,8 @@ import equal from 'deep-equal';
|
|||
import I18n from '../../i18n';
|
||||
import styles from './styles';
|
||||
import Markdown from '../markdown';
|
||||
import { getInfoMessage } from './utils';
|
||||
import User from './User';
|
||||
import { getInfoMessage, SYSTEM_MESSAGE_TYPES_WITH_AUTHOR_NAME } from './utils';
|
||||
import { themes } from '../../constants/colors';
|
||||
import MessageContext from './Context';
|
||||
import Encrypted from './Encrypted';
|
||||
|
@ -15,13 +16,25 @@ import { E2E_MESSAGE_TYPE } from '../../lib/encryption/constants';
|
|||
const Content = React.memo((props) => {
|
||||
if (props.isInfo) {
|
||||
const infoMessage = getInfoMessage({ ...props });
|
||||
return (
|
||||
|
||||
const renderMessageContent = (
|
||||
<Text
|
||||
style={[styles.textInfo, { color: themes[props.theme].auxiliaryText }]}
|
||||
accessibilityLabel={infoMessage}
|
||||
>{infoMessage}
|
||||
>
|
||||
{infoMessage}
|
||||
</Text>
|
||||
);
|
||||
|
||||
if (SYSTEM_MESSAGE_TYPES_WITH_AUTHOR_NAME.includes(props.type)) {
|
||||
return (
|
||||
<Text>
|
||||
<User {...props} /> {renderMessageContent}
|
||||
</Text>
|
||||
);
|
||||
}
|
||||
|
||||
return renderMessageContent;
|
||||
}
|
||||
|
||||
const isPreview = props.tmid && !props.isThreadRoom;
|
||||
|
@ -67,6 +80,10 @@ const Content = React.memo((props) => {
|
|||
);
|
||||
}
|
||||
|
||||
if (props.isIgnored) {
|
||||
content = <Text style={[styles.textInfo, { color: themes[props.theme].auxiliaryText }]}>{I18n.t('Message_Ignored')}</Text>;
|
||||
}
|
||||
|
||||
return (
|
||||
<View style={props.isTemp && styles.temp}>
|
||||
{content}
|
||||
|
@ -88,6 +105,9 @@ const Content = React.memo((props) => {
|
|||
if (prevProps.isEncrypted !== nextProps.isEncrypted) {
|
||||
return false;
|
||||
}
|
||||
if (prevProps.isIgnored !== nextProps.isIgnored) {
|
||||
return false;
|
||||
}
|
||||
if (!equal(prevProps.mentions, nextProps.mentions)) {
|
||||
return false;
|
||||
}
|
||||
|
@ -111,6 +131,7 @@ Content.propTypes = {
|
|||
mentions: PropTypes.oneOfType([PropTypes.array, PropTypes.object]),
|
||||
navToRoomInfo: PropTypes.func,
|
||||
useRealName: PropTypes.bool,
|
||||
isIgnored: PropTypes.bool,
|
||||
type: PropTypes.string
|
||||
};
|
||||
Content.displayName = 'MessageContent';
|
||||
|
|
|
@ -63,12 +63,12 @@ const MessageInner = React.memo((props) => {
|
|||
MessageInner.displayName = 'MessageInner';
|
||||
|
||||
const Message = React.memo((props) => {
|
||||
if (props.isThreadReply || props.isThreadSequential || props.isInfo) {
|
||||
if (props.isThreadReply || props.isThreadSequential || props.isInfo || props.isIgnored) {
|
||||
const thread = props.isThreadReply ? <RepliedThread {...props} /> : null;
|
||||
return (
|
||||
<View style={[styles.container, props.style]}>
|
||||
{thread}
|
||||
<View style={[styles.flex, styles.center]}>
|
||||
<View style={styles.flex}>
|
||||
<MessageAvatar small {...props} />
|
||||
<View
|
||||
style={[
|
||||
|
@ -82,6 +82,7 @@ const Message = React.memo((props) => {
|
|||
</View>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<View style={[styles.container, props.style]}>
|
||||
<View style={styles.flex}>
|
||||
|
@ -146,7 +147,8 @@ Message.propTypes = {
|
|||
onLongPress: PropTypes.func,
|
||||
isReadReceiptEnabled: PropTypes.bool,
|
||||
unread: PropTypes.bool,
|
||||
theme: PropTypes.string
|
||||
theme: PropTypes.string,
|
||||
isIgnored: PropTypes.bool
|
||||
};
|
||||
|
||||
MessageInner.propTypes = {
|
||||
|
|
|
@ -1,13 +1,12 @@
|
|||
import React from 'react';
|
||||
import { View, Text } from 'react-native';
|
||||
import removeMarkdown from 'remove-markdown';
|
||||
import { View } from 'react-native';
|
||||
import PropTypes from 'prop-types';
|
||||
|
||||
import shortnameToUnicode from '../../utils/shortnameToUnicode';
|
||||
import { CustomIcon } from '../../lib/Icons';
|
||||
import styles from './styles';
|
||||
import { themes } from '../../constants/colors';
|
||||
import I18n from '../../i18n';
|
||||
import Markdown from '../markdown';
|
||||
|
||||
const RepliedThread = React.memo(({
|
||||
tmid, tmsg, isHeader, fetchThreadName, id, isEncrypted, theme
|
||||
|
@ -21,8 +20,7 @@ const RepliedThread = React.memo(({
|
|||
return null;
|
||||
}
|
||||
|
||||
let msg = shortnameToUnicode(tmsg);
|
||||
msg = removeMarkdown(msg);
|
||||
let msg = tmsg;
|
||||
|
||||
if (isEncrypted) {
|
||||
msg = I18n.t('Encrypted_message');
|
||||
|
@ -31,7 +29,13 @@ const RepliedThread = React.memo(({
|
|||
return (
|
||||
<View style={styles.repliedThread} testID={`message-thread-replied-on-${ msg }`}>
|
||||
<CustomIcon name='threads' size={20} style={styles.repliedThreadIcon} color={themes[theme].tintColor} />
|
||||
<Text style={[styles.repliedThreadName, { color: themes[theme].tintColor }]} numberOfLines={1}>{msg}</Text>
|
||||
<Markdown
|
||||
msg={msg}
|
||||
theme={theme}
|
||||
style={[styles.repliedThreadName, { color: themes[theme].tintColor }]}
|
||||
preview
|
||||
numberOfLines={1}
|
||||
/>
|
||||
<View style={styles.repliedThreadDisclosure}>
|
||||
<CustomIcon
|
||||
name='chevron-right'
|
||||
|
|
|
@ -12,6 +12,7 @@ import MessageError from './MessageError';
|
|||
import sharedStyles from '../../views/Styles';
|
||||
import messageStyles from './styles';
|
||||
import MessageContext from './Context';
|
||||
import { SYSTEM_MESSAGE_TYPES_WITH_AUTHOR_NAME } from './utils';
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
container: {
|
||||
|
@ -24,6 +25,10 @@ const styles = StyleSheet.create({
|
|||
lineHeight: 22,
|
||||
...sharedStyles.textMedium
|
||||
},
|
||||
usernameInfoMessage: {
|
||||
fontSize: 16,
|
||||
...sharedStyles.textMedium
|
||||
},
|
||||
titleContainer: {
|
||||
flex: 1,
|
||||
flexDirection: 'row',
|
||||
|
@ -36,7 +41,7 @@ const styles = StyleSheet.create({
|
|||
});
|
||||
|
||||
const User = React.memo(({
|
||||
isHeader, useRealName, author, alias, ts, timeFormat, hasError, theme, navToRoomInfo, ...props
|
||||
isHeader, useRealName, author, alias, ts, timeFormat, hasError, theme, navToRoomInfo, type, ...props
|
||||
}) => {
|
||||
if (isHeader || hasError) {
|
||||
const navParam = {
|
||||
|
@ -47,17 +52,37 @@ const User = React.memo(({
|
|||
const username = (useRealName && author.name) || author.username;
|
||||
const aliasUsername = alias ? (<Text style={[styles.alias, { color: themes[theme].auxiliaryText }]}> @{username}</Text>) : null;
|
||||
const time = moment(ts).format(timeFormat);
|
||||
const onUserPress = () => navToRoomInfo(navParam);
|
||||
const isDisabled = author._id === user.id;
|
||||
|
||||
const textContent = (
|
||||
<>
|
||||
{alias || username}
|
||||
{aliasUsername}
|
||||
</>
|
||||
);
|
||||
|
||||
if (SYSTEM_MESSAGE_TYPES_WITH_AUTHOR_NAME.includes(type)) {
|
||||
return (
|
||||
<Text
|
||||
style={[styles.usernameInfoMessage, { color: themes[theme].titleText }]}
|
||||
onPress={onUserPress}
|
||||
disabled={isDisabled}
|
||||
>
|
||||
{textContent}
|
||||
</Text>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<View style={styles.container}>
|
||||
<TouchableOpacity
|
||||
style={styles.titleContainer}
|
||||
onPress={() => navToRoomInfo(navParam)}
|
||||
disabled={author._id === user.id}
|
||||
onPress={onUserPress}
|
||||
disabled={isDisabled}
|
||||
>
|
||||
<Text style={[styles.username, { color: themes[theme].titleText }]} numberOfLines={1}>
|
||||
{alias || username}
|
||||
{aliasUsername}
|
||||
{textContent}
|
||||
</Text>
|
||||
</TouchableOpacity>
|
||||
<Text style={[messageStyles.time, { color: themes[theme].auxiliaryText }]}>{time}</Text>
|
||||
|
@ -77,7 +102,8 @@ User.propTypes = {
|
|||
ts: PropTypes.instanceOf(Date),
|
||||
timeFormat: PropTypes.string,
|
||||
theme: PropTypes.string,
|
||||
navToRoomInfo: PropTypes.func
|
||||
navToRoomInfo: PropTypes.func,
|
||||
type: PropTypes.string
|
||||
};
|
||||
User.displayName = 'MessageUser';
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import { KeyboardUtils } from 'react-native-keyboard-input';
|
||||
import { Keyboard } from 'react-native';
|
||||
|
||||
import Message from './Message';
|
||||
import MessageContext from './Context';
|
||||
|
@ -32,6 +32,7 @@ class MessageContainer extends React.Component {
|
|||
autoTranslateRoom: PropTypes.bool,
|
||||
autoTranslateLanguage: PropTypes.string,
|
||||
status: PropTypes.number,
|
||||
isIgnored: PropTypes.bool,
|
||||
getCustomEmoji: PropTypes.func,
|
||||
onLongPress: PropTypes.func,
|
||||
onReactionPress: PropTypes.func,
|
||||
|
@ -70,9 +71,12 @@ class MessageContainer extends React.Component {
|
|||
blockAction: () => {},
|
||||
archived: false,
|
||||
broadcast: false,
|
||||
isIgnored: false,
|
||||
theme: 'light'
|
||||
}
|
||||
|
||||
state = { isManualUnignored: false };
|
||||
|
||||
componentDidMount() {
|
||||
const { item } = this.props;
|
||||
if (item && item.observe) {
|
||||
|
@ -83,14 +87,21 @@ class MessageContainer extends React.Component {
|
|||
}
|
||||
}
|
||||
|
||||
shouldComponentUpdate(nextProps) {
|
||||
const { theme, threadBadgeColor } = this.props;
|
||||
shouldComponentUpdate(nextProps, nextState) {
|
||||
const { isManualUnignored } = this.state;
|
||||
const { theme, threadBadgeColor, isIgnored } = this.props;
|
||||
if (nextProps.theme !== theme) {
|
||||
return true;
|
||||
}
|
||||
if (nextProps.threadBadgeColor !== threadBadgeColor) {
|
||||
return true;
|
||||
}
|
||||
if (nextProps.isIgnored !== isIgnored) {
|
||||
return true;
|
||||
}
|
||||
if (nextState.isManualUnignored !== isManualUnignored) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -101,8 +112,12 @@ class MessageContainer extends React.Component {
|
|||
}
|
||||
|
||||
onPress = debounce(() => {
|
||||
if (this.isIgnored) {
|
||||
return this.onIgnoredMessagePress();
|
||||
}
|
||||
|
||||
const { item, isThreadRoom } = this.props;
|
||||
KeyboardUtils.dismiss();
|
||||
Keyboard.dismiss();
|
||||
|
||||
if (((item.tlm || item.tmid) && !isThreadRoom)) {
|
||||
this.onThreadPress();
|
||||
|
@ -161,6 +176,10 @@ class MessageContainer extends React.Component {
|
|||
}
|
||||
}
|
||||
|
||||
onIgnoredMessagePress = () => {
|
||||
this.setState({ isManualUnignored: true });
|
||||
}
|
||||
|
||||
get isHeader() {
|
||||
const {
|
||||
item, previousItem, broadcast, Message_GroupingPeriod
|
||||
|
@ -198,16 +217,11 @@ class MessageContainer extends React.Component {
|
|||
}
|
||||
|
||||
get isThreadSequential() {
|
||||
const {
|
||||
item, previousItem, isThreadRoom
|
||||
} = this.props;
|
||||
const { item, isThreadRoom } = this.props;
|
||||
if (isThreadRoom) {
|
||||
return false;
|
||||
}
|
||||
if (previousItem && item.tmid && ((previousItem.tmid === item.tmid) || (previousItem.id === item.tmid))) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
return item.tmid;
|
||||
}
|
||||
|
||||
get isEncrypted() {
|
||||
|
@ -226,6 +240,12 @@ class MessageContainer extends React.Component {
|
|||
return item.status === messagesStatus.TEMP || item.status === messagesStatus.ERROR;
|
||||
}
|
||||
|
||||
get isIgnored() {
|
||||
const { isManualUnignored } = this.state;
|
||||
const { isIgnored } = this.props;
|
||||
return isManualUnignored ? false : isIgnored;
|
||||
}
|
||||
|
||||
get hasError() {
|
||||
const { item } = this.props;
|
||||
return item.status === messagesStatus.ERROR;
|
||||
|
@ -311,6 +331,7 @@ class MessageContainer extends React.Component {
|
|||
fetchThreadName={fetchThreadName}
|
||||
mentions={mentions}
|
||||
channels={channels}
|
||||
isIgnored={this.isIgnored}
|
||||
isEdited={editedBy && !!editedBy.username}
|
||||
isHeader={this.isHeader}
|
||||
isThreadReply={this.isThreadReply}
|
||||
|
|
|
@ -26,9 +26,6 @@ export default StyleSheet.create({
|
|||
messageContentWithError: {
|
||||
marginLeft: 0
|
||||
},
|
||||
center: {
|
||||
alignItems: 'center'
|
||||
},
|
||||
flex: {
|
||||
flexDirection: 'row'
|
||||
// flex: 1
|
||||
|
@ -140,7 +137,7 @@ export default StyleSheet.create({
|
|||
},
|
||||
time: {
|
||||
fontSize: 12,
|
||||
paddingLeft: 8,
|
||||
marginLeft: 8,
|
||||
...sharedStyles.textRegular
|
||||
},
|
||||
repliedThread: {
|
||||
|
|
|
@ -40,6 +40,24 @@ export const SYSTEM_MESSAGES = [
|
|||
'thread-created'
|
||||
];
|
||||
|
||||
export const SYSTEM_MESSAGE_TYPES = {
|
||||
MESSAGE_REMOVED: 'rm',
|
||||
MESSAGE_PINNED: 'message_pinned',
|
||||
MESSAGE_SNIPPETED: 'message_snippeted',
|
||||
USER_JOINED_CHANNEL: 'uj',
|
||||
USER_JOINED_DISCUSSION: 'ut',
|
||||
USER_LEFT_CHANNEL: 'ul'
|
||||
};
|
||||
|
||||
export const SYSTEM_MESSAGE_TYPES_WITH_AUTHOR_NAME = [
|
||||
SYSTEM_MESSAGE_TYPES.MESSAGE_REMOVED,
|
||||
SYSTEM_MESSAGE_TYPES.MESSAGE_PINNED,
|
||||
SYSTEM_MESSAGE_TYPES.MESSAGE_SNIPPETED,
|
||||
SYSTEM_MESSAGE_TYPES.USER_JOINED_CHANNEL,
|
||||
SYSTEM_MESSAGE_TYPES.USER_JOINED_DISCUSSION,
|
||||
SYSTEM_MESSAGE_TYPES.USER_LEFT_CHANNEL
|
||||
];
|
||||
|
||||
export const getInfoMessage = ({
|
||||
type, role, msg, author
|
||||
}) => {
|
||||
|
|
|
@ -2,6 +2,8 @@ import i18n from 'i18n-js';
|
|||
import { I18nManager } from 'react-native';
|
||||
import * as RNLocalize from 'react-native-localize';
|
||||
|
||||
export * from './isRTL';
|
||||
|
||||
export const LANGUAGES = [
|
||||
{
|
||||
label: 'English',
|
||||
|
@ -51,6 +53,10 @@ export const LANGUAGES = [
|
|||
label: '日本語',
|
||||
value: 'ja',
|
||||
file: require('./locales/ja').default
|
||||
}, {
|
||||
label: 'العربية',
|
||||
value: 'ar',
|
||||
file: require('./locales/ar').default
|
||||
}
|
||||
];
|
||||
|
||||
|
@ -67,6 +73,8 @@ const availableLanguages = Object.keys(i18n.translations);
|
|||
const { languageTag, isRTL } = RNLocalize.findBestAvailableLanguage(availableLanguages) || defaultLanguage;
|
||||
|
||||
I18nManager.forceRTL(isRTL);
|
||||
I18nManager.swapLeftAndRightInRTL(isRTL);
|
||||
i18n.locale = languageTag;
|
||||
i18n.isRTL = I18nManager.isRTL;
|
||||
|
||||
export default i18n;
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
// https://github.com/zoontek/react-native-localize/blob/master/src/constants.ts#L5
|
||||
const USES_RTL_LAYOUT = [
|
||||
'ar',
|
||||
'ckb',
|
||||
'fa',
|
||||
'he',
|
||||
'ks',
|
||||
'lrc',
|
||||
'mzn',
|
||||
'ps',
|
||||
'ug',
|
||||
'ur',
|
||||
'yi'
|
||||
];
|
||||
|
||||
export const isRTL = locale => USES_RTL_LAYOUT.includes(locale);
|
|
@ -0,0 +1,663 @@
|
|||
export default {
|
||||
'1_person_reacted': 'تفاعل شخص 1',
|
||||
'1_user': 'مستخدم 1',
|
||||
'error-action-not-allowed': '{{action}} غير مسموح',
|
||||
'error-application-not-found': 'لم يتم العثور على البرنامج',
|
||||
'error-archived-duplicate-name': 'هناك قناة مؤرشفة باسم {{room_name}}',
|
||||
'error-avatar-invalid-url': 'عنوان الصورة الرمزية غير صحيح: {{url}}',
|
||||
'error-avatar-url-handling': 'خطأ في معالجة الصورة الرمزية ({{url}}) للمستخدم {{username}}',
|
||||
'error-cant-invite-for-direct-room': 'لا يمكن دعوة المستخدم في الغرفة المباشرة',
|
||||
'error-could-not-change-email': 'تعذر تغيير البريد الإلكتروني',
|
||||
'error-could-not-change-name': 'تعذر تغيير الاسم',
|
||||
'error-could-not-change-username': 'تعذر تغيير اسم المستخدم',
|
||||
'error-could-not-change-status': 'تعذر تغيير الحالة',
|
||||
'error-delete-protected-role': 'لا يمكن حذف دور محمي',
|
||||
'error-department-not-found': 'القسم غير موجود',
|
||||
'error-direct-message-file-upload-not-allowed': 'مشاركة الملفات غير مسموح في الرسالة المباشرة',
|
||||
'error-duplicate-channel-name': 'القناة {{channel_name}} موجودة مسبقاً',
|
||||
'error-email-domain-blacklisted': 'عنوان اﻹيميل محظور',
|
||||
'error-email-send-failed': 'خطأ في إرسال البريد اﻹلكتروني: {{message}}',
|
||||
'error-save-image': 'خطأ عند حفظ الصورة',
|
||||
'error-save-video': 'خطأ عند حفظ الفيديو',
|
||||
'error-field-unavailable': '{{field}} مستخدم بالفعل :(',
|
||||
'error-file-too-large': 'حجم الملف كبير جداً',
|
||||
'error-importer-not-defined': 'المستورِد معرف بطريقة غير صحيحة، يجب تحديد نوع الإستيراد',
|
||||
'error-input-is-not-a-valid-field': '{{input}} غير صالح {{field}}',
|
||||
'error-invalid-actionlink': 'رابط الإجراء غير صالح',
|
||||
'error-invalid-arguments': 'وسائط غير صحيحة',
|
||||
'error-invalid-asset': 'ممتلكات غير صحيحة',
|
||||
'error-invalid-channel': 'قناة غير صحيحة',
|
||||
'error-invalid-channel-start-with-chars': 'قناة غير صحيحة. تبدأ القناة بحرف @ أو #',
|
||||
'error-invalid-custom-field': 'حقل مخصص غير صالح',
|
||||
'error-invalid-custom-field-name': 'اسم الحقل المخصص غير صالح. استخدم الحروف والأرقام والواصلات والشرطات السفلية فقط',
|
||||
'error-invalid-date': 'التاريخ غير صالح',
|
||||
'error-invalid-description': 'الوصف غير صالح',
|
||||
'error-invalid-domain': 'عنوان الموقع غير صالح',
|
||||
'error-invalid-email': 'عنوان البريد اﻹلكتروني غير صالح {{emai}}',
|
||||
'error-invalid-email-address': 'عنوان البريد اﻹلكتروني غير صالح',
|
||||
'error-invalid-file-height': 'ارتفاع الملف غير صالح',
|
||||
'error-invalid-file-type': 'نوع الملف غير صالح',
|
||||
'error-invalid-file-width': 'عرض الملف غير صالح',
|
||||
'error-invalid-from-address': 'عنوان غير صالح في خانة (من)',
|
||||
'error-invalid-integration': 'تكامل غير صالح',
|
||||
'error-invalid-message': 'رسالة غير صالحة',
|
||||
'error-invalid-method': 'طريقة غير صالحة',
|
||||
'error-invalid-name': 'اسم غير صالح',
|
||||
'error-invalid-password': 'كلمة مرور خاطئة',
|
||||
'error-invalid-redirectUri': 'رابط إعادة توجيه غير صحيح',
|
||||
'error-invalid-role': 'دور غير صالح',
|
||||
'error-invalid-room': 'غرفة غير صالحة',
|
||||
'error-invalid-room-name': '{{room_name}} اسم الغرفة غير صالح',
|
||||
'error-invalid-room-type': '{{type}} نوع الغرفة غير صالح',
|
||||
'error-invalid-settings': 'الإعدادات المعطاة غير صالحة',
|
||||
'error-invalid-subscription': 'اشتراك غير صالح',
|
||||
'error-invalid-token': 'الرمز غير صالح',
|
||||
'error-invalid-triggerWords': 'كلمات محفزة غير صالحة',
|
||||
'error-invalid-urls': 'عناوين غير صالحة',
|
||||
'error-invalid-user': 'مستخدم غير صالح',
|
||||
'error-invalid-username': 'اسم المستخدم غير صالح',
|
||||
'error-invalid-webhook-response': 'الرد التلقائي من العنوان استجاب برمز مغاير عن 200',
|
||||
'error-message-deleting-blocked': 'حذف الرسالة محظور',
|
||||
'error-message-editing-blocked': 'تعديل الرسالة محظور',
|
||||
'error-message-size-exceeded': 'حجم الرسالة تجاوز الحد المسموح به (Message_MaxAllowedSize)',
|
||||
'error-missing-unsubscribe-link': 'يجب عليك تقديم رابط [unsubscribe]',
|
||||
'error-no-tokens-for-this-user': 'لا توجد رموز لهذا المستخدم',
|
||||
'error-not-allowed': 'غير مسموح',
|
||||
'error-not-authorized': 'غير مصرح',
|
||||
'error-push-disabled': 'إرسال الإشعارات معطل',
|
||||
'error-remove-last-owner': 'هذا هو المالك الأخير. يرجى تعيين مالك جديد قبل إزالة هذا المالك',
|
||||
'error-role-in-use': 'لا يمكن حذف الدور لأنه قيد الاستخدام',
|
||||
'error-role-name-required': 'اسم الدور مطلوب',
|
||||
'error-the-field-is-required': 'هذا الحقل {{field}} مطلوب',
|
||||
'error-too-many-requests': 'خطأ، تلقينا الكثير من الطلبات. من فضلك خفف السرعة، يجب الانتظار لمدة {{seconds}} ثانية قبل المحاولة مرة أخرى',
|
||||
'error-user-is-not-activated': 'المستخدم غير منشط',
|
||||
'error-user-has-no-roles': 'ليس للمستخدم أدوار',
|
||||
'error-user-limit-exceeded': 'يتجاوز عدد المستخدمين الذين تحاول دعوتهم إلى #channel_name الحد الذي حدده المشرف',
|
||||
'error-user-not-in-room': 'المستخدم ليس في هذه الغرفة',
|
||||
'error-user-registration-custom-field': 'error-user-registration-custom-field',
|
||||
'error-user-registration-disabled': 'التسجيل معطل',
|
||||
'error-user-registration-secret': 'التسجيل مسموح به عبر عنوان الويب السري فقط',
|
||||
'error-you-are-last-owner': 'أنت المالك الأخير. يرجى تعيين مالك جديد قبل مغادرة الغرفة',
|
||||
Actions: 'الإجراءات',
|
||||
activity: 'نشاط',
|
||||
Activity: 'النشاط',
|
||||
Add_Reaction: 'إضافة تفاعل',
|
||||
Add_Server: 'إضافة خادم',
|
||||
Add_users: 'إضافة مستخدمين',
|
||||
Admin_Panel: 'لوحة الإدارة',
|
||||
Agent: 'المندوب',
|
||||
Alert: 'إنذار',
|
||||
alert: 'إنذار',
|
||||
alerts: 'الإنذارات',
|
||||
All_users_in_the_channel_can_write_new_messages: 'يمكن لجميع المستخدمين في القناة كتابة رسائل جديدة',
|
||||
A_meaningful_name_for_the_discussion_room: 'اسم معبر لغرفة النقاش',
|
||||
All: 'الكل',
|
||||
All_Messages: 'كل الرسائل',
|
||||
Allow_Reactions: 'السماح للتفاعلات',
|
||||
Alphabetical: 'أبجدي',
|
||||
and_more: 'وأكثر',
|
||||
and: 'و',
|
||||
announcement: 'إعلان',
|
||||
Announcement: 'إعلان',
|
||||
Apply_Your_Certificate: 'طبق شهادتك',
|
||||
Applying_a_theme_will_change_how_the_app_looks: 'سيؤدي تطبيق السمة إلى تغيير شكل التطبيق',
|
||||
ARCHIVE: 'أرشفة',
|
||||
archive: 'أرشيف',
|
||||
are_typing: 'يكتب',
|
||||
Are_you_sure_question_mark: 'هل أنت متأكد؟',
|
||||
Are_you_sure_you_want_to_leave_the_room: 'متأكد من مغادرة الغرفة {{room}}؟',
|
||||
Audio: 'صوت',
|
||||
Authenticating: 'تتم المصادقة',
|
||||
Automatic: 'تلقائي',
|
||||
Auto_Translate: 'ترجمة تلقائية',
|
||||
Avatar_changed_successfully: 'تم تغيير الصورة الرمزية بنجاح!',
|
||||
Avatar_Url: 'عنوان ويب الصورة الرمزية',
|
||||
Away: 'غير متواجد',
|
||||
Back: 'عودة',
|
||||
Black: 'أسود',
|
||||
Block_user: 'حظر المستخدم',
|
||||
Browser: 'المتصفح',
|
||||
Broadcast_channel_Description: 'يمكن فقط للمستخدمين المصرح لهم كتابة رسائل جديدة، ولكن سيتمكن المستخدمون الآخرون من الرد',
|
||||
Broadcast_Channel: 'قناة البث',
|
||||
Busy: 'مشغول',
|
||||
By_proceeding_you_are_agreeing: 'من خلال المتابعة، أنت توافق على',
|
||||
Cancel_editing: 'إلغاء التعديل',
|
||||
Cancel_recording: 'إلغاء التسجيل الصوتي',
|
||||
Cancel: 'إلغاء',
|
||||
changing_avatar: 'تغيير الصورة الرمزية',
|
||||
creating_channel: 'إنشاء قناة',
|
||||
creating_invite: 'إنشاء دعوة',
|
||||
Channel_Name: 'اسم القناة',
|
||||
Channels: 'قنوات',
|
||||
Chats: 'محادثات',
|
||||
Call_already_ended: 'انتهت المكالمة بالفعل!',
|
||||
Clear_cookies_alert: 'هل تريد حذف جميع ملفات تعريف الإرتباط؟',
|
||||
Clear_cookies_desc: 'هذا الإجراء سيحذف ملفات تعريف الإرتباط الخاصة بتسجيل الدخول مما يسمح بتسجيل الدخول لحسابات أخرى',
|
||||
Clear_cookies_yes: 'نعم، مسح ملفات الإرتباط',
|
||||
Clear_cookies_no: 'لا، احتفظ بملفات تعريف الإرتباط',
|
||||
Click_to_join: 'انقر للانضمام!',
|
||||
Close: 'إغلاق',
|
||||
Close_emoji_selector: 'إغلاق محدد الرموز التعبيرية',
|
||||
Closing_chat: 'إغلاق المحادثة',
|
||||
Change_language_loading: 'تغيير اللغة',
|
||||
Chat_closed_by_agent: 'المندوب أغلق المحادثة',
|
||||
Choose: 'اختر',
|
||||
Choose_from_library: 'اختر من المكتبة',
|
||||
Choose_file: 'اختر ملف',
|
||||
Choose_where_you_want_links_be_opened: 'اختر المكان الذي تريد فتح الروابط فيه',
|
||||
Code: 'الرمز',
|
||||
Code_or_password_invalid: 'الرمز أو كلمة المرور خاطئة',
|
||||
Collaborative: 'تعاونية',
|
||||
Confirm: 'تأكيد',
|
||||
Connect: 'اتصال',
|
||||
Connected: 'متصل',
|
||||
connecting_server: 'يتم الاتصال بالخادم',
|
||||
Connecting: 'جار الاتصال...',
|
||||
Contact_us: 'تواصل معنا',
|
||||
Contact_your_server_admin: 'اتصل بمسؤول الخادم',
|
||||
Continue_with: 'متابعة بـ',
|
||||
Copied_to_clipboard: 'تم النسخ للحافظة!',
|
||||
Copy: 'نسخ',
|
||||
Conversation: 'محادثة',
|
||||
Permalink: 'رابط ثابت',
|
||||
Certificate_password: 'الرقم السري للشهادة',
|
||||
Clear_cache: 'امسح ذاكرة التخزين المؤقتة للخادم',
|
||||
Clear_cache_loading: 'يتم مسح ذاكرة التخزين',
|
||||
Whats_the_password_for_your_certificate: 'ماهي كلمة المرور للشهادة؟',
|
||||
Create_account: 'إنشاء حساب',
|
||||
Create_Channel: 'إنشاء قناة',
|
||||
Create_Direct_Messages: 'إنشاء رسالة مباشرة',
|
||||
Create_Discussion: 'إنشاء نقاش',
|
||||
Created_snippet: 'إنشاء مقتطف',
|
||||
Create_a_new_workspace: 'إنشاء مساحة عمل جديدة',
|
||||
Create: 'إنشاء',
|
||||
Custom_Status: 'حالة مخصصة',
|
||||
Dark: 'داكن',
|
||||
Dark_level: 'مستوى السمة الداكنة',
|
||||
Default: 'افتراضي',
|
||||
Default_browser: 'المتصفح الأساسي',
|
||||
Delete_Room_Warning: 'سيؤدي حذف الغرفة إلى حذف جميع الرسائل المنشورة. لا يمكن التراجع بعد الحذف',
|
||||
Department: 'القسم',
|
||||
delete: 'حذف',
|
||||
Delete: 'حذف',
|
||||
DELETE: 'حذف',
|
||||
deleting_room: 'حذف الغرفة',
|
||||
description: 'وصف',
|
||||
Description: 'وصف',
|
||||
DESKTOP_OPTIONS: 'خيارات سطح المكتب',
|
||||
DESKTOP_NOTIFICATIONS: 'إشعارات سطح المكتب',
|
||||
Desktop_Alert_info: 'هذه الإشعارات ترسل لسطح المكتب',
|
||||
Directory: 'مجلد',
|
||||
Direct_Messages: 'رسالة مباشرة',
|
||||
Disable_notifications: 'أوقف الإشعارات',
|
||||
Discussions: 'مناقشات',
|
||||
Discussion_Desc: 'ساهم بإعطاء نظرة عامة لما يجري. عند إنشاء مناقشة يتم إنشاء قناة فرعية وربطها بالقناة المحددة',
|
||||
Discussion_name: 'اسم النقاش',
|
||||
Done: 'تم',
|
||||
Dont_Have_An_Account: 'ليس لديك حساب؟',
|
||||
Do_you_have_an_account: 'هل لديك حساب؟',
|
||||
Do_you_have_a_certificate: 'هل لديك شهادة؟',
|
||||
Do_you_really_want_to_key_this_room_question_mark: 'هل تريد حقاً {{key}} هذه الغرفة؟',
|
||||
E2E_How_It_Works_info1: 'يمكنك الآن إنشاء مجموعات خاصة ورسائل مباشرة مشفرة. بإمكانك أيضاً تشفير المجموعات الخاصة والرسائل المباشرة الموجودة مسبقاً',
|
||||
E2E_How_It_Works_info2: 'التشفير يتم بين الطرفيات بمعنى أن المفتاح سيستخدم لتشفير وفك تشفير رسائلك ولن يتم حفظه في الخادم. لذلك يترتب عليك حفظ كلمة المرور هذه في مكان آمن',
|
||||
E2E_How_It_Works_info3: 'حين الاستمرار سيتم إنشاء كلمة المرور بين الطرفيات',
|
||||
E2E_How_It_Works_info4: 'بإمكانك أيضاً إنشاء كلمة مرور جديدة لمفتاح التشفير في أي وقت عند دخولك بكلمة المرور الحالية لمفتاح التشفير',
|
||||
edit: 'تعديل',
|
||||
edited: 'معدل',
|
||||
Edit: 'تعديل',
|
||||
Edit_Status: 'تعديل الحالة',
|
||||
Edit_Invite: 'تعديل الدعوة',
|
||||
End_to_end_encrypted_room: 'غرفة مشفرة بين الطرفيات',
|
||||
end_to_end_encryption: 'تشفير بين الطرفيات',
|
||||
Email_Notification_Mode_All: 'لكل إشارة أو رسالة مباشرة',
|
||||
Email_Notification_Mode_Disabled: 'معطل',
|
||||
Email_or_password_field_is_empty: 'حقل البريد الإلكتروني أو كلمة المرور فارغ',
|
||||
Email: 'البريد الإلكتروني',
|
||||
EMAIL: 'البريد الإلكتروني',
|
||||
email: 'البريد الإلكتروني',
|
||||
Empty_title: 'عنوان فارغ',
|
||||
Enable_Auto_Translate: 'تمكين الترجمة التلقائية',
|
||||
Enable_notifications: 'تفعيل الإشعارات',
|
||||
Encrypted: 'مشفر',
|
||||
Encrypted_message: 'رسالة مشفرة',
|
||||
Enter_Your_E2E_Password: 'أدخل كلمة المرور بين الطرفيات',
|
||||
Enter_Your_Encryption_Password_desc1: 'سيمكنك هذا من الوصول لرسائلك المباشرة والمجموعات الخاصة',
|
||||
Enter_Your_Encryption_Password_desc2: 'يجب إدخال كلمة المرور لتشفير وفك تشفير الرسائل المرسلة',
|
||||
Encryption_error_title: 'كلمة المرور المشفرة خاطئة',
|
||||
Encryption_error_desc: 'تعذر قراءة مفتاح التشفير أثناء الاستيراد',
|
||||
Everyone_can_access_this_channel: 'يمكن للجميع الوصول إلى هذه القناة',
|
||||
Error_uploading: 'خطأ في الرفع',
|
||||
Expiration_Days: 'انتهاء (أيام)',
|
||||
Favorite: 'مفضل',
|
||||
Favorites: 'مفضلات',
|
||||
Files: 'ملفات',
|
||||
File_description: 'وصف الملف',
|
||||
File_name: 'اسم الملف',
|
||||
Finish_recording: 'إنهاء التسجيل',
|
||||
Following_thread: 'متابعة الموضوع',
|
||||
For_your_security_you_must_enter_your_current_password_to_continue: 'من أجل حمايتك، يجب عليك إدخال كلمة المرور الحالية للمتابعة',
|
||||
Forgot_password_If_this_email_is_registered: 'إن كان البريد الإلكتروني مسجلاً، فسنرسل تعليمات إعادة تعيين كلمة المرور الخاصة بك. إذا لم تتلق بريداً إلكترونياً قريباً، فيرجى العودة والمحاولة مرة أخرى',
|
||||
Forgot_password: 'هل نسيت كلمة المرور؟',
|
||||
Forgot_Password: 'نسيت كلمة المرور',
|
||||
Forward: 'إعادة توجيه',
|
||||
Forward_Chat: 'إعادة توجيه المحادثة',
|
||||
Forward_to_department: 'إعادة توجيه للقسم',
|
||||
Forward_to_user: 'إعادة توجيه لمستخدم',
|
||||
Full_table: 'انقر لرؤية الجدول كاملاً',
|
||||
Generate_New_Link: 'إنشاء رابط جديد',
|
||||
Group_by_favorites: 'جمع حسب المفضلة',
|
||||
Group_by_type: 'جمع حسب النوع',
|
||||
Hide: 'إخفاء',
|
||||
Has_joined_the_channel: 'انضم إلى القناة',
|
||||
Has_joined_the_conversation: 'انضم إلى المحادثة',
|
||||
Has_left_the_channel: 'غادر القناة',
|
||||
Hide_System_Messages: 'إخفاء رسائل النظام',
|
||||
Hide_type_messages: 'إخفاء رسائل "{{type}}"',
|
||||
How_It_Works: 'طريقة العمل',
|
||||
Message_HideType_uj: 'مستخدم انضم',
|
||||
Message_HideType_ul: 'مستخدم غادر',
|
||||
Message_HideType_ru: 'مستخدم حُذف',
|
||||
Message_HideType_au: 'مستخدم أضيف',
|
||||
Message_HideType_mute_unmute: 'صوت المستخدم كتم / فتح',
|
||||
Message_HideType_r: 'اسم الغرفة تغير',
|
||||
Message_HideType_ut: 'مستخدم انضم للمحادثة',
|
||||
Message_HideType_wm: 'ترحيب',
|
||||
Message_HideType_rm: 'رسالة حُذفت',
|
||||
Message_HideType_subscription_role_added: 'تعيين دور جديد',
|
||||
Message_HideType_subscription_role_removed: 'دور أصبح غير معرف',
|
||||
Message_HideType_room_archived: 'غرفة أرشفت',
|
||||
Message_HideType_room_unarchived: 'غرفة ألغيت أرشفتها',
|
||||
I_Saved_My_E2E_Password: 'قمت بحفظ كلمة المرور الطرفية',
|
||||
IP: ' عنوان بروتوكول الإنترنت (الآيبي)',
|
||||
In_app: 'في التطبيق',
|
||||
IN_APP_AND_DESKTOP: 'داخل التطبيق وسطح المكتب',
|
||||
In_App_and_Desktop_Alert_info: 'يعرض شعاراً أعلى الشاشة عندما يكون التطبيق مفتوحًا، ويعرض إشعاراً على سطح المكتب',
|
||||
Invisible: 'غير مرئي',
|
||||
Invite: 'دعوة',
|
||||
is_a_valid_RocketChat_instance: 'خادم Rocket.Chat صالح',
|
||||
is_not_a_valid_RocketChat_instance: 'خادم Rocket.Chat غير صالح',
|
||||
is_typing: 'يكتب',
|
||||
Invalid_or_expired_invite_token: 'رمز الدعوة غير صالح أو منتهي الصلاحية',
|
||||
Invalid_server_version: 'الخادم الذي تحاول الاتصال به يستخدم إصدارا لم يعد مدعوماً: {{currentVersion}}.\n\n النسخ المدعومة تبدأ من {{minVersion}}',
|
||||
Invite_Link: 'رابط الدعوة',
|
||||
Invite_users: 'دعوة المستخدمين',
|
||||
Join: 'انضم',
|
||||
Join_our_open_workspace: 'انضم لمساحة عملنا المفتوحة',
|
||||
Join_your_workspace: 'انضم لمساحة عملك',
|
||||
Just_invited_people_can_access_this_channel: 'يمكن للأشخاص المدعوين فقط الوصول إلى هذه القناة',
|
||||
Language: 'اللغة',
|
||||
last_message: 'الرسالة الأخيرة',
|
||||
Leave_channel: 'مغادرة القناة',
|
||||
leaving_room: 'مغادرة الغرفة',
|
||||
leave: 'مغادرة',
|
||||
Legal: 'قانوني',
|
||||
Light: 'ساطع',
|
||||
License: 'رخصة',
|
||||
Livechat: 'محادثة مباشرة',
|
||||
Livechat_edit: 'تعديل المحادثة المباشرة',
|
||||
Login: 'تسجيل الدخول',
|
||||
Login_error: 'تم رفض تسجيل الدخول الرجاء المحاولة مرة أخرى',
|
||||
Login_with: 'تسجيل الدخول بـ',
|
||||
Logging_out: 'تسجيل الخروج',
|
||||
Logout: 'تسجيل الخروج',
|
||||
Max_number_of_uses: 'أقصى عدد للاستخدام',
|
||||
Max_number_of_users_allowed_is_number: 'أقصى عدد للمستخدمين {{maxUsers}}',
|
||||
members: 'أفراد',
|
||||
Members: 'أفراد',
|
||||
Mentioned_Messages: 'الرسائل المذكورة',
|
||||
mentioned: 'مشار',
|
||||
Mentions: 'الإشارات',
|
||||
Message_accessibility: 'الرسالة من {{user}} في {{time}}: {{message}}',
|
||||
Message_actions: 'إجراءات الرسالة',
|
||||
Message_pinned: 'الرسالة مثبتة',
|
||||
Message_removed: 'الرسالة حذفت',
|
||||
Message_starred: 'الرسالة مميزة',
|
||||
Message_unstarred: 'الرسالة غير مميزة',
|
||||
message: 'رسالة',
|
||||
messages: 'رسائل',
|
||||
Message: 'الرسالة',
|
||||
Messages: 'الرسائل',
|
||||
Message_Reported: 'تم التبليغ على الرسالة',
|
||||
Microphone_Permission_Message: 'يحتاج Rocket.Chat للوصول إلى الميكروفون الخاص بك حتى تتمكن من إرسال رسالة صوتية',
|
||||
Microphone_Permission: 'إذن الميكروفون',
|
||||
Mute: 'كتم',
|
||||
muted: 'مكتوم',
|
||||
My_servers: 'الخوادم',
|
||||
N_people_reacted: '{{n}} تفاعل الناس',
|
||||
N_users: '{{n}} مستخدمين',
|
||||
name: 'اسم',
|
||||
Name: 'اسم',
|
||||
Navigation_history: 'تاريخ التصفح',
|
||||
Never: 'أبداً',
|
||||
New_Message: 'رسالة جديدة',
|
||||
New_Password: 'كلمة مرور جديدة',
|
||||
New_Server: 'خادم جديد',
|
||||
Next: 'التالي',
|
||||
No_files: 'لا ملفات',
|
||||
No_limit: 'لا حدود',
|
||||
No_mentioned_messages: 'لا رسائل مشارة',
|
||||
No_pinned_messages: 'لا رسائل مثبتة',
|
||||
No_results_found: 'لا نتائج',
|
||||
No_starred_messages: 'لا رسائل مميزة',
|
||||
No_thread_messages: 'لا رسائل للموضوع',
|
||||
No_label_provided: 'لا {{label}} معطى',
|
||||
No_Message: 'لا رسائل',
|
||||
No_messages_yet: 'لا رسائل حتى اﻵن',
|
||||
No_Reactions: 'لا تفاعل',
|
||||
No_Read_Receipts: 'لا إيصالات قراءة',
|
||||
Not_logged: 'غير مسجل الدخول',
|
||||
Not_RC_Server: 'هذا ليس بخادم Rocket.Chat.\n{{contact}}',
|
||||
Nothing: 'لا شيء',
|
||||
Nothing_to_save: 'لا شيء للحفظ!',
|
||||
Notify_active_in_this_room: 'أبلغ المستخدمين النشطين في هذه الغرفة',
|
||||
Notify_all_in_this_room: 'أبلغ الجميع في الغرفة',
|
||||
Notifications: 'الإشعارات',
|
||||
Notification_Duration: 'زمن الإشعار',
|
||||
Notification_Preferences: 'تفضيلات الإشعار',
|
||||
No_available_agents_to_transfer: 'المندوبين غير متوفرين حالياً',
|
||||
Offline: 'غير متصل',
|
||||
Oops: 'عفوًا!',
|
||||
Omnichannel: 'القنوات الموحدة',
|
||||
Open_Livechats: 'محادثات مباشرة جارية',
|
||||
Omnichannel_enable_alert: 'أنت غير متاح ',
|
||||
Onboarding_description: 'مساحة عمل هي مساحة لفريقك ومنظمتك للتعاون. اطلب من المشرف العنوان للانضمام أو أنشئ لفريقك',
|
||||
Onboarding_join_workspace: 'انضم لمساحة عمل',
|
||||
Onboarding_subtitle: 'ما بعد بيئة فريق تعاونية',
|
||||
Onboarding_title: 'مرحبا بك في Rocket.Chat',
|
||||
Onboarding_join_open_description: 'انضم لمساحة عملنا للتواصل مع فريق Rocket.Chat ومع المجتمع',
|
||||
Onboarding_agree_terms: 'بالمواصلة أنت توافق على Rocket.Chat',
|
||||
Onboarding_less_options: 'خيارات أقل',
|
||||
Onboarding_more_options: 'خيارات أكثر',
|
||||
Online: 'متصل',
|
||||
Only_authorized_users_can_write_new_messages: 'يمكن للمستخدمين المصرح لهم فقط كتابة رسائل جديدة',
|
||||
Open_emoji_selector: 'افتح محدد الرموز التعبيرية',
|
||||
Open_Source_Communication: 'تواصل مفتوح المصدر',
|
||||
Open_your_authentication_app_and_enter_the_code: 'افتح تطبيق المصادقة الخاص بك وأدخل الرمز',
|
||||
OR: 'أو',
|
||||
OS: 'نظام التشغيل',
|
||||
Overwrites_the_server_configuration_and_use_room_config: 'يمكن للمستخدمين المصرح لهم فقط كتابة رسائل جديدة',
|
||||
Password: 'كلمة المرور',
|
||||
Parent_channel_or_group: 'القناة أو المجموعة الأب',
|
||||
Permalink_copied_to_clipboard: 'تم نسخ الرابط الثابت إلى الحافظة!',
|
||||
Phone: 'الهاتف',
|
||||
Pin: 'ثبت',
|
||||
Pinned_Messages: 'رسائل مثبتة',
|
||||
pinned: 'مثبت',
|
||||
Pinned: 'مثبت',
|
||||
Please_add_a_comment: 'الرجاء إضافة تعليق',
|
||||
Please_enter_your_password: 'الرجاء إدخال كلمة المرور',
|
||||
Please_wait: 'الرجاء الإنتظار',
|
||||
Preferences: 'التفضيلات',
|
||||
Preferences_saved: 'تم حفظ التفضيلات',
|
||||
Privacy_Policy: 'سياسة الخصوصية',
|
||||
Private_Channel: 'قناة خاصة',
|
||||
Private_Groups: 'مجموعات خاصة',
|
||||
Private: 'خاص',
|
||||
Processing: 'جار معالجة...',
|
||||
Profile_saved_successfully: 'تم حفظ الملف الشخصي بنجاح!',
|
||||
Profile: 'الملف الشخصي',
|
||||
Public_Channel: 'قناة عامة',
|
||||
Public: 'عام',
|
||||
PUSH_NOTIFICATIONS: 'الإشعارات',
|
||||
Push_Notifications_Alert_Info: 'يتم إرسال هذه الإشعارات إليك عندما لا يكون التطبيق مفتوحاً',
|
||||
Quote: 'اقتباس',
|
||||
Reactions_are_disabled: 'التفاعل معطل',
|
||||
Reactions_are_enabled: 'التفاعل مفعل',
|
||||
Reactions: 'التفاعلات',
|
||||
Read: 'قراءة',
|
||||
Read_External_Permission_Message: 'يحتاج Rocket.chat للوصول إلى الصور والملفات الموجودة على الجهاز',
|
||||
Read_External_Permission: 'صلاحية قراءة الوسائط',
|
||||
Read_Only_Channel: 'قناة للقراءة فقط',
|
||||
Read_Only: 'قراءة فقط',
|
||||
Read_Receipt: 'قراءة المستلم',
|
||||
Receive_Group_Mentions: 'تلقي إشارات المجموعة',
|
||||
Receive_Group_Mentions_Info: 'تلقي @all و @here للإشعارات',
|
||||
Register: 'تسجيل',
|
||||
Repeat_Password: 'أعد كلمة المرور',
|
||||
Replied_on: 'تم الرد على:',
|
||||
replies: 'ردود',
|
||||
reply: 'رد',
|
||||
Reply: 'رد',
|
||||
Report: 'بلاغ',
|
||||
Receive_Notification: 'استلام الإشعار',
|
||||
Receive_notifications_from: 'استلام الإشعارات من {{name}}',
|
||||
Resend: 'أعد الإرسال',
|
||||
Reset_password: 'إعادة تعيين كلمة المرور',
|
||||
resetting_password: 'إعادة تعيين كلمة المرور',
|
||||
RESET: 'إعادة',
|
||||
Return: 'العودة',
|
||||
Review_app_title: 'هل أنت مستمتع بهذا التطبيق؟',
|
||||
Review_app_desc: 'قم بإعطائنا 5 نجوم {{store}}',
|
||||
Review_app_yes: 'أكيد!',
|
||||
Review_app_no: 'لا',
|
||||
Review_app_later: 'ربما لاحقاً',
|
||||
Review_app_unable_store: 'لم يتمكن من فتح {{store}}',
|
||||
Review_this_app: 'تقييم هذا التطبيق',
|
||||
Remove: 'حذف',
|
||||
Roles: 'أدوار',
|
||||
Room_actions: 'إجراءات الغرفة',
|
||||
Room_changed_announcement: 'تم تغيير إعلان الغرفة إلى: {{announcement}} من قبل {{userBy}}',
|
||||
Room_changed_description: 'تم تغيير وصف الغرفة إلى: {{description}} من قبل {{userBy}}',
|
||||
Room_changed_privacy: 'تم تغيير نوع الغرفة إلى: {{type}} من قبل {{userBy}}',
|
||||
Room_changed_topic: 'تم تغيير موضوع الغرفة إلى: {{topic}} من قبل {{userBy}}',
|
||||
Room_Files: 'ملفات الغرفة',
|
||||
Room_Info_Edit: 'تعديل معلومات الغرفة',
|
||||
Room_Info: 'معلومات الغرفة',
|
||||
Room_Members: 'أعضاء الغرفة',
|
||||
Room_name_changed: 'تم تغيير اسم الغرفة إلى: {{name}} من قبل {{userBy}}',
|
||||
SAVE: 'حفظ',
|
||||
Saved: 'تم الحفظ',
|
||||
Save_Changes: 'حفظ التغيرات',
|
||||
Save: 'حفظ',
|
||||
saving_preferences: 'حفظ التفضيلات',
|
||||
saving_profile: 'حفظ الملف الشخصي',
|
||||
saving_settings: 'حفظ الإعدادات',
|
||||
saved_to_gallery: 'تم الحفظ في المعرض',
|
||||
Save_Your_E2E_Password: 'حفظ كلمة المرور بين الطرفين',
|
||||
Save_Your_Encryption_Password: 'حفظ كلمة المرور المشفرة',
|
||||
Save_Your_Encryption_Password_warning: 'لا نقوم بتخزين كلمة المرور، الرجاء حفظها لديك في مكان آخر',
|
||||
Save_Your_Encryption_Password_info: 'لا يمكن إستعادة كلمة المرور في حال فقدانها ولن تستطيع الوصول لرسائلك',
|
||||
Search_Messages: 'بحث الرسائل',
|
||||
Search: 'بحث',
|
||||
Search_by: 'بحث حسب',
|
||||
Search_global_users: 'بحث عام عن المستخدمين',
|
||||
Search_global_users_description: 'إذا قمت بالتفعيل، فسيمكنك البحث عن أي مستخدم في شركات أو خوادم أخرى',
|
||||
Seconds: '{{second}} ثواني',
|
||||
Select_Avatar: 'حدد الصورة الرمزية',
|
||||
Select_Server: 'حدد خادم',
|
||||
Select_Users: 'حدد مستخدمين',
|
||||
Select_a_Channel: 'حدد قناة',
|
||||
Select_a_Department: 'حدد قسم',
|
||||
Select_an_option: 'حدد خيار',
|
||||
Select_a_User: 'حدد مستخدم',
|
||||
Send: 'إرسال',
|
||||
Send_audio_message: 'إرسال رسالة صوتية',
|
||||
Send_crash_report: 'إرسال تقرير الأعطال',
|
||||
Send_message: 'إرسال الرسالة',
|
||||
Send_me_the_code_again: 'أرسل الرمز مرة أخرى',
|
||||
Send_to: 'إرسال إلى...',
|
||||
Sending_to: 'يتم الإرسال إلى',
|
||||
Sent_an_attachment: 'تم إرسال المرفق',
|
||||
Server: 'خادم',
|
||||
Servers: 'خوادم',
|
||||
Server_version: 'نسخة الخادم: {{version}}',
|
||||
Set_username_subtitle: 'يتم استخدام اسم المستخدم للسماح للآخرين بذكرك في الرسائل',
|
||||
Set_custom_status: 'حدد حالة خاصة',
|
||||
Set_status: 'حدد حالة',
|
||||
Status_saved_successfully: 'تم حفظ الحالة بنجاح!',
|
||||
Settings: 'الإعدادات',
|
||||
Settings_succesfully_changed: 'تم تعديل الإعدادات بنجاح!',
|
||||
Share: 'مشاركة',
|
||||
Share_Link: 'مشاركة رابط',
|
||||
Share_this_app: 'مشاركة هذا البرنامج',
|
||||
Show_more: 'إظهار أكثر..',
|
||||
Show_Unread_Counter: 'عرض عدد الرسائل غير المقروءة',
|
||||
Show_Unread_Counter_Info: 'يتم عرض العدد غير المقروء كشارة على يمين القناة في القائمة',
|
||||
Sign_in_your_server: 'تسجيل الدخول إلى الخادم الخاص بك',
|
||||
Sign_Up: 'تسجيل جديد',
|
||||
Some_field_is_invalid_or_empty: 'بعض الحقول غير صالحة أو فارغة',
|
||||
Sorting_by: 'فرز حسب {{key}}',
|
||||
Sound: 'الصوت',
|
||||
Star_room: 'تمييز الغرفة',
|
||||
Star: 'تمييز',
|
||||
Starred_Messages: 'رسائل مميزة',
|
||||
starred: 'مميزة',
|
||||
Starred: 'مميزة',
|
||||
Start_of_conversation: 'بداية المحادثة',
|
||||
Start_a_Discussion: 'ابدأ نقاش',
|
||||
Started_discussion: 'بدأ النقاش',
|
||||
Started_call: 'أجرى الاتصال {{userBy}}',
|
||||
Submit: 'إرسال',
|
||||
Table: 'جدول',
|
||||
Tags: 'العلامات',
|
||||
Take_a_photo: 'التقاط صورة',
|
||||
Take_a_video: 'التقاط فيديو',
|
||||
Take_it: 'التقط!',
|
||||
tap_to_change_status: 'انقر لتغيير الحالة',
|
||||
Tap_to_view_servers_list: 'انقر لعرض قائمة الخوادم',
|
||||
Terms_of_Service: ' شروط الخدمة ',
|
||||
Theme: 'سمة',
|
||||
The_user_wont_be_able_to_type_in_roomName: 'المستخدم لن يتمكن من الكتابة في {{roomName}}',
|
||||
The_user_will_be_able_to_type_in_roomName: 'المستخدم سيتمكن من الكتابة في {{roomName}}',
|
||||
There_was_an_error_while_action: 'حدث خطأ أثناء {{action}}!',
|
||||
This_room_is_blocked: 'هذه الغرفة محظورة',
|
||||
This_room_is_read_only: 'هذه الغرفة للقراءة فقط',
|
||||
Thread: 'موضوع',
|
||||
Threads: 'مواضيع',
|
||||
Timezone: 'المنطقة الزمنية',
|
||||
To: 'إلى',
|
||||
topic: 'عنوان',
|
||||
Topic: 'عنوان',
|
||||
Translate: 'ترجمة',
|
||||
Try_again: 'حاول مجدداً',
|
||||
Two_Factor_Authentication: 'المصادقة الثنائية',
|
||||
Type_the_channel_name_here: 'اكتب اسم القناة هنا',
|
||||
unarchive: 'إلغاء الأرشفة',
|
||||
UNARCHIVE: 'إلغاء الأرشفة',
|
||||
Unblock_user: 'إلغاء حظر عن مستخدم',
|
||||
Unfavorite: 'إزالة من المفضلة',
|
||||
Unfollowed_thread: 'موضوع غير متابع',
|
||||
Unmute: 'إلغاء كتم',
|
||||
unmuted: 'إلغاء كتم',
|
||||
Unpin: 'إلغاء التثبيت',
|
||||
unread_messages: 'رسائل غير مقروءة',
|
||||
Unread: 'غير مقروء',
|
||||
Unread_on_top: 'غير مقروء في الأعلى',
|
||||
Unstar: 'إلغاء التمييز',
|
||||
Updating: 'جار التحديث...',
|
||||
Uploading: 'جار الرفع',
|
||||
Upload_file_question_mark: 'رفع الملف؟',
|
||||
User: 'مستخدم',
|
||||
Users: 'مستخدمين',
|
||||
User_added_by: 'مستخدم {{userAdded}} أضيف من قبل {{userBy}}',
|
||||
User_Info: 'معلومات المستخدم',
|
||||
User_has_been_key: 'تمت {{key}} المستخدم!',
|
||||
User_is_no_longer_role_by_: 'تم إزالة الدور {{role}} عن المستخدم {{user}} من قبل {{userBy}}',
|
||||
User_muted_by: 'المستخدم {{userMuted}} كتم من قبل {{userBy}}',
|
||||
User_removed_by: 'المستخدم {{userRemoved}} حذف من قبل {{userBy}}',
|
||||
User_sent_an_attachment: '{{user}} أرسل مرفقًا',
|
||||
User_unmuted_by: 'ألغى {{userBy}} الكتم عن {{userUnmuted}}',
|
||||
User_was_set_role_by_: 'أضيف دور {{role}} للمستخدم {{user}} من قبل {{userBy}}',
|
||||
Username_is_empty: 'اسم المستخدم فارغ',
|
||||
Username: 'اسم المستخدم',
|
||||
Username_or_email: 'اسم المستخدم أو البريد الالكتروني',
|
||||
Uses_server_configuration: 'يستخدم إعداد الخادم',
|
||||
Usually_a_discussion_starts_with_a_question_like_How_do_I_upload_a_picture: 'عادةً، النقاش يبدأ بسؤال، على سبيل المثال: كيف أرفع صورة؟',
|
||||
Validating: 'يتم التحقق',
|
||||
Registration_Succeeded: 'تم التسجيل بنجاح',
|
||||
Verify: 'تحقق',
|
||||
Verify_email_title: 'تم التسجيل!',
|
||||
Verify_email_desc: 'لقد أرسلنا إليك بريداً إلكترونياً لتأكيد تسجيلك. إذا لم تتلق البريد الإلكتروني قريباً، فيرجى العودة والمحاولة مرة أخرى',
|
||||
Verify_your_email_for_the_code_we_sent: 'يرجى تأكيد البريد الإلكتروني عبر الرمز المرسل',
|
||||
Video_call: 'مكالمة فيديو',
|
||||
View_Original: 'عرض المحتوى الأصلي',
|
||||
Voice_call: 'مكالمة صوتية',
|
||||
Waiting_for_network: 'بانتظار توفر شبكة...',
|
||||
Websocket_disabled: 'تم تعطيل Websocket لهذا الخادم.\n{{contact}}',
|
||||
Welcome: 'مرحبا',
|
||||
What_are_you_doing_right_now: 'ما الذي تفعله حالياً؟',
|
||||
Whats_your_2fa: 'ما هو رمز التحقق الثنائي؟',
|
||||
Without_Servers: 'بدون خوادم',
|
||||
Workspaces: 'مساحات العمل',
|
||||
Would_you_like_to_return_the_inquiry: 'هل ترغب بالرد على السؤال؟',
|
||||
Write_External_Permission_Message: 'يحتاج Rocket.Chat للوصول إلى معرض الصور الخاص بك حتى تتمكن من حفظ الصور',
|
||||
Write_External_Permission: 'إذن معرض',
|
||||
Yes: 'نعم',
|
||||
Yes_action_it: 'نعم، {{action}}!',
|
||||
Yesterday: 'أمس',
|
||||
You_are_in_preview_mode: 'أنت في وضع المعاينة',
|
||||
You_are_offline: 'أنت غير متصل',
|
||||
You_can_search_using_RegExp_eg: 'يمكنك استخدام RegExp. مثال: `/^text$/i`',
|
||||
You_colon: 'أنت: ',
|
||||
you_were_mentioned: 'تمت الإشارة إليك',
|
||||
You_were_removed_from_channel: 'تمت إزالتك من {{channel}}',
|
||||
you: 'أنت',
|
||||
You: 'أنت',
|
||||
Logged_out_by_server: 'لقد تم تسجيل خروجك من قبل الخادم. الرجاد الدخول من جديد',
|
||||
You_need_to_access_at_least_one_RocketChat_server_to_share_something: 'تحتاج إلى الوصول إلى خادم Rocket.Chat واحد على الأقل لمشاركة شيء ما',
|
||||
You_need_to_verifiy_your_email_address_to_get_notications: 'يجب تأكيد البريد الإلكتروني حتى تصلك الإشعارات',
|
||||
Your_certificate: 'شهادتك',
|
||||
Your_message: 'رسالتك',
|
||||
Your_invite_link_will_expire_after__usesLeft__uses: 'سوف تنتهي صلاحية رابط الدعوة الخاص بك بعد {{usesLeft}} استخدامات',
|
||||
Your_invite_link_will_expire_on__date__or_after__usesLeft__uses: 'ستنتهي صلاحية رابط الدعوة الخاص بك في {{date}} أو بعد {{usesLeft}} استخدامات',
|
||||
Your_invite_link_will_expire_on__date__: 'ستنتهي صلاحية رابط الدعوة الخاص بك في {{date}}',
|
||||
Your_invite_link_will_never_expire: 'لن تنتهي صلاحية رابط الدعوة الخاص بك',
|
||||
Your_workspace: 'مساحة عملك',
|
||||
Your_password_is: 'كلمة المرور الخاصة بك هي',
|
||||
Version_no: 'النسخة: {{version}}',
|
||||
You_will_not_be_able_to_recover_this_message: 'لن تتمكن من استعادة هذه الرسالة!',
|
||||
You_will_unset_a_certificate_for_this_server: 'ستلغي شهادة هذا الخادم',
|
||||
Change_Language: 'تغيير اللغة',
|
||||
Crash_report_disclaimer: 'نحن لا نتتبع محتوى محادثاتك أبداً. يحتوي تقرير الأعطال فقط على المعلومات ذات الصلة لنا من أجل تحديد المشاكل وإصلاحها',
|
||||
Type_message: 'اكتب رسالة',
|
||||
Room_search: 'البحث عن الغرف',
|
||||
Room_selection: 'اختيار الغرفة 1...9',
|
||||
Next_room: 'الغرفة المجاورة',
|
||||
Previous_room: 'الغرفة السابقة',
|
||||
New_room: 'غرفة جديدة',
|
||||
Upload_room: 'تحميل إلى الغرفة',
|
||||
Search_messages: 'رسائل البحث',
|
||||
Scroll_messages: 'تمرير الرسائل',
|
||||
Reply_latest: 'الرد على الأحدث',
|
||||
Reply_in_Thread: 'الرد في موضوع',
|
||||
Server_selection: 'اختيار الخادم',
|
||||
Server_selection_numbers: 'اختيار الخادم 1...9',
|
||||
Add_server: 'إضافة خادم',
|
||||
New_line: 'سطر جديد',
|
||||
You_will_be_logged_out_of_this_application: 'سيتم تسجيل خروجك من هذا التطبيق.',
|
||||
Clear: 'مسح',
|
||||
This_will_clear_all_your_offline_data: 'سيؤدي هذا إلى محو جميع بياناتك في وضع عدم الاتصال.',
|
||||
This_will_remove_all_data_from_this_server: 'هذا الإجراء يحذف جميع البيانات من هذا السيرفر',
|
||||
Mark_unread: 'علامة غير مقروء',
|
||||
Wait_activation_warning: 'يحب تفعيل حسابك من المشرف قبل تسجيل الدخول',
|
||||
Screen_lock: 'قفل الشاشة',
|
||||
Local_authentication_biometry_title: 'صادق',
|
||||
Local_authentication_biometry_fallback: 'استخدم كلمة المرور',
|
||||
Local_authentication_unlock_option: 'افتح القفل بكلمة المرور',
|
||||
Local_authentication_change_passcode: 'تغيير كلمة المرور',
|
||||
Local_authentication_info: 'تنويه: يجب حذف التطبيق عند نسيان كلمة المرور',
|
||||
Local_authentication_facial_recognition: 'التعرف على الوجه',
|
||||
Local_authentication_fingerprint: 'البصمة',
|
||||
Local_authentication_unlock_with_label: 'فتح القفل بـ {{label}}',
|
||||
Local_authentication_auto_lock_60: 'بعد دقيقة',
|
||||
Local_authentication_auto_lock_300: 'بعد 5 دقائق',
|
||||
Local_authentication_auto_lock_900: 'بعد 15 دقيقة',
|
||||
Local_authentication_auto_lock_1800: 'بعد 30 دقيقة',
|
||||
Local_authentication_auto_lock_3600: 'بعد ساعة',
|
||||
Passcode_enter_title: 'أدخل كلمة المرور',
|
||||
Passcode_choose_title: 'اختر كلمة المرور الجديدة',
|
||||
Passcode_choose_confirm_title: 'تأكيد كلمة المرور الجديدة',
|
||||
Passcode_choose_error: 'كلمة المرور غير متطابقة. حاول مجدداً',
|
||||
Passcode_choose_force_set: 'كلمة المرور مطلوبة من المشرف',
|
||||
Passcode_app_locked_title: 'التطبيق مقفل',
|
||||
Passcode_app_locked_subtitle: 'حاول مجدداً بعد {{timeLeft}} ثوان',
|
||||
After_seconds_set_by_admin: 'بعد {{seconds}} ثوان (حددها المدير)',
|
||||
Dont_activate: 'لا تقم بالتفعيل الآن',
|
||||
Queued_chats: 'محادثات في قائمى الانتظار',
|
||||
Queue_is_empty: 'قائمة الانتظار فارغة',
|
||||
Logout_from_other_logged_in_locations: 'تسجيل الخروج من الأماكن الأخرى',
|
||||
You_will_be_logged_out_from_other_locations: 'سيتم تسجيل خروج من الأماكن الأخرى',
|
||||
Logged_out_of_other_clients_successfully: 'تم تسجيل الخروج من الأماكن الأخرى بنجاح',
|
||||
Logout_failed: 'فشل تسجيل الخروج!',
|
||||
Log_analytics_events: 'تحليلات سجل الأحداث'
|
||||
};
|
|
@ -552,7 +552,7 @@ export default {
|
|||
Users: 'Benutzer',
|
||||
User_added_by: 'Benutzer {{userAdded}} hinzugefügt von {{userBy}}',
|
||||
User_Info: 'Benutzerinfo',
|
||||
User_has_been_key: 'Benutzer wurde {{key}}!',
|
||||
User_has_been_key: 'Benutzer wurde {{key}}',
|
||||
User_is_no_longer_role_by_: '{{user}} ist nicht länger {{role}} von {{userBy}}',
|
||||
User_muted_by: 'Benutzer {{userMuted}} von {{userBy}} stummgeschaltet',
|
||||
User_removed_by: 'Benutzer {{userRemoved}} wurde von {{userBy}} entfernt',
|
||||
|
|
|
@ -167,7 +167,7 @@ export default {
|
|||
Create_Channel: 'Create Channel',
|
||||
Create_Direct_Messages: 'Create Direct Messages',
|
||||
Create_Discussion: 'Create Discussion',
|
||||
Created_snippet: 'Created a snippet',
|
||||
Created_snippet: 'created a snippet',
|
||||
Create_a_new_workspace: 'Create a new workspace',
|
||||
Create: 'Create',
|
||||
Custom_Status: 'Custom Status',
|
||||
|
@ -247,9 +247,9 @@ export default {
|
|||
Group_by_favorites: 'Group favorites',
|
||||
Group_by_type: 'Group by type',
|
||||
Hide: 'Hide',
|
||||
Has_joined_the_channel: 'Has joined the channel',
|
||||
Has_joined_the_conversation: 'Has joined the conversation',
|
||||
Has_left_the_channel: 'Has left the channel',
|
||||
Has_joined_the_channel: 'has joined the channel',
|
||||
Has_joined_the_conversation: 'has joined the conversation',
|
||||
Has_left_the_channel: 'has left the channel',
|
||||
Hide_System_Messages: 'Hide System Messages',
|
||||
Hide_type_messages: 'Hide "{{type}}" messages',
|
||||
How_It_Works: 'How It Works',
|
||||
|
@ -281,6 +281,8 @@ export default {
|
|||
Invite_Link: 'Invite Link',
|
||||
Invite_users: 'Invite users',
|
||||
Join: 'Join',
|
||||
Join_Code: 'Join Code',
|
||||
Insert_Join_Code: 'Insert Join Code',
|
||||
Join_our_open_workspace: 'Join our open workspace',
|
||||
Join_your_workspace: 'Join your workspace',
|
||||
Just_invited_people_can_access_this_channel: 'Just invited people can access this channel',
|
||||
|
@ -552,7 +554,7 @@ export default {
|
|||
Users: 'Users',
|
||||
User_added_by: 'User {{userAdded}} added by {{userBy}}',
|
||||
User_Info: 'User Info',
|
||||
User_has_been_key: 'User has been {{key}}!',
|
||||
User_has_been_key: 'User has been {{key}}',
|
||||
User_is_no_longer_role_by_: '{{user}} is no longer {{role}} by {{userBy}}',
|
||||
User_muted_by: 'User {{userMuted}} muted by {{userBy}}',
|
||||
User_removed_by: 'User {{userRemoved}} removed by {{userBy}}',
|
||||
|
@ -680,5 +682,27 @@ export default {
|
|||
No_threads: 'There are no threads',
|
||||
No_threads_following: 'You are not following any threads',
|
||||
No_threads_unread: 'There are no unread threads',
|
||||
Messagebox_Send_to_channel: 'Send to channel'
|
||||
Messagebox_Send_to_channel: 'Send to channel',
|
||||
Set_as_leader: 'Set as leader',
|
||||
Set_as_moderator: 'Set as moderator',
|
||||
Set_as_owner: 'Set as owner',
|
||||
Remove_as_leader: 'Remove as leader',
|
||||
Remove_as_moderator: 'Remove as moderator',
|
||||
Remove_as_owner: 'Remove as owner',
|
||||
Remove_from_room: 'Remove from room',
|
||||
Ignore: 'Ignore',
|
||||
Unignore: 'Unignore',
|
||||
User_has_been_ignored: 'User has been ignored',
|
||||
User_has_been_unignored: 'User is no longer ignored',
|
||||
User_has_been_removed_from_s: 'User has been removed from {{s}}',
|
||||
User__username__is_now_a_leader_of__room_name_: 'User {{username}} is now a leader of {{room_name}}',
|
||||
User__username__is_now_a_moderator_of__room_name_: 'User {{username}} is now a moderator of {{room_name}}',
|
||||
User__username__is_now_a_owner_of__room_name_: 'User {{username}} is now a owner of {{room_name}}',
|
||||
User__username__removed_from__room_name__leaders: 'User {{username}} removed from {{room_name}} leaders',
|
||||
User__username__removed_from__room_name__moderators: 'User {{username}} removed from {{room_name}} moderators',
|
||||
User__username__removed_from__room_name__owners: 'User {{username}} removed from {{room_name}} owners',
|
||||
The_user_will_be_removed_from_s: 'The user will be removed from {{s}}',
|
||||
Yes_remove_user: 'Yes, remove user!',
|
||||
Direct_message: 'Direct message',
|
||||
Message_Ignored: 'Message ignored. Tap to display it.'
|
||||
};
|
||||
|
|
|
@ -146,7 +146,7 @@ export default {
|
|||
Whats_the_password_for_your_certificate: '¿Cuál es la contraseña de tu cerficiado?',
|
||||
Create_account: 'Crear una cuenta',
|
||||
Create_Channel: 'Crear Sala',
|
||||
Created_snippet: 'Crear snippet',
|
||||
Created_snippet: 'crear snippet',
|
||||
Create_a_new_workspace: 'Crear un Workspace',
|
||||
Create: 'Crear',
|
||||
Dark: 'Óscuro',
|
||||
|
@ -192,9 +192,9 @@ export default {
|
|||
Group_by_favorites: 'Agrupar por favoritos',
|
||||
Group_by_type: 'Agrupar por tipo',
|
||||
Hide: 'Ocultar',
|
||||
Has_joined_the_channel: 'Se ha unido al canal',
|
||||
Has_joined_the_conversation: 'Se ha unido a la conversación',
|
||||
Has_left_the_channel: 'Ha dejado el canal',
|
||||
Has_joined_the_channel: 'se ha unido al canal',
|
||||
Has_joined_the_conversation: 'se ha unido a la conversación',
|
||||
Has_left_the_channel: 'ha dejado el canal',
|
||||
In_App_And_Desktop: 'In-app and Desktop',
|
||||
In_App_and_Desktop_Alert_info: 'Muestra un banner en la parte superior de la pantalla cuando la aplicación está abierta y muestra una notificación en el escritorio',
|
||||
Invisible: 'Invisible',
|
||||
|
@ -406,7 +406,7 @@ export default {
|
|||
Upload_file_question_mark: 'Subir fichero?',
|
||||
Users: 'Usuarios',
|
||||
User_added_by: 'Usuario {{userAdded}} añadido por {{userBy}}',
|
||||
User_has_been_key: 'El usuario ha sido {{key}}!',
|
||||
User_has_been_key: 'El usuario ha sido {{key}}',
|
||||
User_is_no_longer_role_by_: '{{user}} ha dejado de ser {{role}} por {{userBy}}',
|
||||
User_muted_by: 'Usuario {{userMuted}} muteado por {{userBy}}',
|
||||
User_removed_by: 'Usuario {{userRemoved}} eliminado por {{userBy}}',
|
||||
|
|
|
@ -163,7 +163,7 @@ export default {
|
|||
Create_Channel: 'Créer un canal',
|
||||
Create_Direct_Messages: 'Créer un message direct',
|
||||
Create_Discussion: 'Créer une Discussion',
|
||||
Created_snippet: 'Créé un extrait',
|
||||
Created_snippet: 'créé un extrait',
|
||||
Create_a_new_workspace: 'Créer un nouvel espace de travail',
|
||||
Create: 'Créer',
|
||||
Custom_Status: 'Statut Personnalisé',
|
||||
|
@ -173,9 +173,9 @@ export default {
|
|||
Default_browser: 'Navigateur par défaut',
|
||||
Delete_Room_Warning: 'Supprimer une salle supprimera tous les messages postés dans la salle. Ça ne peut pas être annulé.',
|
||||
Department: 'Département',
|
||||
delete: 'supprimez',
|
||||
Delete: 'Supprimez',
|
||||
DELETE: 'SUPPRIMEZ',
|
||||
delete: 'supprimer',
|
||||
Delete: 'Supprimer',
|
||||
DELETE: 'SUPPRIMER',
|
||||
deleting_room: 'effacement de la salle',
|
||||
description: 'la description',
|
||||
Description: 'La description',
|
||||
|
@ -225,9 +225,9 @@ export default {
|
|||
Group_by_favorites: 'Grouper par favoris',
|
||||
Group_by_type: 'Grouper par type',
|
||||
Hide: 'Cacher',
|
||||
Has_joined_the_channel: 'A rejoint le canal',
|
||||
Has_joined_the_conversation: 'A rejoint la conversation',
|
||||
Has_left_the_channel: 'A quitté la chaîne',
|
||||
Has_joined_the_channel: 'a rejoint le canal',
|
||||
Has_joined_the_conversation: 'a rejoint la conversation',
|
||||
Has_left_the_channel: 'a quitté la chaîne',
|
||||
Hide_System_Messages: 'Masquer les messages système',
|
||||
Hide_type_messages: 'Masquer les messages "{{type}}"',
|
||||
Message_HideType_uj: 'L\'utilisateur a rejoint',
|
||||
|
@ -391,7 +391,7 @@ export default {
|
|||
replies: 'réponses',
|
||||
reply: 'répondre',
|
||||
Reply: 'Répondre',
|
||||
Report: 'Reporter',
|
||||
Report: 'Signaler',
|
||||
Receive_Notification: 'Recevoir une notification',
|
||||
Receive_notifications_from: 'Recevoir les notifications de {{name}}',
|
||||
Resend: 'Renvoyer',
|
||||
|
@ -520,7 +520,7 @@ export default {
|
|||
Users: 'Utilisateurs',
|
||||
User_added_by: 'L\'utilisateur {{userAdded}} a été ajouté par {{userBy}}',
|
||||
User_Info: 'Info d\'utilisateur',
|
||||
User_has_been_key: 'L\'utilisateur a été {{key}}!',
|
||||
User_has_been_key: 'L\'utilisateur a été {{key}}',
|
||||
User_is_no_longer_role_by_: '{{user}} n\'est plus {{role}} par {{userBy}}',
|
||||
User_muted_by: 'L\'utilisateur {{userMuted}} a été rendu muet par {{userBy}}',
|
||||
User_removed_by: 'L\'utilisateur {{userRemoved}} a été retiré par {{userBy}}',
|
||||
|
|
|
@ -549,7 +549,7 @@ export default {
|
|||
Users: 'Utenti',
|
||||
User_added_by: 'Utente {{userAdded}} aggiunto da {{userBy}}',
|
||||
User_Info: 'Informazioni utente',
|
||||
User_has_been_key: 'Utente {{key}}!',
|
||||
User_has_been_key: 'Utente {{key}}',
|
||||
User_is_no_longer_role_by_: '{{user}} non è più {{role}} da {{userBy}}',
|
||||
User_muted_by: 'Utente {{userMuted}} silenziato da {{userBy}}',
|
||||
User_removed_by: 'Utente {{userRemoved}} rimosso da {{userBy}}',
|
||||
|
|
|
@ -464,7 +464,7 @@ export default {
|
|||
Users: 'ユーザー',
|
||||
User_added_by: '{{userBy}} が {{userAdded}} を追加しました',
|
||||
User_Info: 'ユーザー情報',
|
||||
User_has_been_key: 'ユーザーは{{ key }}!',
|
||||
User_has_been_key: 'ユーザーは{{ key }}',
|
||||
User_is_no_longer_role_by_: '{{userBy}} は {{user}} のロール {{role}} を削除しました。',
|
||||
User_muted_by: '{{userBy}} は {{userMuted}} をミュートしました。',
|
||||
User_removed_by: '{{userBy}} は {{userRemoved}} を退出させました。',
|
||||
|
|
|
@ -148,7 +148,7 @@ export default {
|
|||
Whats_the_password_for_your_certificate: 'Wat is het wachtwoord voor je certificate?',
|
||||
Create_account: 'Maak een account',
|
||||
Create_Channel: 'Maak een kanaal',
|
||||
Created_snippet: 'Snippet gemaakt',
|
||||
Created_snippet: 'snippet gemaakt',
|
||||
Create_a_new_workspace: 'Een nieuwe workspace maken',
|
||||
Create: 'Maken',
|
||||
Dark: 'Donker',
|
||||
|
@ -197,9 +197,9 @@ export default {
|
|||
Group_by_favorites: 'Sorteer op favorieten',
|
||||
Group_by_type: 'Sorteer op type',
|
||||
Hide: 'Verberg',
|
||||
Has_joined_the_channel: 'Is bij het kanaal gekomen',
|
||||
Has_joined_the_conversation: 'Neemt deel aan het gesprek',
|
||||
Has_left_the_channel: 'Heeft het kanaal verlaten',
|
||||
Has_joined_the_channel: 'is bij het kanaal gekomen',
|
||||
Has_joined_the_conversation: 'neemt deel aan het gesprek',
|
||||
Has_left_the_channel: 'heeft het kanaal verlaten',
|
||||
In_App_And_Desktop: 'In-app en Desktop',
|
||||
In_App_and_Desktop_Alert_info: 'Laat een banner bovenaan het scherm zien als de app open is en geeft een notificatie op de desktop',
|
||||
Invisible: 'Onzichtbaar',
|
||||
|
@ -427,7 +427,7 @@ export default {
|
|||
Users: 'Gebruikers',
|
||||
User_added_by: 'Gebruiker {{userAdded}} toegevoegd door {{userBy}}',
|
||||
User_Info: 'Gebruiker Info',
|
||||
User_has_been_key: 'Gebruiker is {{key}}!',
|
||||
User_has_been_key: 'Gebruiker is {{key}}',
|
||||
User_is_no_longer_role_by_: '{{user}} is geen {{role}} meer door {{userBy}}',
|
||||
User_muted_by: 'Gebruiker {{userMuted}} gedempt door {{userBy}}',
|
||||
User_removed_by: 'Gebruiker {{userRemoved}} verwijderd door {{userBy}}',
|
||||
|
|
|
@ -167,7 +167,7 @@ export default {
|
|||
Create_Channel: 'Criar Canal',
|
||||
Create_Direct_Messages: 'Criar Mensagens Diretas',
|
||||
Create_Discussion: 'Criar Discussão',
|
||||
Created_snippet: 'Criou um snippet',
|
||||
Created_snippet: 'criou um snippet',
|
||||
Create_a_new_workspace: 'Criar nova área de trabalho',
|
||||
Create: 'Criar',
|
||||
Dark: 'Escuro',
|
||||
|
@ -241,9 +241,9 @@ export default {
|
|||
Generate_New_Link: 'Gerar novo convite',
|
||||
Group_by_favorites: 'Agrupar favoritos',
|
||||
Group_by_type: 'Agrupar por tipo',
|
||||
Has_joined_the_channel: 'Entrou no canal',
|
||||
Has_joined_the_conversation: 'Entrou na conversa',
|
||||
Has_left_the_channel: 'Saiu da conversa',
|
||||
Has_joined_the_channel: 'entrou no canal',
|
||||
Has_joined_the_conversation: 'entrou na conversa',
|
||||
Has_left_the_channel: 'saiu da conversa',
|
||||
Hide_System_Messages: 'Esconder mensagens do sistema',
|
||||
Hide_type_messages: 'Esconder mensagens de "{{type}}"',
|
||||
Message_HideType_uj: 'Utilizador Entrou',
|
||||
|
@ -270,6 +270,8 @@ export default {
|
|||
Invite_Link: 'Link de Convite',
|
||||
Invite_users: 'Convidar usuários',
|
||||
Join: 'Entrar',
|
||||
Join_Code: 'Insira o Código da Sala',
|
||||
Insert_Join_Code: 'Insira o código para entrar na sala',
|
||||
Join_our_open_workspace: 'Entra na nossa workspace pública',
|
||||
Join_your_workspace: 'Entre na sua workspace',
|
||||
Just_invited_people_can_access_this_channel: 'Apenas as pessoas convidadas podem acessar este canal',
|
||||
|
@ -509,7 +511,7 @@ export default {
|
|||
User: 'Usuário',
|
||||
Users: 'Usuários',
|
||||
User_added_by: 'Usuário {{userAdded}} adicionado por {{userBy}}',
|
||||
User_has_been_key: 'Usuário foi {{key}}!',
|
||||
User_has_been_key: 'Usuário foi {{key}}',
|
||||
User_is_no_longer_role_by_: '{{user}} não pertence mais à {{role}} por {{userBy}}',
|
||||
User_muted_by: 'User {{userMuted}} muted por {{userBy}}',
|
||||
User_removed_by: 'Usuário {{userRemoved}} removido por {{userBy}}',
|
||||
|
@ -627,5 +629,27 @@ export default {
|
|||
No_threads: 'Não há tópicos',
|
||||
No_threads_following: 'Você não está seguindo tópicos',
|
||||
No_threads_unread: 'Não há tópicos não lidos',
|
||||
Messagebox_Send_to_channel: 'Mostrar no canal'
|
||||
Messagebox_Send_to_channel: 'Mostrar no canal',
|
||||
Set_as_leader: 'Definir como líder',
|
||||
Set_as_moderator: 'Definir como moderador',
|
||||
Set_as_owner: 'Definir como proprietário',
|
||||
Remove_as_leader: 'Remover como líder',
|
||||
Remove_as_moderator: 'Remover como moderador',
|
||||
Remove_as_owner: 'Remover como owner',
|
||||
Remove_from_room: 'Remover do canal',
|
||||
Ignore: 'Ignorar',
|
||||
Unignore: 'Deixar de ignorar',
|
||||
User_has_been_ignored: 'Usuário foi ignorado',
|
||||
User_has_been_unignored: 'O usuário não é mais ignorado',
|
||||
User_has_been_removed_from_s: 'Usuário foi removido de {{s}}',
|
||||
User__username__is_now_a_leader_of__room_name_: 'O usuário {{username}} agora é líder de {{room_name}}',
|
||||
User__username__is_now_a_moderator_of__room_name_: 'O usuário {{username}} agora é moderador de {{room_name}}',
|
||||
User__username__is_now_a_owner_of__room_name_: 'O usuário {{username}} agora é proprietário de {{room_name}}',
|
||||
User__username__removed_from__room_name__leaders: 'O usuário {{username}} foi removido dos líderes de {{room_name}}',
|
||||
User__username__removed_from__room_name__moderators: 'O usuário {{username}} foi removido dos moderadores de {{room_name}}',
|
||||
User__username__removed_from__room_name__owners: 'O usuário {{username}} foi removido dos proprietários de {{room_name}}',
|
||||
The_user_will_be_removed_from_s: 'O usuário será removido de {{s}}',
|
||||
Yes_remove_user: 'Sim, remover usuário!',
|
||||
Direct_message: 'Mensagem direta',
|
||||
Message_Ignored: 'Mensagem ignorada. Toque para mostrar.'
|
||||
};
|
||||
|
|
|
@ -130,7 +130,7 @@ export default {
|
|||
Permalink: 'Link permanente',
|
||||
Create_account: 'Criar uma conta',
|
||||
Create_Channel: 'Criar Canal',
|
||||
Created_snippet: 'Criado um extracto',
|
||||
Created_snippet: 'criado um extracto',
|
||||
Create_a_new_workspace: 'Criar um novo espaço de trabalho',
|
||||
Create: 'Criar',
|
||||
Delete_Room_Warning: 'Apagar uma sala irá remover todas as mensagens contidas nela. Isto não pode ser desfeito.',
|
||||
|
@ -163,9 +163,9 @@ export default {
|
|||
Forgot_Password: 'Esquecer Palavra-passe',
|
||||
Group_by_favorites: 'Agrupar por favoritos',
|
||||
Group_by_type: 'Agrupar por tipo',
|
||||
Has_joined_the_channel: 'Entrou no canal',
|
||||
Has_joined_the_conversation: 'Entrou na conversa',
|
||||
Has_left_the_channel: 'Saiu do canal',
|
||||
Has_joined_the_channel: 'entrou no canal',
|
||||
Has_joined_the_conversation: 'entrou na conversa',
|
||||
Has_left_the_channel: 'saiu do canal',
|
||||
Invisible: 'Invisível',
|
||||
Invite: 'Convidar',
|
||||
is_a_valid_RocketChat_instance: 'é uma instância válida do Rocket.Chat',
|
||||
|
@ -324,7 +324,7 @@ export default {
|
|||
Uploading: 'A enviar',
|
||||
Upload_file_question_mark: 'Enviar ficheiro?',
|
||||
User_added_by: 'Utilizador {{userAdded}} adicionado por {{userBy}}',
|
||||
User_has_been_key: 'Utilizador foi {{key}}!',
|
||||
User_has_been_key: 'Utilizador foi {{key}}',
|
||||
User_is_no_longer_role_by_: '{{userBy}} removeu o estatuto de {{role}} de {{user}}',
|
||||
User_muted_by: 'Utilizador {{userMuted}} foi silenciado por {{userBy}}',
|
||||
User_removed_by: 'Utilizador {{userRemoved}} removido por {{userBy}}',
|
||||
|
|
|
@ -167,7 +167,7 @@ export default {
|
|||
Create_Channel: 'Создать канал',
|
||||
Create_Direct_Messages: 'Создать личное сообщение',
|
||||
Create_Discussion: 'Создать обсуждение',
|
||||
Created_snippet: 'Создать сниппет',
|
||||
Created_snippet: 'создать сниппет',
|
||||
Create_a_new_workspace: 'Новое рабочее пространство',
|
||||
Create: 'Создать',
|
||||
Custom_Status: 'Персонализированный Статус',
|
||||
|
@ -247,9 +247,9 @@ export default {
|
|||
Group_by_favorites: 'По избранным',
|
||||
Group_by_type: 'По типу',
|
||||
Hide: 'Скрыть',
|
||||
Has_joined_the_channel: 'Присоединился к каналу',
|
||||
Has_joined_the_conversation: 'Присоединился к беседе',
|
||||
Has_left_the_channel: 'Покинул канал',
|
||||
Has_joined_the_channel: 'присоединился к каналу',
|
||||
Has_joined_the_conversation: 'присоединился к беседе',
|
||||
Has_left_the_channel: 'покинул канал',
|
||||
Hide_System_Messages: 'Скрыть Системные Сообщения',
|
||||
Hide_type_messages: 'Скрыть "{{type}}" сообщения',
|
||||
How_It_Works: 'Как Это Работает',
|
||||
|
@ -552,7 +552,7 @@ export default {
|
|||
Users: 'Пользователи',
|
||||
User_added_by: 'Пользователь {{userAdded}} добавлен по решению {{userBy}}',
|
||||
User_Info: 'Информация о пользователе',
|
||||
User_has_been_key: 'Пользователь был {{key}}!',
|
||||
User_has_been_key: 'Пользователь был {{key}}',
|
||||
User_is_no_longer_role_by_: '{{user}} больше не {{role}} по решению {{userBy}}',
|
||||
User_muted_by: 'Пользователь {{userMuted}} заглушен по решению {{userBy}}',
|
||||
User_removed_by: 'Пользователь {{userRemoved}} удален по решению {{userBy}}',
|
||||
|
|
|
@ -89,12 +89,12 @@ export default {
|
|||
Alert: '警报',
|
||||
alert: '警报',
|
||||
alerts: '警报',
|
||||
All_users_in_the_channel_can_write_new_messages: '频道中的所有用户都可以发送新消息',
|
||||
All_users_in_the_channel_can_write_new_messages: '频道中的所有用户都可以发送新信息',
|
||||
A_meaningful_name_for_the_discussion_room: '取一个有意义的讨论区的名称',
|
||||
All: '所有',
|
||||
All_Messages: '全部信息',
|
||||
Allow_Reactions: '允许表情贴',
|
||||
Alphabetical: '按名称排列',
|
||||
Alphabetical: '以名称排序',
|
||||
and_more: '和更多的',
|
||||
and: '和',
|
||||
announcement: '公告',
|
||||
|
@ -109,12 +109,12 @@ export default {
|
|||
Authenticating: '正在验证身份',
|
||||
Automatic: '自动',
|
||||
Auto_Translate: '自动翻译',
|
||||
Avatar_changed_successfully: '头像更新成功!',
|
||||
Avatar_changed_successfully: '头像更新成功!',
|
||||
Avatar_Url: '头像地址',
|
||||
Away: '离开',
|
||||
Back: '返回',
|
||||
Black: '黑色',
|
||||
Block_user: '封锁用户',
|
||||
Block_user: '屏蔽此用户',
|
||||
Browser: '浏览器',
|
||||
Broadcast_channel_Description: '只有经过授权的用户才能写新信息,但其他用户可以回复',
|
||||
Broadcast_Channel: '广播频道',
|
||||
|
@ -129,19 +129,19 @@ export default {
|
|||
Channel_Name: '频道名',
|
||||
Channels: '频道',
|
||||
Chats: '聊天',
|
||||
Call_already_ended: '通话已经结束!',
|
||||
Call_already_ended: '通话已经结束!',
|
||||
Clear_cookies_alert: '是否清除所有 cookies?',
|
||||
Clear_cookies_desc: '本操作将清除所有登入 cookies,以登入其他帐号',
|
||||
Clear_cookies_yes: '是,清除 cookies',
|
||||
Clear_cookies_no: '否,保留 cookies',
|
||||
Click_to_join: '点击以参与',
|
||||
Close: '关闭',
|
||||
Close_emoji_selector: '关闭emoji选择器',
|
||||
Close_emoji_selector: '关闭 emoji 选择器',
|
||||
Closing_chat: '结束聊天',
|
||||
Change_language_loading: '切换语言',
|
||||
Chat_closed_by_agent: '聊天已被客服关闭',
|
||||
Choose: '选择',
|
||||
Choose_from_library: '选择库',
|
||||
Choose_from_library: '从媒体库选择',
|
||||
Choose_file: '选择文件',
|
||||
Choose_where_you_want_links_be_opened: '请选择您要将链接开启在',
|
||||
Code: '代码',
|
||||
|
@ -166,7 +166,7 @@ export default {
|
|||
Create_account: '创建账户',
|
||||
Create_Channel: '创建频道',
|
||||
Create_Direct_Messages: '新增私人讯息',
|
||||
Create_Discussion: '新增论坛',
|
||||
Create_Discussion: '新增讨论区',
|
||||
Created_snippet: '新增程式码片段',
|
||||
Create_a_new_workspace: '创建一个新的工作区',
|
||||
Create: '创建',
|
||||
|
@ -189,30 +189,30 @@ export default {
|
|||
Directory: '目录',
|
||||
Direct_Messages: '私訊',
|
||||
Disable_notifications: '禁用信息通知',
|
||||
Discussions: '论坛',
|
||||
Discussion_Desc: '帮助保持事态更新! 通过创建讨论,一个和所选频道双向关联的子频道将会被创建。',
|
||||
Discussion_name: '论坛名称',
|
||||
Done: '完毕',
|
||||
Discussions: '讨论区',
|
||||
Discussion_Desc: '帮助保持事态更新! 通过创建讨论,一个和所选频道双向关联的子频道将会被创建。',
|
||||
Discussion_name: '讨论区名称',
|
||||
Done: '完成',
|
||||
Dont_Have_An_Account: '还没有账号?',
|
||||
Do_you_have_an_account: '是否拥有帐号?',
|
||||
Do_you_have_a_certificate: '是否拥有凭证?',
|
||||
Do_you_have_a_certificate: '是否拥有凭证?',
|
||||
Do_you_really_want_to_key_this_room_question_mark: '您真的想要{{key}}这个聊天室吗?',
|
||||
E2E_Encryption: 'E2E 加密',
|
||||
E2E_How_It_Works_info1: '您现在可以创建加密的专用组和直接消息。您也可以将现有的私人组或直接信息加密。',
|
||||
E2E_How_It_Works_info2: '这是端到端加密,因此编码/解码邮件的密钥不会保存在服务器上。因此,您需要将密码存储在安全的地方。您需要在希望使用端到端加密的其他设备上输入。',
|
||||
E2E_How_It_Works_info2: '这是點對點加密,因此编码/解码邮件的密钥不会保存在服务器上。因此,您需要将密码存储在安全的地方。您需要在希望使用點對點加密的其他设备上输入。',
|
||||
E2E_How_It_Works_info3: '如果继续,将自动生成一组 E2E 密码',
|
||||
E2E_How_It_Works_info4: '这是系统自动生成的密码,您可以为您的密钥设置一个新密码(您可以随时从任何浏览器输入现有密码)。',
|
||||
E2E_How_It_Works_info4: '您也可以随时从已输入既有密码的任何浏览器设定新密码给您的加密金钥。',
|
||||
edit: '编辑',
|
||||
edited: '已编辑',
|
||||
Edit: '编辑',
|
||||
Edit_Status: '编辑状态',
|
||||
Edit_Invite: '编辑邀请',
|
||||
End_to_end_encrypted_room: '端到端加密聊天室',
|
||||
end_to_end_encryption: '端到端加密',
|
||||
Email_Notification_Mode_All: '每次被提及或私讯',
|
||||
End_to_end_encrypted_room: 'E2E 加密聊天室',
|
||||
end_to_end_encryption: 'E2E 加密',
|
||||
Email_Notification_Mode_All: '每次被标记或私讯',
|
||||
Email_Notification_Mode_Disabled: '禁用',
|
||||
Email_or_password_field_is_empty: '邮件或密码字段为空',
|
||||
Email: '邮箱',
|
||||
EMAIL: '邮箱通知',
|
||||
email: '邮箱',
|
||||
Empty_title: '空白标题',
|
||||
Enable_Auto_Translate: '开启自动翻译',
|
||||
|
@ -245,7 +245,7 @@ export default {
|
|||
Full_table: '点击以查看完整表格',
|
||||
Generate_New_Link: '产生新的链接',
|
||||
Group_by_favorites: '收藏优先',
|
||||
Group_by_type: '按类型分组',
|
||||
Group_by_type: '以类型分组',
|
||||
Hide: '隐藏',
|
||||
Has_joined_the_channel: '已加入频道',
|
||||
Has_joined_the_conversation: '已经加入此对话',
|
||||
|
@ -270,13 +270,14 @@ export default {
|
|||
IP: 'IP',
|
||||
In_app: 'App 内',
|
||||
In_App_And_Desktop: 'App 内及桌面',
|
||||
In_App_and_Desktop_Alert_info: '打开应用程序时,在屏幕顶部显示横幅,并在桌面上显示通知',
|
||||
In_App_and_Desktop_Alert_info: '打开 app 时,會在屏幕上方显示横幅;显示桌面通知',
|
||||
Invisible: '隐身',
|
||||
Invite: '邀请',
|
||||
is_a_valid_RocketChat_instance: '是一个有效的 Rocket.Chat 实例',
|
||||
is_not_a_valid_RocketChat_instance: '不是有效的 Rocket.Chat 实例',
|
||||
is_typing: '正在输入',
|
||||
Invalid_or_expired_invite_token: '无效或到期的邀请 token',
|
||||
Invalid_server_version: '此 App 版本已不支援您正在连线之服务器版本。当前版本: {{currentVersion}}.\\n\\n最低版本要求: {{minVersion}}',
|
||||
Join_your_workspace: '加入您的工作区',
|
||||
Invite_Link: '邀请链接',
|
||||
Invite_users: '邀请用戶',
|
||||
|
@ -294,7 +295,7 @@ export default {
|
|||
Livechat: '即时聊天',
|
||||
Livechat_edit: '即时聊天编辑',
|
||||
Login: '登陆',
|
||||
Login_error: '你的凭证被拒绝了! 请再试一次',
|
||||
Login_error: '认证失败!请再试一次',
|
||||
Login_with: '登陆为',
|
||||
Logging_out: '正在登出',
|
||||
Logout: '注销',
|
||||
|
@ -316,7 +317,7 @@ export default {
|
|||
Message: '信息',
|
||||
Messages: '信息',
|
||||
Message_Reported: '信息已举报',
|
||||
Microphone_Permission_Message: 'Rocket.Chat需要存取您的麦克风,以便发送音频信息。',
|
||||
Microphone_Permission_Message: 'Rocket.Chat 需要存取您的麦克风,以便发送音频信息。',
|
||||
Microphone_Permission: '麦克风授权',
|
||||
Mute: '静音',
|
||||
muted: '被静音',
|
||||
|
@ -333,7 +334,7 @@ export default {
|
|||
Next: '下一步',
|
||||
No_files: '没有文件',
|
||||
No_limit: '没有限制',
|
||||
No_mentioned_messages: '没有提到的信息',
|
||||
No_mentioned_messages: '没有被提及的信息',
|
||||
No_pinned_messages: '没有钉选的消息',
|
||||
No_results_found: '没有搜寻结果',
|
||||
No_starred_messages: '没有加星标的消息',
|
||||
|
@ -345,7 +346,7 @@ export default {
|
|||
No_Read_Receipts: '没有已读人员',
|
||||
Not_logged: '没有记录',
|
||||
Not_RC_Server: '这不是一个 Rocket.Chat server.\\n{{contact}}',
|
||||
Nothing: '没有东西',
|
||||
Nothing: '无',
|
||||
Nothing_to_save: '什么都没有保存!',
|
||||
Notify_active_in_this_room: '通知这个聊天室的活跃用户',
|
||||
Notify_all_in_this_room: '通知这个聊天室的所有人',
|
||||
|
@ -354,11 +355,11 @@ export default {
|
|||
Notification_Preferences: '通知偏好设置',
|
||||
No_available_agents_to_transfer: '没有可用的代理进行传输',
|
||||
Offline: '离线',
|
||||
Oops: '哎呀!',
|
||||
Oops: '哎呀!',
|
||||
Omnichannel: 'Omnichannel',
|
||||
Open_Livechats: '打开即时聊天',
|
||||
Omnichannel_enable_alert: '您尚未启用 Omnichannel,是否想要启用?',
|
||||
Onboarding_description: '工作區是團隊或組織協作的空間。向工作区管理员询问要加入的地址或为您的团队创建一个。',
|
||||
Onboarding_description: '工作区是团队或组织协作的空间。向工作区管理员询问要加入的地址或为您的团队创建一个。',
|
||||
Onboarding_join_workspace: '加入一个工作区',
|
||||
Onboarding_subtitle: '超越团队合作',
|
||||
Onboarding_title: '欢迎来到 Rocket.Chat',
|
||||
|
@ -382,7 +383,7 @@ export default {
|
|||
Pinned_Messages: '钉选信息',
|
||||
pinned: '已被钉选',
|
||||
Pinned: '被钉选',
|
||||
Please_add_a_comment: '请增加评论',
|
||||
Please_add_a_comment: '请新增评论',
|
||||
Please_enter_your_password: '请输入密码',
|
||||
Please_wait: '请稍候',
|
||||
Preferences: '偏好设置',
|
||||
|
@ -435,6 +436,7 @@ export default {
|
|||
Roles: '角色',
|
||||
Room_actions: '聊天室操作',
|
||||
Room_changed_announcement: '{{userBy}}将聊天室通知改为:{{announcement}}',
|
||||
Room_changed_avatar: 'Room avatar changed by {{userBy}}',
|
||||
Room_changed_description: '{{userBy}}将聊天室说明改为:{{description}}',
|
||||
Room_changed_privacy: '{{userBy}}将聊天室类型改为:{{type}}',
|
||||
Room_changed_topic: '{{userBy}}将聊天室主题改为:{{topic}}',
|
||||
|
@ -451,7 +453,7 @@ export default {
|
|||
saving_profile: '保存配置文件',
|
||||
saving_settings: '保存设置',
|
||||
saved_to_gallery: '储存至图片库',
|
||||
Save_Your_E2E_Password: '储存您的端对端密码',
|
||||
Save_Your_E2E_Password: '储存您的 E2E 密码',
|
||||
Save_Your_Encryption_Password: '储存您的加密密码',
|
||||
Save_Your_Encryption_Password_warning: '此密码未被储存在任何地方,为此您必须安全存放您的密码',
|
||||
Save_Your_Encryption_Password_info: '请记住,如果你遗失了您的密码,您将无法存取您的信息并不可恢复',
|
||||
|
@ -461,8 +463,9 @@ export default {
|
|||
Search_global_users: '搜寻全域用户',
|
||||
Search_global_users_description: '如果启用,您将可以搜寻其他公司、服务器上的任何用戶',
|
||||
Seconds: '{{second}} 秒',
|
||||
Security_and_privacy: '安全与隐私',
|
||||
Select_Avatar: '选择头像',
|
||||
Select_Server: '选择伺服器',
|
||||
Select_Server: '选择服务器',
|
||||
Select_Users: '选择用户',
|
||||
Select_a_Channel: '选择一个频道',
|
||||
Select_a_Department: '选择一个部门',
|
||||
|
@ -478,13 +481,13 @@ export default {
|
|||
Sent_an_attachment: '发送附件',
|
||||
Server: '服务器',
|
||||
Servers: '服务器',
|
||||
Server_version: '服务器版本',
|
||||
Server_version: '服务器版本: {{version}}',
|
||||
Set_username_subtitle: '用户名是用來让其他人在信息中提到您',
|
||||
Set_custom_status: '设定自订状态',
|
||||
Set_status: '设定状态',
|
||||
Status_saved_successfully: '状态储存成功',
|
||||
Settings: '设置',
|
||||
Settings_succesfully_changed: '更改设置成功!',
|
||||
Settings_succesfully_changed: '设置更改成功!',
|
||||
Share: '分享',
|
||||
Share_Link: '分享链接',
|
||||
Share_this_app: '分享此 app',
|
||||
|
@ -502,8 +505,8 @@ export default {
|
|||
starred: '被标记',
|
||||
Starred: '已标记',
|
||||
Start_of_conversation: '开始对话',
|
||||
Start_a_Discussion: '开始论坛',
|
||||
Started_discussion: '已开始的论坛',
|
||||
Start_a_Discussion: '开始一个讨论',
|
||||
Started_discussion: '已开始的讨论',
|
||||
Started_call: '{{userBy}} 开始的通话',
|
||||
Submit: '提交',
|
||||
Table: '表格',
|
||||
|
@ -532,7 +535,7 @@ export default {
|
|||
Type_the_channel_name_here: '在这里输入频道名称',
|
||||
unarchive: '取消封存',
|
||||
UNARCHIVE: '取消封存',
|
||||
Unblock_user: '解锁用户',
|
||||
Unblock_user: '解除屏蔽',
|
||||
Unfavorite: '取消收藏',
|
||||
Unfollowed_thread: '取消追踪讨论',
|
||||
Unmute: '取消静音',
|
||||
|
@ -547,9 +550,9 @@ export default {
|
|||
Upload_file_question_mark: '上传文件?',
|
||||
User: '用戶',
|
||||
Users: '用戶',
|
||||
User_added_by: '由{{userBy}}添加的用户 {{useradd}}',
|
||||
User_added_by: '由{{userBy}}添加的用户 {{userAdded}}',
|
||||
User_Info: '用戶资讯',
|
||||
User_has_been_key: '用户已被{{key}}!',
|
||||
User_has_been_key: '用户已被{{key}}',
|
||||
User_is_no_longer_role_by_: '{{userBy}}将角色 {{role}} 从用户 {{user}} 身上移除',
|
||||
User_muted_by: '用户 {{userMuted}} 被 {{userBy}} 静音',
|
||||
User_removed_by: '用户 {{userRemoved}} 被 {{userBy}} 移除',
|
||||
|
@ -585,7 +588,7 @@ export default {
|
|||
Yesterday: '昨天',
|
||||
You_are_in_preview_mode: '您处于预览模式',
|
||||
You_are_offline: '您处于离线状态',
|
||||
You_can_search_using_RegExp_eg: '您可以使用RegExp进行搜索。 例如`/^text$/i`',
|
||||
You_can_search_using_RegExp_eg: '您可用 RegExp 进行搜索。 例如`/^text$/i`',
|
||||
You_colon: '你:',
|
||||
you_were_mentioned: '你被提到了',
|
||||
You_were_removed_from_channel: '您已从 {{channel}} 中被踢除',
|
||||
|
@ -617,11 +620,11 @@ export default {
|
|||
Search_messages: '搜索信息',
|
||||
Scroll_messages: '信息滚动',
|
||||
Reply_latest: '回覆最新信息',
|
||||
Reply_in_Thread: '回覆讨论',
|
||||
Reply_in_Thread: '讨论串回覆',
|
||||
Server_selection: '选择服务器',
|
||||
Server_selection_numbers: '选择服务器(输入 1...9)',
|
||||
Add_server: '創建服务器',
|
||||
New_line: '新行',
|
||||
New_line: '新的一行',
|
||||
You_will_be_logged_out_of_this_application: '您即将登出',
|
||||
Clear: '清除',
|
||||
This_will_clear_all_your_offline_data: '这将清除您的所有离线资料。',
|
||||
|
@ -655,7 +658,27 @@ export default {
|
|||
Queue_is_empty: '队列是空的',
|
||||
Logout_from_other_logged_in_locations: '注销其他已登陆的设备',
|
||||
You_will_be_logged_out_from_other_locations: '您将于其他设备上注销',
|
||||
Logged_out_of_other_clients_successfully: '成功登出其他客户端',
|
||||
Logged_out_of_other_clients_successfully: '成功登出其他用户端',
|
||||
Logout_failed: '注销失败',
|
||||
Log_analytics_events: '日志分析事件'
|
||||
Log_analytics_events: '日志分析事件',
|
||||
E2E_encryption_change_password_title: '变更加密密码',
|
||||
E2E_encryption_change_password_description: '现在您可以建立加密私人群组和私讯。您也可以变更已存在的私人群组或是私讯来加密。 \\n\\n这是点对点的加密,所以用来加密/解密的金钥将不会储存到伺服器上。为此,您必须安全存放您的密码。如果您希望在其他装置上使用对点加密时,将会需要输入此密码。',
|
||||
E2E_encryption_change_password_error: '变更 E2E 密码时发生错误!',
|
||||
E2E_encryption_change_password_success: 'E2E 密码已成功变更!',
|
||||
E2E_encryption_change_password_message: '请确定您已将其安全存放至别处',
|
||||
E2E_encryption_change_password_confirmation: '是,我要变更',
|
||||
E2E_encryption_reset_title: '重设 E2E 金钥',
|
||||
E2E_encryption_reset_description: '此选项将撤销您目前的*E2E 金钥*并将您登出。 \\n当您再次登入时,Rocket.Chat 将产生新的一组金钥并恢复您对任一有在线成员的加密聊天室之存取权限。 \\n由于 E2E 加密的特性,Rocket.Chat 无法恢复无在线成员之聊天室之存取权限。',
|
||||
E2E_encryption_reset_button: '重设',
|
||||
E2E_encryption_reset_error: '重设 E2E 金钥时发生错误!',
|
||||
E2E_encryption_reset_message: '您将被登出',
|
||||
E2E_encryption_reset_confirmation: '是,我要重设',
|
||||
Following: '正在追踪',
|
||||
Threads_displaying_all: '显示全部',
|
||||
Threads_displaying_following: '显示追踪中',
|
||||
Threads_displaying_unread: '显示未读',
|
||||
No_threads: '当前没有讨论串',
|
||||
No_threads_following: '当前没有正在追踪的讨论',
|
||||
No_threads_unread: '当前没有未读的讨论',
|
||||
Messagebox_Send_to_channel: '发送至频道'
|
||||
};
|
||||
|
|
|
@ -80,7 +80,7 @@ export default {
|
|||
'error-you-are-last-owner': '您是最後的擁有者。請刪除此人之前設置一個新的擁有者。',
|
||||
Actions: '操作',
|
||||
activity: '活動時間',
|
||||
Activity: '按活動時間排列',
|
||||
Activity: '以活動時間排序',
|
||||
Add_Reaction: '增加表情貼',
|
||||
Add_Server: '新增伺服器',
|
||||
Add_users: '新增使用者',
|
||||
|
@ -94,7 +94,7 @@ export default {
|
|||
All: '所有',
|
||||
All_Messages: '全部訊息',
|
||||
Allow_Reactions: '允許表情貼',
|
||||
Alphabetical: '按名稱排列',
|
||||
Alphabetical: '以名稱排序',
|
||||
and_more: '和更多的',
|
||||
and: '和',
|
||||
announcement: '公告',
|
||||
|
@ -109,12 +109,12 @@ export default {
|
|||
Authenticating: '正在驗證身份',
|
||||
Automatic: '自動',
|
||||
Auto_Translate: '自動翻譯',
|
||||
Avatar_changed_successfully: '大頭貼更新成功!',
|
||||
Avatar_changed_successfully: '大頭貼更新成功!',
|
||||
Avatar_Url: '大頭貼地址',
|
||||
Away: '離開',
|
||||
Back: '返回',
|
||||
Black: '黑色',
|
||||
Block_user: '封鎖使用者',
|
||||
Block_user: '封鎖此用戶',
|
||||
Browser: '瀏覽器',
|
||||
Broadcast_channel_Description: '只有經過授權的使用者才能發送新訊息,但其他使用者可以回覆',
|
||||
Broadcast_Channel: '廣播頻道',
|
||||
|
@ -129,19 +129,19 @@ export default {
|
|||
Channel_Name: '頻道名稱',
|
||||
Channels: '頻道',
|
||||
Chats: '聊天',
|
||||
Call_already_ended: '通話已經結束!',
|
||||
Call_already_ended: '通話已經結束!',
|
||||
Clear_cookies_alert: '是否清除所有 cookies?',
|
||||
Clear_cookies_desc: '本操作將清除所有登入 cookies,以登入其他帳號',
|
||||
Clear_cookies_yes: '是,清除 cookies',
|
||||
Clear_cookies_no: '否,保留 cookies',
|
||||
Click_to_join: '點擊以參與',
|
||||
Close: '關閉',
|
||||
Close_emoji_selector: '關閉emoji選擇器',
|
||||
Close_emoji_selector: '關閉 emoji 選擇器',
|
||||
Closing_chat: '結束聊天',
|
||||
Change_language_loading: '切換語言',
|
||||
Chat_closed_by_agent: '聊天已被客服關閉',
|
||||
Choose: '選擇',
|
||||
Choose_from_library: '選擇庫',
|
||||
Choose_from_library: '從媒體庫選擇',
|
||||
Choose_file: '選擇檔案',
|
||||
Choose_where_you_want_links_be_opened: '請選擇您要將連結開啟在',
|
||||
Code: '程式碼',
|
||||
|
@ -166,7 +166,7 @@ export default {
|
|||
Create_account: '新建帳戶',
|
||||
Create_Channel: '新建頻道',
|
||||
Create_Direct_Messages: '新增私人訊息',
|
||||
Create_Discussion: '新增論壇',
|
||||
Create_Discussion: '新增討論區',
|
||||
Created_snippet: '新增程式碼片段',
|
||||
Create_a_new_workspace: '建立一個新的工作區',
|
||||
Create: '建立',
|
||||
|
@ -189,30 +189,30 @@ export default {
|
|||
Directory: '目錄',
|
||||
Direct_Messages: '私訊',
|
||||
Disable_notifications: '禁用訊息通知',
|
||||
Discussions: '論壇',
|
||||
Discussion_Desc: '幫助保持對正在發生的事情的概述!通過建立討論,將建立您選擇的子通道,並且兩者都是連接的。',
|
||||
Discussion_name: '論壇名稱',
|
||||
Done: '完畢',
|
||||
Discussions: '討論區',
|
||||
Discussion_Desc: '幫助保持事態更新!透過建立討論,一個和所選頻道雙向關聯的子頻道將會被建立。',
|
||||
Discussion_name: '討論區名稱',
|
||||
Done: '完成',
|
||||
Dont_Have_An_Account: '還未擁有帳號?',
|
||||
Do_you_have_an_account: '是否擁有帳號?',
|
||||
Do_you_have_a_certificate: '是否擁有憑證?',
|
||||
Do_you_have_a_certificate: '是否擁有憑證?',
|
||||
Do_you_really_want_to_key_this_room_question_mark: '您真的想要{{key}}這個聊天室嗎?',
|
||||
E2E_How_It_Works_info1: '您現在可以建立加密私人群組和私人訊息。您也可以變更已存在的私人群組或私訊來加密',
|
||||
E2E_How_It_Works_info2: '這是點對點的加密,所以金鑰是用來加密/解密,您的訊息也不會儲存到伺服器上。為了這個原因您必須安全存放您的密碼。您會希望使用 E2E 加密輸入到其他裝置。',
|
||||
E2E_Encryption: 'E2E 加密',
|
||||
E2E_How_It_Works_info1: '現在您可以建立加密私人群組和私訊。您也可以變更已存在的私人群組或是私訊來加密。',
|
||||
E2E_How_It_Works_info2: '這是*點對點的加密*,所以用來加密/解密的金鑰將不會儲存到伺服器上。為此,*您必須安全存放您的密碼*。如果您希望在其他裝置上使用對點加密時,會需要輸入此密碼。',
|
||||
E2E_How_It_Works_info3: '如果繼續,將自動產生一組 E2E 密碼',
|
||||
E2E_How_It_Works_info4: '這是自動產生的密碼,在任何時間從任何瀏覽器您可以設定新的密碼給您的加密金鑰您可以輸入已存在的密碼。',
|
||||
E2E_How_It_Works_info4: '您也可以隨時從已輸入既有密碼的任何瀏覽器設定新密碼給您的加密金鑰。',
|
||||
edit: '編輯',
|
||||
edited: '已編輯',
|
||||
Edit: '編輯',
|
||||
Edit_Status: '編輯狀態',
|
||||
Edit_Invite: '編輯邀請',
|
||||
End_to_end_encrypted_room: '點對點加密聊天室',
|
||||
end_to_end_encryption: '點對點加密',
|
||||
End_to_end_encrypted_room: 'E2E 加密聊天室',
|
||||
end_to_end_encryption: 'E2E 加密',
|
||||
Email_Notification_Mode_All: '每次被標記或私訊',
|
||||
Email_Notification_Mode_Disabled: '禁用',
|
||||
Email_or_password_field_is_empty: '電子郵件或密碼欄位為空',
|
||||
Email: '電子郵件',
|
||||
EMAIL: '電子郵件通知',
|
||||
email: '電子郵件',
|
||||
Empty_title: '空白標題',
|
||||
Enable_Auto_Translate: '開啟自動翻譯',
|
||||
|
@ -245,13 +245,13 @@ export default {
|
|||
Full_table: '點擊以查看完整表格',
|
||||
Generate_New_Link: '產生新的連結',
|
||||
Group_by_favorites: '我的最愛優先',
|
||||
Group_by_type: '按類型分組',
|
||||
Group_by_type: '以類型分組',
|
||||
Hide: '隱藏',
|
||||
Has_joined_the_channel: '已加入頻道',
|
||||
Has_joined_the_conversation: '已經加入此對話',
|
||||
Has_left_the_channel: '已離開頻道',
|
||||
Hide_System_Messages: '隱藏系統訊息',
|
||||
Hide_type_messages: '隱藏 "{{type}}" 訊息',
|
||||
Hide_type_messages: '隱藏 \'{{type}}\' 訊息',
|
||||
How_It_Works: '運作方式',
|
||||
Message_HideType_uj: '隱藏“使用者加入”訊息',
|
||||
Message_HideType_ul: '隱藏“使用者離開”訊息',
|
||||
|
@ -270,13 +270,14 @@ export default {
|
|||
IP: 'IP',
|
||||
In_app: 'App 內',
|
||||
In_App_And_Desktop: 'App 內及桌面',
|
||||
In_App_and_Desktop_Alert_info: '當在應用程序打開時,螢幕頂端顯示橫幅,並在桌面上顯示通知',
|
||||
In_App_and_Desktop_Alert_info: '若 app 開啟時,會在螢幕上方顯示橫幅;顯示桌面通知',
|
||||
Invisible: '隱身',
|
||||
Invite: '邀請',
|
||||
is_a_valid_RocketChat_instance: '是一個有效的 Rocket.Chat 實例',
|
||||
is_not_a_valid_RocketChat_instance: '不是有效的 Rocket.Chat 實例',
|
||||
is_typing: '正在輸入',
|
||||
Invalid_or_expired_invite_token: '無效或到期的邀請 token',
|
||||
Invalid_server_version: '此 App 版本已不支援您正在連線之伺服器版本。當前版本: {{currentVersion}}.\\n\\n最低版本要求: {{minVersion}}',
|
||||
Join_your_workspace: '加入您的工作區',
|
||||
Invite_Link: '邀請連結',
|
||||
Invite_users: '邀請使用者',
|
||||
|
@ -294,7 +295,7 @@ export default {
|
|||
Livechat: '即時聊天',
|
||||
Livechat_edit: '即時聊天編輯',
|
||||
Login: '登入',
|
||||
Login_error: '你的憑證被拒絕了! 請再試一次',
|
||||
Login_error: '認證失敗!請再試一次',
|
||||
Login_with: '登入為',
|
||||
Logging_out: '正在登出',
|
||||
Logout: '登出',
|
||||
|
@ -316,7 +317,7 @@ export default {
|
|||
Message: '訊息',
|
||||
Messages: '訊息',
|
||||
Message_Reported: '訊息已檢舉',
|
||||
Microphone_Permission_Message: 'Rocket.Chat需要存取您的麥克風,以便發送聲音訊息。',
|
||||
Microphone_Permission_Message: 'Rocket.Chat 需要存取您的麥克風,以便發送聲音訊息。',
|
||||
Microphone_Permission: '麥克風授權',
|
||||
Mute: '靜音',
|
||||
muted: '被靜音',
|
||||
|
@ -333,10 +334,10 @@ export default {
|
|||
Next: '下一步',
|
||||
No_files: '沒有檔案',
|
||||
No_limit: '沒有限制',
|
||||
No_mentioned_messages: '沒有提及的訊息',
|
||||
No_mentioned_messages: '沒有被提及的訊息',
|
||||
No_pinned_messages: '沒有釘選的訊息',
|
||||
No_results_found: '沒有搜尋結果',
|
||||
No_starred_messages: '沒有標記的訊息',
|
||||
No_starred_messages: '沒有加標記的訊息',
|
||||
No_thread_messages: '沒有討論串訊息',
|
||||
No_label_provided: '沒有提供 {{label}}',
|
||||
No_Message: '沒有訊息',
|
||||
|
@ -345,7 +346,7 @@ export default {
|
|||
No_Read_Receipts: '沒有已讀人員',
|
||||
Not_logged: '沒有記錄',
|
||||
Not_RC_Server: '這不是一個 Rocket.Chat server.\\n{{contact}}',
|
||||
Nothing: '沒有東西',
|
||||
Nothing: '無',
|
||||
Nothing_to_save: '沒有東西可儲存!',
|
||||
Notify_active_in_this_room: '通知這個聊天室的活躍使用者',
|
||||
Notify_all_in_this_room: '通知這個聊天室的所有人',
|
||||
|
@ -354,7 +355,7 @@ export default {
|
|||
Notification_Preferences: '通知偏好設定',
|
||||
No_available_agents_to_transfer: '沒有可用的代理進行傳輸',
|
||||
Offline: '離線',
|
||||
Oops: '哎呀!',
|
||||
Oops: '哎呀!',
|
||||
Omnichannel: 'Omnichannel',
|
||||
Open_Livechats: '打開即時聊天',
|
||||
Omnichannel_enable_alert: '您尚未啟用 Omnichannel,是否想要啟用?',
|
||||
|
@ -382,7 +383,7 @@ export default {
|
|||
Pinned_Messages: '釘選訊息',
|
||||
pinned: '已被釘選',
|
||||
Pinned: '被釘選',
|
||||
Please_add_a_comment: '請增加評論',
|
||||
Please_add_a_comment: '請新增評論',
|
||||
Please_enter_your_password: '請輸入密碼',
|
||||
Please_wait: '請稍候',
|
||||
Preferences: '偏好設定',
|
||||
|
@ -435,6 +436,7 @@ export default {
|
|||
Roles: '角色',
|
||||
Room_actions: '聊天室操作',
|
||||
Room_changed_announcement: '{{userBy}}將聊天室通知改為:{{announcement}}',
|
||||
Room_changed_avatar: 'Room avatar changed by {{userBy}}',
|
||||
Room_changed_description: '{{userBy}}將聊天室說明改為:{{description}}',
|
||||
Room_changed_privacy: '{{userBy}}將聊天室類型改為:{{type}}',
|
||||
Room_changed_topic: '{{userBy}}將聊天室主題改為:{{topic}}',
|
||||
|
@ -451,7 +453,7 @@ export default {
|
|||
saving_profile: '儲存配置文件',
|
||||
saving_settings: '儲存設定',
|
||||
saved_to_gallery: '儲存至圖片庫',
|
||||
Save_Your_E2E_Password: '儲存您的點對點密碼',
|
||||
Save_Your_E2E_Password: '儲存您的 E2E 密碼',
|
||||
Save_Your_Encryption_Password: '儲存您的加密密碼',
|
||||
Save_Your_Encryption_Password_warning: '此密碼未被儲存在任何地方,為此您必須安全存放您的密碼',
|
||||
Save_Your_Encryption_Password_info: '請記住,如果你遺失了您的密碼,您將無法存取您的訊息並不可恢復',
|
||||
|
@ -461,6 +463,7 @@ export default {
|
|||
Search_global_users: '搜尋全域使用者',
|
||||
Search_global_users_description: '如果啟用,您將可以搜尋其他公司、伺服器上的任何使用者',
|
||||
Seconds: '{{second}} 秒',
|
||||
Security_and_privacy: '安全與隱私',
|
||||
Select_Avatar: '選擇大頭貼',
|
||||
Select_Server: '選擇伺服器',
|
||||
Select_Users: '選擇使用者',
|
||||
|
@ -478,13 +481,13 @@ export default {
|
|||
Sent_an_attachment: '發送附件',
|
||||
Server: '伺服器',
|
||||
Servers: '伺服器',
|
||||
Server_version: '伺服器版本',
|
||||
Set_username_subtitle: '使用者名稱是用來讓其他使用者在訊息中提到您。',
|
||||
Server_version: '伺服器版本: {{version}}',
|
||||
Set_username_subtitle: '使用者名稱是用來讓其他使用者在訊息中提到您',
|
||||
Set_custom_status: '設定自訂狀態',
|
||||
Set_status: '設定狀態',
|
||||
Status_saved_successfully: '狀態儲存成功',
|
||||
Settings: '設定',
|
||||
Settings_succesfully_changed: '更改設定成功!',
|
||||
Settings_succesfully_changed: '設定更改成功!',
|
||||
Share: '分享',
|
||||
Share_Link: '分享連結',
|
||||
Share_this_app: '分享此 app',
|
||||
|
@ -502,8 +505,8 @@ export default {
|
|||
starred: '被標記',
|
||||
Starred: '已標記',
|
||||
Start_of_conversation: '開始對話',
|
||||
Start_a_Discussion: '開始論壇',
|
||||
Started_discussion: '已開始的論壇',
|
||||
Start_a_Discussion: '開始一個討論',
|
||||
Started_discussion: '已開始的討論',
|
||||
Started_call: '{{userBy}} 開始的通話',
|
||||
Submit: '送出',
|
||||
Table: '表格',
|
||||
|
@ -532,8 +535,8 @@ export default {
|
|||
Type_the_channel_name_here: '在這裡輸入頻道名稱',
|
||||
unarchive: '取消封存',
|
||||
UNARCHIVE: '取消封存',
|
||||
Unblock_user: '取消封鎖使用者',
|
||||
Unfavorite: '取消我的最愛',
|
||||
Unblock_user: '解除封鎖',
|
||||
Unfavorite: '取消最愛',
|
||||
Unfollowed_thread: '取消追蹤討論',
|
||||
Unmute: '取消靜音',
|
||||
unmuted: '靜音狀態',
|
||||
|
@ -547,9 +550,9 @@ export default {
|
|||
Upload_file_question_mark: '上傳文件?',
|
||||
User: '使用者',
|
||||
Users: '使用者',
|
||||
User_added_by: '由{{userBy}}添加的使用者 {{useradd}}',
|
||||
User_added_by: '由{{userBy}}添加的使用者 {{userAdded}}',
|
||||
User_Info: '使用者資訊',
|
||||
User_has_been_key: '使用者已被{{key}}!',
|
||||
User_has_been_key: '使用者已被{{key}}',
|
||||
User_is_no_longer_role_by_: '{{userBy}}將角色 {{role}} 從使用者 {{user}} 身上移除',
|
||||
User_muted_by: '使用者 {{userMuted}} 被 {{userBy}} 靜音',
|
||||
User_removed_by: '使用者 {{userRemoved}} 被 {{userBy}} 移除',
|
||||
|
@ -560,7 +563,7 @@ export default {
|
|||
Username: '使用者名稱',
|
||||
Username_or_email: '使用者名稱或電子郵件',
|
||||
Uses_server_configuration: '使用伺服器設定',
|
||||
Usually_a_discussion_starts_with_a_question_like_How_do_I_upload_a_picture: '通常,討論會由一個問題開始,像是 \\"如何上傳一個圖片?\\"',
|
||||
Usually_a_discussion_starts_with_a_question_like_How_do_I_upload_a_picture: '通常,討論會由一個問題開始,像是 \\\'如何上傳一個圖片?\\\'',
|
||||
Validating: '正在驗證',
|
||||
Registration_Succeeded: '註冊成功',
|
||||
Verify: '驗證',
|
||||
|
@ -585,7 +588,7 @@ export default {
|
|||
Yesterday: '昨天',
|
||||
You_are_in_preview_mode: '您處於預覽模式',
|
||||
You_are_offline: '您處於離線狀態',
|
||||
You_can_search_using_RegExp_eg: '您可以使用RegExp進行搜索。例如`/^text$/i`',
|
||||
You_can_search_using_RegExp_eg: '您可用 RegExp 進行搜尋。例如`/^text$/i`',
|
||||
You_colon: '你:',
|
||||
you_were_mentioned: '你被提到了',
|
||||
You_were_removed_from_channel: '您已從 {{channel}} 中被踢除',
|
||||
|
@ -617,11 +620,11 @@ export default {
|
|||
Search_messages: '搜尋訊息',
|
||||
Scroll_messages: '訊息滾動',
|
||||
Reply_latest: '回覆最新訊息',
|
||||
Reply_in_Thread: '回覆討論',
|
||||
Reply_in_Thread: '討論串回覆',
|
||||
Server_selection: '選擇伺服器',
|
||||
Server_selection_numbers: '選擇伺服器(輸入 1...9)',
|
||||
Add_server: '新增伺服器',
|
||||
New_line: '新行',
|
||||
New_line: '新的一行',
|
||||
You_will_be_logged_out_of_this_application: '您即將登出',
|
||||
Clear: '清除',
|
||||
This_will_clear_all_your_offline_data: '這將清除您的所有離線資料。',
|
||||
|
@ -655,7 +658,27 @@ export default {
|
|||
Queue_is_empty: '佇列是空的',
|
||||
Logout_from_other_logged_in_locations: '登出其他已登入的設備',
|
||||
You_will_be_logged_out_from_other_locations: '您將於其他設備上登出',
|
||||
Logged_out_of_other_clients_successfully: '成功登出其他客戶端',
|
||||
Logged_out_of_other_clients_successfully: '成功登出其他用戶端',
|
||||
Logout_failed: '登出失敗',
|
||||
Log_analytics_events: '日誌分析事件'
|
||||
Log_analytics_events: '日誌分析事件',
|
||||
E2E_encryption_change_password_title: '變更加密密碼',
|
||||
E2E_encryption_change_password_description: '現在您可以建立加密私人群組和私訊。您也可以變更已存在的私人群組或是私訊來加密。\\n\\n這是點對點的加密,所以用來加密/解密的金鑰將不會儲存到伺服器上。為此,您必須安全存放您的密碼。如果您希望在其他裝置上使用對點加密時,將會需要輸入此密碼。',
|
||||
E2E_encryption_change_password_error: '變更 E2E 密碼時發生錯誤!',
|
||||
E2E_encryption_change_password_success: 'E2E 密碼已成功變更!',
|
||||
E2E_encryption_change_password_message: '請確定您已將其安全存放至別處',
|
||||
E2E_encryption_change_password_confirmation: '是,我要變更',
|
||||
E2E_encryption_reset_title: '重設 E2E 金鑰',
|
||||
E2E_encryption_reset_description: '此選項將撤銷您目前的*E2E 金鑰*並將您登出。\\n當您再次登入時,Rocket.Chat 將產生新的一組金鑰並恢復您對任一有在線成員的加密聊天室之存取權限。\\n由於 E2E 加密的特性,Rocket.Chat 無法恢復無在線成員之聊天室之存取權限。',
|
||||
E2E_encryption_reset_button: '重設',
|
||||
E2E_encryption_reset_error: '重設 E2E 金鑰時發生錯誤!',
|
||||
E2E_encryption_reset_message: '您將被登出',
|
||||
E2E_encryption_reset_confirmation: '是,我要重設',
|
||||
Following: '正在追蹤',
|
||||
Threads_displaying_all: '顯示全部',
|
||||
Threads_displaying_following: '顯示追蹤中',
|
||||
Threads_displaying_unread: '顯示未讀',
|
||||
No_threads: '當前沒有討論串',
|
||||
No_threads_following: '當前沒有正在追蹤的討論',
|
||||
No_threads_unread: '當前沒有未讀的討論',
|
||||
Messagebox_Send_to_channel: '發送至頻道'
|
||||
};
|
||||
|
|
|
@ -28,6 +28,7 @@ import serversMigrations from './model/servers/migrations';
|
|||
|
||||
import { isIOS } from '../../utils/deviceInfo';
|
||||
import appGroup from '../../utils/appGroup';
|
||||
import { isOfficial } from '../../constants/environment';
|
||||
|
||||
const appGroupPath = isIOS ? appGroup.path : '';
|
||||
|
||||
|
@ -35,9 +36,11 @@ if (__DEV__ && isIOS) {
|
|||
console.log(appGroupPath);
|
||||
}
|
||||
|
||||
const getDatabasePath = name => `${ appGroupPath }${ name }${ isOfficial ? '' : '-experimental' }.db`;
|
||||
|
||||
export const getDatabase = (database = '') => {
|
||||
const path = database.replace(/(^\w+:|^)\/\//, '').replace(/\//g, '.');
|
||||
const dbName = `${ appGroupPath }${ path }-experimental.db`;
|
||||
const dbName = getDatabasePath(path);
|
||||
|
||||
const adapter = new SQLiteAdapter({
|
||||
dbName,
|
||||
|
@ -70,7 +73,7 @@ class DB {
|
|||
databases = {
|
||||
serversDB: new Database({
|
||||
adapter: new SQLiteAdapter({
|
||||
dbName: `${ appGroupPath }default-experimental.db`,
|
||||
dbName: getDatabasePath('default'),
|
||||
schema: serversSchema,
|
||||
migrations: serversMigrations
|
||||
}),
|
||||
|
@ -97,7 +100,7 @@ class DB {
|
|||
|
||||
setShareDB(database = '') {
|
||||
const path = database.replace(/(^\w+:|^)\/\//, '').replace(/\//g, '.');
|
||||
const dbName = `${ appGroupPath }${ path }-experimental.db`;
|
||||
const dbName = getDatabasePath(path);
|
||||
|
||||
const adapter = new SQLiteAdapter({
|
||||
dbName,
|
||||
|
|
|
@ -76,6 +76,8 @@ export default class Subscription extends Model {
|
|||
|
||||
@json('muted', sanitizer) muted;
|
||||
|
||||
@json('ignored', sanitizer) ignored;
|
||||
|
||||
@field('broadcast') broadcast;
|
||||
|
||||
@field('prid') prid;
|
||||
|
|