From 7359c52af185a18af52ef089df985f51053cc12a Mon Sep 17 00:00:00 2001 From: Roman Volosovskyi Date: Mon, 1 Nov 2021 12:00:17 +0200 Subject: [PATCH] Bug reporting and logs sharing improvements --- .../ios/RCTStatus/RCTStatus.m | 17 +- src/status_im/subs.cljs | 3 + src/status_im/ui/screens/bug_report.cljs | 40 ++++ .../ui/screens/help_center/views.cljs | 2 +- src/status_im/ui/screens/screens.cljs | 216 +++++++++--------- src/status_im/utils/error_handler.cljs | 2 +- src/status_im/utils/logging/core.cljs | 206 +++++++++++------ src/status_im/utils/utils.cljs | 5 +- translations/ar.json | 2 +- translations/bn.json | 2 +- translations/de.json | 2 +- translations/el.json | 2 +- translations/en.json | 9 +- translations/es.json | 2 +- translations/es_419.json | 2 +- translations/es_AR.json | 2 +- translations/fil.json | 2 +- translations/fr.json | 2 +- translations/id.json | 2 +- translations/it.json | 2 +- translations/ja.json | 2 +- translations/ko.json | 2 +- translations/ms.json | 2 +- translations/nl.json | 2 +- translations/pl.json | 2 +- translations/pt.json | 2 +- translations/pt_BR.json | 2 +- translations/ru.json | 2 +- translations/tl.json | 2 +- translations/tr.json | 2 +- translations/vi.json | 2 +- translations/zh.json | 2 +- translations/zh_Hans_CN.json | 2 +- translations/zh_TW.json | 2 +- translations/zh_hans.json | 2 +- 35 files changed, 342 insertions(+), 210 deletions(-) create mode 100644 src/status_im/ui/screens/bug_report.cljs diff --git a/modules/react-native-status/ios/RCTStatus/RCTStatus.m b/modules/react-native-status/ios/RCTStatus/RCTStatus.m index f56db54824..f6aaa27d08 100644 --- a/modules/react-native-status/ios/RCTStatus/RCTStatus.m +++ b/modules/react-native-status/ios/RCTStatus/RCTStatus.m @@ -460,6 +460,7 @@ RCT_EXPORT_METHOD(saveAccountAndLogin:(NSString *)multiaccountData #if DEBUG NSLog(@"SaveAccountAndLogin() method called"); #endif + [self getExportDbFilePath]; NSString *keyUID = [self getKeyUID:multiaccountData]; NSString *finalConfig = [self prepareDirAndUpdateConfig:config withKeyUID:keyUID]; @@ -477,6 +478,7 @@ RCT_EXPORT_METHOD(saveAccountAndLoginWithKeycard:(NSString *)multiaccountData #if DEBUG NSLog(@"SaveAccountAndLoginWithKeycard() method called"); #endif + [self getExportDbFilePath]; NSString *keyUID = [self getKeyUID:multiaccountData]; NSString *finalConfig = [self prepareDirAndUpdateConfig:config withKeyUID:keyUID]; @@ -484,6 +486,17 @@ RCT_EXPORT_METHOD(saveAccountAndLoginWithKeycard:(NSString *)multiaccountData NSLog(@"%@", result); } +- (NSString *) getExportDbFilePath { + NSString *filePath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"export.db"]; + NSFileManager *fileManager = [NSFileManager defaultManager]; + + if ([fileManager fileExistsAtPath:filePath]) { + [fileManager removeItemAtPath:filePath error:nil]; + } + + return filePath; +} + - (NSURL *) getKeyStoreDir:(NSString *)keyUID { NSFileManager *fileManager = [NSFileManager defaultManager]; NSURL *rootUrl =[[fileManager @@ -523,6 +536,7 @@ RCT_EXPORT_METHOD(login:(NSString *)accountData #if DEBUG NSLog(@"Login() method called"); #endif + [self getExportDbFilePath]; [self migrateKeystore:accountData password:password]; NSString *result = StatusgoLogin(accountData, password); NSLog(@"%@", result); @@ -535,6 +549,7 @@ RCT_EXPORT_METHOD(loginWithKeycard:(NSString *)accountData #if DEBUG NSLog(@"LoginWithKeycard() method called"); #endif + [self getExportDbFilePath]; [self migrateKeystore:accountData password:password]; NSString *result = StatusgoLoginWithKeycard(accountData, password, chatKey); @@ -858,8 +873,8 @@ RCT_EXPORT_METHOD(exportUnencryptedDatabase:(NSString *)accountData #if DEBUG NSLog(@"exportUnencryptedDatabase() method called"); #endif - NSString *filePath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"export.db"]; + NSString *filePath = [self getExportDbFilePath]; StatusgoExportUnencryptedDatabase(accountData, password, filePath); callback(@[filePath]); diff --git a/src/status_im/subs.cljs b/src/status_im/subs.cljs index f419fa195a..98eb7fe20a 100644 --- a/src/status_im/subs.cljs +++ b/src/status_im/subs.cljs @@ -257,6 +257,9 @@ (reg-root-key-sub :anon-metrics/data-visible? :anon-metrics/data-visible?) (reg-root-key-sub :anon-metrics/learn-more-visible? :anon-metrics/learn-more-visible?) +(reg-root-key-sub :bug-report/description-error :bug-report/description-error) +(reg-root-key-sub :bug-report/details :bug-report/details) + (re-frame/reg-sub :communities :<- [:raw-communities] diff --git a/src/status_im/ui/screens/bug_report.cljs b/src/status_im/ui/screens/bug_report.cljs new file mode 100644 index 0000000000..23dda827ea --- /dev/null +++ b/src/status_im/ui/screens/bug_report.cljs @@ -0,0 +1,40 @@ +(ns status-im.ui.screens.bug-report + (:require [quo.core :as quo] + [quo.react-native :as react-native] + [re-frame.core :as re-frame] + [status-im.i18n.i18n :as i18n] + [status-im.ui.components.topbar :as topbar])) + +(defn bug-report [] + (let [{:keys [description steps]} @(re-frame/subscribe [:bug-report/details])] + [react-native/view {:style {:flex 1}} + [topbar/topbar + {:title (i18n/label :t/bug-report) + :modal? true}] + [react-native/view {:style {:flex 1 + :padding-top 8 + :padding-horizontal 16}} + [quo/text-input + {:label (i18n/label :t/bug-report-description) + :default-value description + :placeholder (i18n/label :t/bug-report-description-placeholder) + :style {:margin-bottom 8} + :multiline true + :error @(re-frame/subscribe [:bug-report/description-error]) + :accessibility-label :bug-report-description + :on-change-text #(re-frame/dispatch [:logging/report-details :description %])}] + [quo/text-input + {:label (i18n/label :t/bug-report-steps) + :default-value steps + :placeholder (i18n/label :t/bug-report-steps-placeholder) + :style {:margin-bottom 16} + :multiline true + :accessibility-label :bug-report-steps + :on-change-text #(re-frame/dispatch [:logging/report-details :steps %])}] + [quo/button + {:type :primary + :accessibility-label :bug-report-submit + :theme :accent + :on-press #(re-frame/dispatch + [:logging/submit-report])} + (i18n/label :t/submit)]]])) diff --git a/src/status_im/ui/screens/help_center/views.cljs b/src/status_im/ui/screens/help_center/views.cljs index fb94d026cb..120077da69 100644 --- a/src/status_im/ui/screens/help_center/views.cljs +++ b/src/status_im/ui/screens/help_center/views.cljs @@ -24,7 +24,7 @@ :title (i18n/label :t/submit-bug) :accessibility-label :submit-bug-button :on-press - #(re-frame/dispatch [:logging.ui/send-logs-pressed]) + #(re-frame/dispatch [:open-modal :bug-report]) :chevron true} {:size :small :title (i18n/label :t/request-feature) diff --git a/src/status_im/ui/screens/screens.cljs b/src/status_im/ui/screens/screens.cljs index 5ff133ad4d..6cca0522ed 100644 --- a/src/status_im/ui/screens/screens.cljs +++ b/src/status_im/ui/screens/screens.cljs @@ -1,122 +1,123 @@ (ns status-im.ui.screens.screens - (:require [status-im.ui.screens.add-new.new-public-chat.view :as new-public-chat] - [status-im.ui.screens.wallet.recipient.views :as recipient] - [status-im.ui.screens.qr-scanner.views :as qr-scanner] - [status-im.ui.screens.stickers.views :as stickers] - [status-im.ui.screens.add-new.new-chat.views :as new-chat] - [status-im.add-new.core :as new-chat.events] - [status-im.ui.screens.wallet.buy-crypto.views :as wallet.buy-crypto] - [status-im.ui.screens.group.views :as group-chat] - [status-im.ui.components.invite.views :as invite] + (:require [quo.design-system.colors :as colors] [quo.previews.main :as quo.preview] - [status-im.ui.screens.profile.contact.views :as contact] - [status-im.ui.screens.notifications-settings.views :as notifications-settings] - [status-im.ui.screens.wallet.send.views :as wallet.send] - [status-im.ui.screens.status.new.views :as status.new] - [status-im.ui.screens.browser.bookmarks.views :as bookmarks] - [status-im.ui.screens.communities.invite :as communities.invite] - [status-im.ui.screens.keycard.onboarding.views :as keycard.onboarding] - [status-im.ui.screens.keycard.recovery.views :as keycard.recovery] - [status-im.keycard.core :as keycard.core] - [status-im.ui.screens.keycard.views :as keycard] - [status-im.ui.screens.multiaccounts.key-storage.views :as key-storage.views] - [status-im.ui.screens.home.views :as home] - [status-im.ui.screens.chat.views :as chat] - [status-im.ui.screens.referrals.public-chat :as referrals.public-chat] - [status-im.ui.screens.communities.views :as communities] - [status-im.ui.screens.communities.community :as community] - [status-im.ui.screens.communities.create :as communities.create] - [status-im.ui.screens.communities.import :as communities.import] - [status-im.ui.screens.communities.profile :as community.profile] - [status-im.ui.screens.communities.edit :as community.edit] - [status-im.ui.screens.communities.create-channel :as create-channel] - [status-im.ui.screens.communities.community-emoji-thumbnail-picker :as community-emoji-thumbnail-picker] - [status-im.ui.screens.communities.membership :as membership] - [status-im.ui.screens.communities.members :as members] - [status-im.ui.screens.communities.requests-to-join :as requests-to-join] - [status-im.ui.screens.profile.group-chat.views :as profile.group-chat] - [status-im.ui.screens.notifications-center.views :as notifications-center] - [status-im.ui.screens.browser.empty-tab.views :as empty-tab] - [status-im.ui.screens.browser.views :as browser] - [status-im.ui.screens.browser.tabs.views :as browser.tabs] - [status-im.ui.screens.multiaccounts.login.views :as login] - [status-im.ui.screens.progress.views :as progress] - [status-im.ui.screens.multiaccounts.views :as multiaccounts] - [status-im.ui.screens.keycard.authentication-method.views :as keycard.authentication] - [status-im.ui.screens.onboarding.intro.views :as onboarding.intro] - [status-im.ui.screens.onboarding.keys.views :as onboarding.keys] - [status-im.ui.screens.onboarding.password.views :as onboarding.password] - [status-im.ui.screens.onboarding.storage.views :as onboarding.storage] - [status-im.ui.screens.onboarding.notifications.views :as onboarding.notifications] - [status-im.ui.screens.onboarding.welcome.views :as onboarding.welcome] - [status-im.ui.screens.onboarding.phrase.view :as onboarding.phrase] - [status-im.ui.screens.currency-settings.views :as currency-settings] - [status-im.ui.screens.wallet.settings.views :as wallet-settings] - [status-im.ui.screens.wallet.transactions.views :as wallet-transactions] - [status-im.ui.screens.wallet.custom-tokens.views :as custom-tokens] - [status-im.ui.screens.wallet.accounts.views :as wallet.accounts] - [status-im.ui.screens.wallet.collectibles.views :as wallet.collectibles] - [status-im.ui.screens.wallet.account.views :as wallet.account] - [status-im.ui.screens.wallet.add-new.views :as add-account] - [status-im.ui.screens.wallet.account-settings.views :as account-settings] + [status-im.add-new.core :as new-chat.events] [status-im.i18n.i18n :as i18n] - [status-im.ui.screens.status.views :as status.views] - [status-im.ui.screens.profile.user.views :as profile.user] - [status-im.ui.screens.ens.views :as ens] - [status-im.ui.screens.contacts-list.views :as contacts-list] + [status-im.keycard.core :as keycard.core] + [status-im.ui.components.icons.icons :as icons] + [status-im.ui.components.invite.views :as invite] + [status-im.ui.screens.about-app.views :as about-app] + [status-im.ui.screens.add-new.new-chat.views :as new-chat] + [status-im.ui.screens.add-new.new-public-chat.view :as new-public-chat] + [status-im.ui.screens.advanced-settings.views :as advanced-settings] + [status-im.ui.screens.anonymous-metrics-settings.views :as anonymous-metrics-settings] + [status-im.ui.screens.appearance.views :as appearance] [status-im.ui.screens.bootnodes-settings.edit-bootnode.views :as edit-bootnode] [status-im.ui.screens.bootnodes-settings.views :as bootnodes-settings] - [status-im.ui.screens.wakuv2-settings.views :as wakuv2-settings] - [status-im.ui.screens.wakuv2-settings.edit-node.views + [status-im.ui.screens.browser.bookmarks.views :as bookmarks] + [status-im.ui.screens.browser.empty-tab.views :as empty-tab] + [status-im.ui.screens.browser.tabs.views :as browser.tabs] + [status-im.ui.screens.browser.views :as browser] + [status-im.ui.screens.bug-report :as bug-report] + [status-im.ui.screens.chat.pinned-messages :as pin-messages] + [status-im.ui.screens.chat.views :as chat] + [status-im.ui.screens.communities.channel-details :as communities.channel-details] + [status-im.ui.screens.communities.community :as community] + [status-im.ui.screens.communities.community-emoji-thumbnail-picker :as community-emoji-thumbnail-picker] + [status-im.ui.screens.communities.create :as communities.create] + [status-im.ui.screens.communities.create-category :as create-category] + [status-im.ui.screens.communities.create-channel :as create-channel] + [status-im.ui.screens.communities.edit :as community.edit] + [status-im.ui.screens.communities.edit-channel :as edit-channel] + [status-im.ui.screens.communities.import :as communities.import] + [status-im.ui.screens.communities.invite :as communities.invite] + [status-im.ui.screens.communities.members :as members] + [status-im.ui.screens.communities.membership :as membership] + [status-im.ui.screens.communities.profile :as community.profile] + [status-im.ui.screens.communities.reorder-categories :as reorder-categories] + [status-im.ui.screens.communities.requests-to-join :as requests-to-join] + [status-im.ui.screens.communities.select-category :as select-category] + [status-im.ui.screens.communities.views :as communities] + [status-im.ui.screens.contacts-list.views :as contacts-list] + [status-im.ui.screens.currency-settings.views :as currency-settings] + [status-im.ui.screens.dapps-permissions.views :as dapps-permissions] + [status-im.ui.screens.default-sync-period-settings.view :as default-sync-period-settings] + [status-im.ui.screens.ens.views :as ens] + [status-im.ui.screens.fleet-settings.views :as fleet-settings] + [status-im.ui.screens.glossary.view :as glossary] + [status-im.ui.screens.group.views :as group-chat] + [status-im.ui.screens.help-center.views :as help-center] + [status-im.ui.screens.home.views :as home] + [status-im.ui.screens.keycard.authentication-method.views :as keycard.authentication] + [status-im.ui.screens.keycard.onboarding.views :as keycard.onboarding] + [status-im.ui.screens.keycard.pairing.views :as keycard.pairing] + [status-im.ui.screens.keycard.pin.views :as keycard.pin] + [status-im.ui.screens.keycard.recovery.views :as keycard.recovery] + [status-im.ui.screens.keycard.settings.views :as keycard.settings] + [status-im.ui.screens.keycard.views :as keycard] + [status-im.ui.screens.link-previews-settings.views :as link-previews-settings] + [status-im.ui.screens.log-level-settings.views :as log-level-settings] + [status-im.ui.screens.mobile-network-settings.view :as - edit-wakuv2-node] - [status-im.ui.screens.pairing.views :as pairing] + mobile-network-settings] + [status-im.ui.screens.multiaccounts.key-storage.views :as key-storage.views] + [status-im.ui.screens.multiaccounts.login.views :as login] + [status-im.ui.screens.multiaccounts.views :as multiaccounts] + [status-im.ui.screens.network-info.views :as network-info] + [status-im.ui.screens.network.edit-network.views :as edit-network] + [status-im.ui.screens.network.network-details.views :as network-details] + [status-im.ui.screens.network.views :as network] + [status-im.ui.screens.notifications-center.views :as notifications-center] + [status-im.ui.screens.notifications-settings.views :as notifications-settings] [status-im.ui.screens.offline-messaging-settings.edit-mailserver.views :as edit-mailserver] [status-im.ui.screens.offline-messaging-settings.views :as offline-messaging-settings] - [status-im.ui.screens.dapps-permissions.views :as dapps-permissions] - [status-im.ui.screens.link-previews-settings.views :as link-previews-settings] - [status-im.ui.screens.privacy-and-security-settings.views :as privacy-and-security] - [status-im.ui.screens.privacy-and-security-settings.messages-from-contacts-only :as messages-from-contacts-only] - [status-im.ui.screens.sync-settings.views :as sync-settings] - [status-im.ui.screens.advanced-settings.views :as advanced-settings] - [status-im.ui.screens.help-center.views :as help-center] - [status-im.ui.screens.glossary.view :as glossary] - [status-im.ui.screens.about-app.views :as about-app] - [status-im.ui.screens.mobile-network-settings.view - :as - mobile-network-settings] - [status-im.ui.screens.reset-password.views :as reset-password] - [status-im.ui.screens.network.edit-network.views :as edit-network] - [status-im.ui.screens.network.views :as network] - [status-im.ui.screens.network.network-details.views :as network-details] - [status-im.ui.screens.network-info.views :as network-info] - [status-im.ui.screens.rpc-usage-info :as rpc-usage-info] - [status-im.ui.screens.log-level-settings.views :as log-level-settings] - [status-im.ui.screens.fleet-settings.views :as fleet-settings] - [status-im.ui.screens.profile.seed.views :as profile.seed] - [status-im.ui.screens.keycard.pin.views :as keycard.pin] - [status-im.ui.screens.keycard.pairing.views :as keycard.pairing] - [status-im.ui.screens.keycard.settings.views :as keycard.settings] - [status-im.ui.screens.appearance.views :as appearance] - [status-im.ui.screens.terms-of-service.views :as terms-of-service] + [status-im.ui.screens.onboarding.intro.views :as onboarding.intro] + [status-im.ui.screens.onboarding.keys.views :as onboarding.keys] + [status-im.ui.screens.onboarding.notifications.views :as onboarding.notifications] + [status-im.ui.screens.onboarding.password.views :as onboarding.password] + [status-im.ui.screens.onboarding.phrase.view :as onboarding.phrase] + [status-im.ui.screens.onboarding.storage.views :as onboarding.storage] + [status-im.ui.screens.onboarding.welcome.views :as onboarding.welcome] + [status-im.ui.screens.pairing.views :as pairing] [status-im.ui.screens.privacy-and-security-settings.delete-profile :as delete-profile] - [status-im.ui.screens.default-sync-period-settings.view :as default-sync-period-settings] - [status-im.ui.screens.communities.channel-details :as communities.channel-details] - [status-im.ui.screens.communities.edit-channel :as edit-channel] - [status-im.ui.screens.anonymous-metrics-settings.views :as anonymous-metrics-settings] - [quo.design-system.colors :as colors] - [status-im.ui.components.icons.icons :as icons] - [status-im.ui.screens.chat.pinned-messages :as pin-messages] - [status-im.ui.screens.communities.create-category :as create-category] - [status-im.ui.screens.communities.select-category :as select-category] - [status-im.ui.screens.communities.reorder-categories :as reorder-categories] - [status-im.ui.screens.wallet.accounts-manage.views :as accounts-manage])) + [status-im.ui.screens.privacy-and-security-settings.messages-from-contacts-only :as messages-from-contacts-only] + [status-im.ui.screens.privacy-and-security-settings.views :as privacy-and-security] + [status-im.ui.screens.profile.contact.views :as contact] + [status-im.ui.screens.profile.group-chat.views :as profile.group-chat] + [status-im.ui.screens.profile.seed.views :as profile.seed] + [status-im.ui.screens.profile.user.views :as profile.user] + [status-im.ui.screens.progress.views :as progress] + [status-im.ui.screens.qr-scanner.views :as qr-scanner] + [status-im.ui.screens.referrals.public-chat :as referrals.public-chat] + [status-im.ui.screens.reset-password.views :as reset-password] + [status-im.ui.screens.rpc-usage-info :as rpc-usage-info] + [status-im.ui.screens.status.new.views :as status.new] + [status-im.ui.screens.status.views :as status.views] + [status-im.ui.screens.stickers.views :as stickers] + [status-im.ui.screens.sync-settings.views :as sync-settings] + [status-im.ui.screens.terms-of-service.views :as terms-of-service] + [status-im.ui.screens.wakuv2-settings.edit-node.views + :as + edit-wakuv2-node] + [status-im.ui.screens.wakuv2-settings.views :as wakuv2-settings] + [status-im.ui.screens.wallet.account-settings.views :as account-settings] + [status-im.ui.screens.wallet.account.views :as wallet.account] + [status-im.ui.screens.wallet.accounts-manage.views :as accounts-manage] + [status-im.ui.screens.wallet.accounts.views :as wallet.accounts] + [status-im.ui.screens.wallet.add-new.views :as add-account] + [status-im.ui.screens.wallet.buy-crypto.views :as wallet.buy-crypto] + [status-im.ui.screens.wallet.collectibles.views :as wallet.collectibles] + [status-im.ui.screens.wallet.custom-tokens.views :as custom-tokens] + [status-im.ui.screens.wallet.recipient.views :as recipient] + [status-im.ui.screens.wallet.send.views :as wallet.send] + [status-im.ui.screens.wallet.settings.views :as wallet-settings] + [status-im.ui.screens.wallet.transactions.views :as wallet-transactions])) (def components [{:name :chat-toolbar @@ -868,7 +869,12 @@ :options {:topBar {:visible false}} :insets {:bottom true} ;;TODO move to popover? - :component key-storage.views/storage}] + :component key-storage.views/storage} + + ;; BUG REPORT + {:name :bug-report + :options {:topBar {:visible false}} + :component bug-report/bug-report}] (when js/goog.DEBUG quo.preview/screens) diff --git a/src/status_im/utils/error_handler.cljs b/src/status_im/utils/error_handler.cljs index e20dde48de..a717a2d92f 100644 --- a/src/status_im/utils/error_handler.cljs +++ b/src/status_im/utils/error_handler.cljs @@ -60,4 +60,4 @@ {:title "Error" :content (.-message e) :confirm-button-text (i18n/label :t/send-logs) - :on-accept #(re-frame/dispatch [:logging.ui/send-logs-pressed])}))))))) + :on-accept #(re-frame/dispatch [:logging.ui/send-logs-pressed :email])}))))))) diff --git a/src/status_im/utils/logging/core.cljs b/src/status_im/utils/logging/core.cljs index 3a50ca65b3..dbab2a661b 100644 --- a/src/status_im/utils/logging/core.cljs +++ b/src/status_im/utils/logging/core.cljs @@ -1,17 +1,19 @@ (ns status-im.utils.logging.core - (:require [re-frame.core :as re-frame] - [status-im.native-module.core :as status] - [status-im.utils.fx :as fx] - [status-im.utils.types :as types] - [taoensso.timbre :as log] - [status-im.i18n.i18n :as i18n] - [status-im.utils.platform :as platform] - [status-im.utils.build :as build] - [status-im.transport.utils :as transport.utils] - [status-im.utils.datetime :as datetime] + (:require ["react-native-mail" :default react-native-mail] [clojure.string :as string] + [re-frame.core :as re-frame] + [status-im.bottom-sheet.core :as bottom-sheet] + [status-im.i18n.i18n :as i18n] + [status-im.native-module.core :as status] + [status-im.transport.utils :as transport.utils] + [status-im.ui.components.react :as react] + [status-im.utils.build :as build] [status-im.utils.config :as config] - ["react-native-mail" :default react-native-mail])) + [status-im.utils.datetime :as datetime] + [status-im.utils.fx :as fx] + [status-im.utils.platform :as platform] + [status-im.utils.types :as types] + [taoensso.timbre :as log])) (def report-email "error-reports@status.im") (def max-log-entries 1000) @@ -54,57 +56,10 @@ {:db (assoc-in db [:multiaccount :log-level] log-level) :logs/set-level log-level})) -(fx/defn send-logs - {:events [:logging.ui/send-logs-pressed]} - [{:keys [db]}] - ;; TODO: Add message explaining db export - (let [db-json (types/clj->json (select-keys db [:app-state - :current-chat-id - :network - :network-status - :peers-count - :peers-summary - :sync-state - :view-id - :chat/cooldown-enabled? - :chat/cooldowns - :chat/last-outgoing-message-sent-at - :chat/spam-messages-frequency - :chats/loading? - :dimensions/window]))] - {:logs/archive-logs [db-json ::send-email]})) - -(fx/defn show-client-error - {:events [:show-client-error]} - [_] - {:utils/show-popup {:title (i18n/label :t/cant-report-bug) - :content (i18n/label :t/mail-should-be-configured)}}) - -(fx/defn show-logs-dialog - {:events [:shake-event]} - [{:keys [db]}] - (when-not (:logging/dialog-shown? db) - {:db - (assoc db :logging/dialog-shown? true) - :utils/show-confirmation - {:title (i18n/label :t/send-logs) - :content (i18n/label :t/send-logs-to - {:email report-email}) - :confirm-button-text (i18n/label :t/send-logs) - :on-accept #(re-frame/dispatch - [:logging.ui/send-logs-pressed]) - :on-cancel #(re-frame/dispatch - [:logging/dialog-canceled])}})) - -(fx/defn dialog-closed - {:events [:logging/dialog-canceled]} - [{:keys [db]}] - {:db (dissoc db :logging/dialog-shown?)}) - (defn email-body "logs attached" [{:keys [:web3-node-version :mailserver/current-id - :node-info :peers-summary]}] + :node-info :peers-summary :bug-report/details]}] (let [build-number build/build-no build-version (str build/version " (" build-number ")") separator (string/join (take 40 (repeat "-"))) @@ -112,7 +67,9 @@ (transport.utils/extract-url-components (:enode node-info))] (string/join "\n" - (concat [(i18n/label :t/report-bug-email-template)] + (concat [(i18n/label :t/report-bug-email-template + {:description (:description details) + :steps (:steps details)})] [separator (str "App version: " build-version) (str "OS: " platform/os) @@ -139,13 +96,10 @@ (datetime/timestamp->long-date (datetime/now))])))) -(re-frame/reg-fx - :email/send - ;; https://github.com/chirag04/react-native-mail#example - (fn [[opts callback]] - (.mail react-native-mail - (clj->js opts) - callback))) +(fx/defn dialog-closed + {:events [:logging/dialog-left]} + [{:keys [db]}] + {:db (dissoc db :logging/dialog-shown?)}) (fx/defn send-email [_ opts callback] @@ -156,14 +110,120 @@ [{:keys [db] :as cofx} archive-uri] (fx/merge cofx + {:db (dissoc db :bug-report/details)} (dialog-closed) (send-email - {:subject "Error report" - :recipients [report-email] - :body (email-body db) - :attachments [{:uri archive-uri - :type "zip" - :name "status_logs.zip"}]} + (cond-> {:subject "Error report" + :recipients [report-email] + :body (email-body db)} + + (not (nil? archive-uri)) + (assoc :attachments [{:uri archive-uri + :type "zip" + :name "status_logs.zip"}])) (fn [event] (when (= event "not_available") (re-frame/dispatch [:show-client-error])))))) + +(defn logs-enabled? [db] + (not (string/blank? (get-in db [:multiaccount :log-level])))) + +(fx/defn send-logs + {:events [:logging.ui/send-logs-pressed]} + [{:keys [db] :as cofx} transport] + (if (logs-enabled? db) + ;; TODO: Add message explaining db export + (let [db-json (types/clj->json (select-keys db [:app-state + :current-chat-id + :network + :network-status + :peers-count + :peers-summary + :sync-state + :view-id + :chat/cooldown-enabled? + :chat/cooldowns + :chat/last-outgoing-message-sent-at + :chat/spam-messages-frequency + :chats/loading? + :dimensions/window]))] + {:logs/archive-logs [db-json (if (= transport :email) + ::send-email + ::share-logs-file)]}) + (send-email-event cofx nil))) + +(fx/defn show-client-error + {:events [:show-client-error]} + [_] + {:utils/show-popup {:title (i18n/label :t/cant-report-bug) + :content (i18n/label :t/mail-should-be-configured)}}) + +(fx/defn show-logs-dialog + {:events [:shake-event]} + [{:keys [db]}] + (when-not (:logging/dialog-shown? db) + {:db (assoc db :logging/dialog-shown? true) + :utils/show-confirmation + (cond-> {:title (i18n/label :t/send-logs) + :content (i18n/label :t/send-logs-to + {:email report-email}) + :confirm-button-text (i18n/label :t/send-logs) + :on-accept #(do (re-frame/dispatch [:open-modal :bug-report]) + (re-frame/dispatch [:logging/dialog-left])) + :on-cancel #(re-frame/dispatch [:logging/dialog-left])} + + platform/ios? + (assoc :extra-options [{:text (i18n/label :t/share-logs) + :onPress #(re-frame/dispatch + [:logging.ui/send-logs-pressed :sharing]) + :style "default"}]))})) + +(re-frame/reg-fx + :email/send + ;; https://github.com/chirag04/react-native-mail#example + (fn [[opts callback]] + (.mail react-native-mail (clj->js opts) callback))) + +(re-frame/reg-fx + ::share-archive + (fn [opts] + (.share ^js react/sharing (clj->js opts)))) + +(fx/defn share-archive + [_ opts] + {::share-archive opts}) + +(fx/defn share-logs-file + {:events [::share-logs-file]} + [{:keys [db] :as cofx} archive-uri] + (fx/merge + cofx + (dialog-closed) + (share-archive + {:title "Archived logs" + :url archive-uri}))) + +(fx/defn details + {:events [:logging/report-details]} + [{:keys [db]} key value] + {:db (-> db + (assoc-in [:bug-report/details key] value) + (dissoc :bug-report/description-error))}) + +(def min-description-lenght 6) + +(defn validate-description [db] + (let [description (get-in db [:bug-report/details :description] "")] + (when (> min-description-lenght + (count (string/trim description))) + (i18n/label :t/bug-report-too-short-description)))) + +(fx/defn submit-report + {:events [:logging/submit-report]} + [{:keys [db] :as cofx} details steps] + (if-let [error (validate-description db)] + {:db (assoc db :bug-report/description-error error)} + (fx/merge + cofx + (bottom-sheet/hide-bottom-sheet) + (send-logs :email)))) diff --git a/src/status_im/utils/utils.cljs b/src/status_im/utils/utils.cljs index dfc585e8f6..06a34b45bf 100644 --- a/src/status_im/utils/utils.cljs +++ b/src/status_im/utils/utils.cljs @@ -53,13 +53,14 @@ (re-frame/reg-fx :utils/show-confirmation - (fn [{:keys [title content confirm-button-text on-accept on-cancel cancel-button-text]}] + (fn [{:keys [title content confirm-button-text on-accept on-cancel cancel-button-text extra-options]}] (show-confirmation {:title title :content content :confirm-button-text confirm-button-text :cancel-button-text cancel-button-text :on-accept on-accept - :on-cancel on-cancel}))) + :on-cancel on-cancel + :extra-options extra-options}))) (defn show-question ([title content on-accept] diff --git a/translations/ar.json b/translations/ar.json index 4394a03fd2..c216b0c6ec 100644 --- a/translations/ar.json +++ b/translations/ar.json @@ -1351,7 +1351,7 @@ "repeat-pin": "أدخل رمز المرور المكون من 6 أرقام", "repeat-puk": "كرر رمز مرور الجديد المكون من 12 رقمًا", "replying-to": "الرد على{{author}}", - "report-bug-email-template": "1. وصف المشكلة\n(وصف الميزة التي تريد ، أو تلخيص بإيجاز الشوائب وما فعلت ، ما كنت تتوقع ان يحدث ، وما يحدث في الواقع. الفروع أدناه)\n\n2-الخطوات اللازمة لأعاده الإنتاج\n(وصف كيف يمكننا تكرار الخطا خطوه بخطوه.)\n-فتح الحالة \n-الخطوة 3 ، الخ.\n\n3. السلوك المتوقع\n(وصف ما كنت تتوقع ان يحدث.)\n\n4-السلوك الفعلي\n(وصف ما حدث بالفعل.)\n\n5. إرفاق لقطات الشاشة التي يمكن ان العرض المشكلة ، يرجى\n", + "report-bug-email-template": "1. وصف المشكلة\n{{description}}\n\n2-الخطوات اللازمة لأعاده الإنتاج\n{{steps}}\n\n3. إرفاق لقطات الشاشة التي يمكن ان العرض المشكلة ، يرجى\n", "request-access": "طلب الدخول", "request-feature": "طلب ميزة", "request-membership": "طلب عضوية", diff --git a/translations/bn.json b/translations/bn.json index dae4d0bfed..d053336a4a 100644 --- a/translations/bn.json +++ b/translations/bn.json @@ -1285,7 +1285,7 @@ "remove-token": "টোকেন অপসারণ করুন", "removed": "অপসারণ", "repeat-pin": "নতুন ৬-সংখ্যার পাসকোড পুনরাবৃত্তি করুন", - "report-bug-email-template": "1. ইস্যু বিবরণ (আপনি যে বৈশিষ্ট্যটি চান তা বর্ণনা করুন, অথবা সংক্ষেপে বাগ এবং আপনি কি করেছেন, আপনি কি আশা করেছিলেন, এবং আসলে কি ঘটবে তা বর্ণনা করুন। নিচের বিভাগসমূহ) 2. প্রজননের পদক্ষেপ (বর্ণনা করুন কিভাবে আমরা ধাপে ধাপে বাগ প্রতিলিপি করতে পারি। - Status খুলুন -... - ধাপ ৩, ইত্যাদি। 3. প্রত্যাশিত আচরণ (আপনি যা আশা করেছেন তা বর্ণনা করুন। 4. প্রকৃত আচরণ (আসলে কি ঘটেছে তা বর্ণনা করুন। 5. সমস্যা ডেমো করতে পারে দয়া করে এমন স্ক্রিনশট সংযুক্ত করুন।", + "report-bug-email-template": "1. ইস্যু বিবরণ \n {{description}} \n\n\n 2. প্রজননের পদক্ষেপ \n {{steps}} \n\n\n 3. সমস্যা ডেমো করতে পারে দয়া করে এমন স্ক্রিনশট সংযুক্ত করুন।", "request-feature": "একটি বৈশিষ্ট্য অনুরোধ", "request-membership": "সদস্যতার জন্য অনুরোধ", "request-pending": "মুলতুবি অনুরোধ…", diff --git a/translations/de.json b/translations/de.json index efccc3238f..3af88693da 100644 --- a/translations/de.json +++ b/translations/de.json @@ -1188,7 +1188,7 @@ "removed": "entfernt", "repeat-pin": "Wiederholen Sie den neuen 6-stelligen Passcode", "repeat-puk": "Wiederholen Sie den neuen 12-stelligen PUK", - "report-bug-email-template": "1. Problembeschreibung \n (Beschreiben Sie die gewünschte Funktion oder fassen Sie den Fehler kurz zusammen und was Sie getan haben, was Sie erwartet haben und was tatsächlich passiert ist. Siehe unten)\n\n\n 2. Schritte zum Reproduzieren \n (Beschreiben Sie, wie wir den Fehler Schritt für Schritt reproduzieren können.) \n -Starten Sie Status \n -... \n -Schritt 3 usw. \n\n\n 3. Erwartetes Verhalten \n (Beschreiben Sie, was Sie erwartet haben.) \n\n\n 4. Tatsächliches Verhalten \n (Beschreiben Sie, was tatsächlich passiert ist.) \n\n\n 5. Fügen Sie bitte Screenshots bei, die das Problem demonstrieren können \n", + "report-bug-email-template": "1. Problembeschreibung \n {{description}}\n\n\n 2. Schritte zum Reproduzieren \n {{steps}} \n\n\n 3. Fügen Sie bitte Screenshots bei, die das Problem demonstrieren können \n", "request-access": "Zugang anfordern", "request-feature": "Eine Funktion vorschlagen", "request-membership": "Mitgliedschaft anfragen", diff --git a/translations/el.json b/translations/el.json index cde9f2dd57..6527d91c67 100644 --- a/translations/el.json +++ b/translations/el.json @@ -1053,7 +1053,7 @@ "remove-token": "Κατάργηση token", "removed": "αφαιρέθηκε", "repeat-pin": "Επαναλάβετε νέο 6ψήφιο κωδικό πρόσβασης", - "report-bug-email-template": "1. Περιγραφή ζητήματος\n (Περιγράψτε τη λειτουργία που θα σας άρεσε ή συνοψίστε εν συντομία το σφάλμα και τι κάνατε, τι περιμένατε να συμβεί και τι πραγματικά συμβαίνει. Ενότητες παρακάτω) \n\n\n 2. Βήματα αναπαραγωγής\n (Περιγράψτε πώς μπορούμε να επαναλάβουμε το σφάλμα βήμα προς βήμα.)\n -Ανοιγμα Status\n -...\n - Βήμα 3 κ.λπ. \n\n\n 3. Αναμενόμενη συμπεριφορά\n (Περιγράψτε τι περιμένατε να συμβεί.) \n\n\n 4. Πραγματική συμπεριφορά\n (Περιγράψτε τι πραγματικά συνέβη.) \n\n\n 5. Επισυνάψτε στιγμιότυπα οθόνης που μπορούν να επιδείξουν το πρόβλημα, παρακαλώ\n", + "report-bug-email-template": "1. Περιγραφή ζητήματος\n {{description}} \n\n\n 2. Βήματα αναπαραγωγής\n{{steps}}\n\n\n 3. Επισυνάψτε στιγμιότυπα οθόνης που μπορούν να επιδείξουν το πρόβλημα, παρακαλώ\n", "request-feature": "Ζητήστε ένα χαρακτηριστικό", "request-membership": "Αίτηση ιδιότητας μέλους", "request-pending": "Το αίτημά σας είναι σε αναμονή…", diff --git a/translations/en.json b/translations/en.json index 24c22a1b48..5ede739d50 100644 --- a/translations/en.json +++ b/translations/en.json @@ -109,6 +109,12 @@ "browsing-site-blocked-go-back": "Go back", "browsing-site-blocked-title": "This site is blocked", "browsing-title": "Browse", + "bug-report": "Report a bug", + "bug-report-description": "* Description", + "bug-report-description-placeholder": "Required, can't be empty", + "bug-report-steps": "Steps to reproduce", + "bug-report-steps-placeholder": "- open app\n- do something\n- and then somethig else...", + "bug-report-too-short-description": "Description is too short", "camera-access-error": "To grant the required camera permission, please go to your system settings and make sure that Status > Camera is selected.", "can-not-add-yourself": "That's you, to start a chat choose someone else", "cancel": "Cancel", @@ -1075,7 +1081,7 @@ "removed": "removed", "repeat-pin": "Repeat new 6-digit passcode", "repeat-puk": "Repeat new 12-digit PUK", - "report-bug-email-template": "1. Issue Description\n(Describe the feature you would like, or briefly summarise the bug and what you did, what you expected to happen, and what actually happens. Sections below)\n\n\n2. Steps to reproduce\n(Describe how we can replicate the bug step by step.)\n-Open Status\n-...\n-Step 3, etc.\n\n\n3. Expected behavior\n(Describe what you expected to happen.)\n\n\n4. Actual behavior\n(Describe what actually happened.)\n\n\n5. Attach screenshots that can demo the problem, please\n", + "report-bug-email-template": "1. Issue Description\n{{description}}\n\n\n2. Steps to reproduce\n{{steps}}\n\n\n3. Attach screenshots that can demo the problem, please\n", "request-transaction": "Request transaction", "required-field": "Required field", "resend-message": "Resend", @@ -1131,6 +1137,7 @@ "share-public-chat-text": "Check out this public chat on the Status app: {{link}}", "sharing-copied-to-clipboard": "Copied", "sharing-copy-to-clipboard": "Copy", + "share-logs": "Share logs", "sharing-share": "Share", "show-less": "Show less", "show-more": "Show more", diff --git a/translations/es.json b/translations/es.json index 4bbf6fbda4..651f29af13 100644 --- a/translations/es.json +++ b/translations/es.json @@ -1163,7 +1163,7 @@ "removed": "eliminado", "repeat-pin": "Repite el nuevo código de acceso de 6 dígitos", "replying-to": "Respondiendo a {{author}}", - "report-bug-email-template": "1. Descripción del problema \n (Describe la función que deseas, o resume brevemente el error y lo que hiciste, lo que esperabas que sucediera y lo que realmente sucede. Secciones a continuación) \n\n\n 2. Pasos para reproducir \n (Describe cómo podemos replicar el error paso a paso). \n -Abre Status \n -... \n -Paso 3, etc. \n\n\n 3. Resultado esperado \n (Describe lo que esperabas que sucediera). \n\n\n 4. Resultado real \n (Describe lo que realmente sucedió). \n\n\n 5. Adjunta capturas de pantalla que puedan demostrar el problema\n", + "report-bug-email-template": "1. Descripción del problema \n {{description}}\n\n\n 2. Pasos para reproducir \n {{steps}}\n\n\n 3. Adjunta capturas de pantalla que puedan demostrar el problema\n", "request-access": "Solicitar acceso", "request-feature": "Solicitar una funcionalidad", "request-membership": "Solicitar membresía", diff --git a/translations/es_419.json b/translations/es_419.json index f61f976dcd..670c32e99e 100644 --- a/translations/es_419.json +++ b/translations/es_419.json @@ -1279,7 +1279,7 @@ "repeat-pin": "Repite el nuevo código de acceso de 6 dígitos", "repeat-puk": "Repita el nuevo PUK de 12 dígitos", "replying-to": "Respondiendo a {{author}}", - "report-bug-email-template": "1. Descripción del problema \n (Describe la función que deseas, o resume brevemente el error y lo que hiciste, lo que esperabas que sucediera y lo que realmente sucede. Secciones a continuación) \n\n\n 2. Pasos para reproducir \n (Describe cómo podemos replicar el error paso a paso). \n -Abre Status \n -... \n -Paso 3, etc. \n\n\n 3. Comportamiento esperado \n (Describe lo que esperabas que sucediera). \n\n\n 4. Comportamiento real \n (Describe lo que realmente sucedió). \n\n\n 5. Adjunta capturas de pantalla que puedan demostrar el problema, por favor \n", + "report-bug-email-template": "1. Descripción del problema \n {{description}}\n\n\n 2. Pasos para reproducir \n {{steps}} \n\n\n 3. Adjunta capturas de pantalla que puedan demostrar el problema, por favor \n", "request-access": "Solicitar acceso", "request-feature": "Solicitar una funcionalidad", "request-membership": "Solicitar membresía", diff --git a/translations/es_AR.json b/translations/es_AR.json index 3c45f0c72f..3d328f3a27 100644 --- a/translations/es_AR.json +++ b/translations/es_AR.json @@ -1165,7 +1165,7 @@ "remove-token": "Eliminar token", "removed": "eliminado", "repeat-pin": "Repite el nuevo código de acceso de 6 dígitos", - "report-bug-email-template": "1. Descripción del problema \n (Describe la función que deseas, o resume brevemente el error y lo que hiciste, lo que esperabas que sucediera y lo que realmente sucede. Secciones a continuación) \n\n\n 2. Pasos para reproducir \n (Describe cómo podemos replicar el error paso a paso). \n -Abre Status \n -... \n -Paso 3, etc. \n\n\n 3. Comportamiento esperado \n (Describe lo que esperabas que sucediera). \n\n\n 4. Comportamiento real \n (Describe lo que realmente sucedió). \n\n\n 5. Adjunta capturas de pantalla que puedan demostrar el problema, por favor \n", + "report-bug-email-template": "1. Descripción del problema \n {{description}} \n\n\n 2. Pasos para reproducir \n {{steps}}\n\n\n 3. Adjunta capturas de pantalla que puedan demostrar el problema, por favor \n", "request-access": "Solicitar acceso", "request-feature": "Solicitar una funcionalidad", "request-membership": "Solicitar membresía", diff --git a/translations/fil.json b/translations/fil.json index f32a66df6e..4e3b5a707b 100644 --- a/translations/fil.json +++ b/translations/fil.json @@ -1351,7 +1351,7 @@ "repeat-pin": "Ulitin ang bagong 6-digit na passcode", "repeat-puk": "Ulitin ang bagong 12-digit PUK", "replying-to": "Tumugon kay {{author}}", - "report-bug-email-template": "1. Paglalarawan ng Isyu\n(Ilarawan ang tampok na nais mo, o maikli ang buod ng bug at kung ano ang iyong ginawa, kung ano ang inaasahan mong mangyari, at kung ano ang tunay na mangyayari. Mga seksyon sa ibaba)\n\n\n2. Mga hakbang upang makalikha\n(Ilarawan kung paano namin maaaring kopyahin ang sunud-sunod na hakbang.)\n-Buksan ang Status\n-...\n-Step 3, atbp.\n\n3. Inaasahang pag-uugali\n(Ilarawan kung ano ang inaasahan mong mangyari.)\n\n\n4. Aktwal na pag-uugali\n(Ilarawan kung ano talaga ang nangyari.)\n\n\n5. Ikabit ang mga screenshot na maaaring mag-demo sa problema, kung maaari sana", + "report-bug-email-template": "1. Paglalarawan ng Isyu\n{{description}}\n\n\n2. Mga hakbang upang makalikha\n{{steps}}\n\n\n3. Ikabit ang mga screenshot na maaaring mag-demo sa problema, kung maaari sana", "request-access": "Humiling ng pag-access", "request-feature": "Humiling ng isang tampok", "request-membership": "Humiling ng pagiging miyembro", diff --git a/translations/fr.json b/translations/fr.json index 1a0c19b1b9..1150c9849e 100644 --- a/translations/fr.json +++ b/translations/fr.json @@ -1294,7 +1294,7 @@ "repeat-pin": "Répéter le nouveau code PIN", "repeat-puk": "Répéter le nouveau code PUK", "replying-to": "Répondre à {{author}}", - "report-bug-email-template": "1. Description du problème \n (Décrivez la fonctionnalité que vous souhaitez ou résumez brièvement le bogue et ce que vous avez fait, ce à quoi vous vous attendiez et ce qui se passe réellement. Sections ci-dessous) \n\n\n 2. Étapes à suivre pour reproduire \n (Décrivez comment nous pouvons répliquer le bogue étape par étape.) \n - Ouvrir Status \n -... \n - Étape 3, etc. \n\n\n 3. Comportement attendu \n (Décrivez ce que vous attendiez.) \n\n\n 4. Comportement réel \n (Décrivez ce qui s'est réellement passé.) \n\n\n 5. Joignez des captures d’écran permettant de faire la démonstration du problème. \n", + "report-bug-email-template": "1. Description du problème \n {{description}}\n\n\n 2. Étapes à suivre pour reproduire \n{{steps}}\n\n\n 3. Joignez des captures d’écran permettant de faire la démonstration du problème. \n", "request-access": "Demander l’accès", "request-feature": "Demander une fonctionnalité", "request-membership": "Demande d'inscription", diff --git a/translations/id.json b/translations/id.json index 1899091761..d16a93d29b 100644 --- a/translations/id.json +++ b/translations/id.json @@ -1103,7 +1103,7 @@ "removed": "dihapus", "repeat-pin": "Ulangi kode sandi 6 digit yang baru", "repeat-puk": "Masukkan kode sandi 6 digit yang baru", - "report-bug-email-template": "1. Deskripsi Masalah \n (Jelaskan fitur yang Anda inginkan, atau singkatkan bug dan apa yang Anda lakukan, apa yang Anda harapkan terjadi, dan apa yang sebenarnya terjadi. Bagian di bawah) \n\n\n 2. Langkah-langkah mereproduksi \n (Jelaskan bagaimana kita dapat mereplikasi bug langkah demi langkah.) \n Status -Buka \n -... \n -Langkah 3, dll. \n\n\n 3. Perilaku yang diharapkan \n (Jelaskan apa yang Anda harapkan terjadi.) \n\n\n 4. Perilaku aktual \n (Jelaskan apa yang sebenarnya terjadi.) \n\n\n 5. Tolong pasang screenshot yang bisa menunjukkan masalah \n", + "report-bug-email-template": "1. Deskripsi Masalah \n{{description}}\n\n\n 2. Langkah-langkah mereproduksi \n {{steps}}\n\n\n 3. Tolong pasang screenshot yang bisa menunjukkan masalah \n", "request-feature": "Minta fitur", "request-membership": "Minta keanggotaan", "request-pending": "Permintaan tertunda…", diff --git a/translations/it.json b/translations/it.json index 6da01be3a8..17fabf5457 100644 --- a/translations/it.json +++ b/translations/it.json @@ -1279,7 +1279,7 @@ "repeat-pin": "Ripeti il codice a 6 cifre", "repeat-puk": "Ripeti il nuovo PUK di 12 caratteri", "replying-to": "Rispondendo a {{author}}", - "report-bug-email-template": "1. Descrizione del problema \n (Descrivi la funzionalità che desideri o riassumi brevemente il bug e cosa hai fatto, cosa ti aspetti che succeda e cosa effettivamente accade. Sezioni seguenti) \n\n\n 2. Passaggi per riprodurre \n (Descrivi come possiamo replicare il bug passo dopo passo.) \n -Apri Status\n -... \n -Passo 3, ecc. \n\n\n 3. Comportamento previsto \n (Descrivi cosa ti aspetti che succeda.) \n\n\n 4. Comportamento reale \n (Descrivi cosa è realmente accaduto.) \n\n\n 5. Allegare schermate che possono dimostrare il problema, per favore \n", + "report-bug-email-template": "1. Descrizione del problema \n {{description}} \n\n\n 2. Passaggi per riprodurre \n {{steps}} \n\n\n 3. Allegare schermate che possono dimostrare il problema, per favore \n", "request-access": "Richiedi accesso", "request-feature": "Richiedi una funzionalità", "request-membership": "Richiedi adesione", diff --git a/translations/ja.json b/translations/ja.json index 8103ddaf10..84e7e4cfc6 100644 --- a/translations/ja.json +++ b/translations/ja.json @@ -1277,7 +1277,7 @@ "repeat-pin": "新しいパスコードを再入力", "repeat-puk": "新しい12桁のPUKを繰り返します", "replying-to": "{{author}}に返信する", - "report-bug-email-template": "1.問題の説明\n(あなたが望む機能について教えてください。また、バグが発生した場合は何をしてどんなバグが発生したのか、本来の挙動はどうあるべきかなどを簡単に説明してください。) \n\n\n2.再現する手順\n(バグを再現する方法を順を追って説明してください。)\n- アプリを開く\n- …… \n- ◯◯をタップする、など\n\n\n3. 本来の挙動\n(本来何が起こるべきかを説明してください。)\n\n\n4.実際の挙動\n(実際に起こったことを説明してください。)\n\n\n5.問題を実証できるスクリーンショットを添付してください。 \n", + "report-bug-email-template": "1.問題の説明\n{description}}\n\n\n2.再現する手順\n{{steps}}\n\n\n3.問題を実証できるスクリーンショットを添付してください。 \n", "request-access": "アクセスを要求する", "request-feature": "機能をリクエスト", "request-membership": "参加をリクエストする", diff --git a/translations/ko.json b/translations/ko.json index 3dc9aaba05..a8e26913ec 100644 --- a/translations/ko.json +++ b/translations/ko.json @@ -1280,7 +1280,7 @@ "repeat-pin": "6자리 패스코드 다시 입력", "repeat-puk": "새로운 12자리 PUK 반복", "replying-to": "에 회신{{author}}", - "report-bug-email-template": "1. 문제 설명 \n (원하는 기능을 설명하거나, 버그와 버그가 발생하기까지 어떤 결과를 기대하고 무엇을 했으며 실제로 발생한 내용을 간략하게 요약해주세요. 아래 섹션 참조)\n\n\n 2. 버그 확인 방법 단계별 설명 \n(버그를 확인할 방법을 단계별로 설명해주세요.)\n - 스테이터스 실행 \n - ... \n - 3단계, 등. \n\n\n 3. 예상했던 결과 \n (기대했던 결과를 설명해주세요.)\n\n\n 4. 실제 결과\n (실제로 일어난 일을 설명해주세요.) \n\n\n 5. 문제를 확인할 수 있는 스크린샷을 첨부해주세요. \n", + "report-bug-email-template": "1. 문제 설명 \n {{description}} \n\n\n 2. 버그 확인 방법 단계별 설명 \n {{steps}} \n\n\n 3. 문제를 확인할 수 있는 스크린샷을 첨부해주세요. \n", "request-access": "접근 권한 요청", "request-feature": "기능 요청", "request-membership": "멤버쉽 요청", diff --git a/translations/ms.json b/translations/ms.json index 8efed26b00..2ef9404c2b 100644 --- a/translations/ms.json +++ b/translations/ms.json @@ -1267,7 +1267,7 @@ "repeat-pin": "Ulangi kod laluan 6 digit baru", "repeat-puk": "Ulangi PUK 12 digit baru", "replying-to": "Membalas kepada {{author}}", - "report-bug-email-template": "1. Penerangan Isu\n (Jelaskan ciri yang anda mahukan, atau ringkaskan pepijat dan apa yang anda buat, apa yang anda harapkan berlaku, dan apa yang sebenarnya berlaku. Bahagian di bawah) \n\n\n 2. Langkah untuk membiak\n (Terangkan bagaimana kita dapat meniru bug langkah demi langkah.)\n -Buka Status\n -...\n -Langkah 3, dll. \n\n\n 3. Tingkah laku yang diharapkan\n (Jelaskan apa yang anda jangkakan akan berlaku.) \n\n\n 4. Tingkah laku sebenar\n (Huraikan apa yang sebenarnya berlaku.) \n\n\n 5. Lampirkan tangkapan skrin yang dapat menunjukkan masalah\n", + "report-bug-email-template": "1. Penerangan Isu\n{{description}} \n\n\n 2. Langkah untuk membiak\n {{steps}} \n\n\n 3. Lampirkan tangkapan skrin yang dapat menunjukkan masalah\n", "request-access": "Minta akses", "request-feature": "Mohon ciri", "request-membership": "Minta keahlian", diff --git a/translations/nl.json b/translations/nl.json index f9d03ec9eb..c46e969505 100644 --- a/translations/nl.json +++ b/translations/nl.json @@ -1279,7 +1279,7 @@ "repeat-pin": "Herhaal nieuw 6-cijferige passcode", "repeat-puk": "Herhaal nieuwe 12-cijferige PUK", "replying-to": "{{author}} beantwoorden", - "report-bug-email-template": "1. Probleemomschrijving \n (Beschrijf de functie die je wilt, of vat de bug kort samen en wat je deed, wat je had verwacht en wat er daadwerkelijk gebeurde. Secties hieronder) \n\n\n 2. Stappen om te reproduceren \n (Beschrijf hoe we de bug stap voor stap kunnen repliceren.) \n -Open Status \n -... \n -Stap 3, etc. \n\n\n 3. Verwacht gedrag \n (Beschrijf wat je had verwacht.) \n\n\n 4. Feitelijk gedrag \n (Beschrijf wat er echt is gebeurd.) \n\n\n 5. Voeg screenshots toe die het probleem kunnen demonstreren \n", + "report-bug-email-template": "1. Probleemomschrijving \n {{description}} \n\n\n 2. Stappen om te reproduceren \n {{steps}} \n\n\n 3. Voeg screenshots toe die het probleem kunnen demonstreren \n", "request-access": "Verzoek toegang", "request-feature": "Verzoek een nieuwe functie", "request-membership": "Verzoek deelname", diff --git a/translations/pl.json b/translations/pl.json index a1a9a9dad3..53508c8a13 100644 --- a/translations/pl.json +++ b/translations/pl.json @@ -1231,7 +1231,7 @@ "removed": "usunięci", "repeat-pin": "Powtórz nowy 6-cyfrowy kod dostępu.", "repeat-puk": "Powtórz nowy 12-cyfrowy PUK", - "report-bug-email-template": "1. Opis wydania\n(Opisz funkcję, którą chcesz, lub krótko podsumuj błąd i to, co zrobiłeś, co się spodziewałeś i co tak naprawdę się dzieje. Sekcje poniżej)\n\n2. Kroki do odtworzenia\n(Opisz, jak możemy odtworzyć błąd krok po kroku).\n-Otwórz Status\n-...\n-Krok 3 itp.\n\n3. Oczekiwane zachowanie\n(Opisz, czego się spodziewałeś).\n\n4. Rzeczywiste zachowanie\n(Opisz, co tak naprawdę się stało).\n\n5. Proszę, załącz zrzuty ekranu, które mogą przedstawić problem\n", + "report-bug-email-template": "1. Opis wydania\n {{description}}\n\n2. Kroki do odtworzenia\n {{steps}} \n\n\n3. Proszę, załącz zrzuty ekranu, które mogą przedstawić problem\n", "request-access": "Żądanie dostępu", "request-feature": "Poproś o funkcję", "request-membership": "Wnioskuj o członkostwo", diff --git a/translations/pt.json b/translations/pt.json index bf9062f424..4c66609b09 100644 --- a/translations/pt.json +++ b/translations/pt.json @@ -1146,7 +1146,7 @@ "remove-token": "Remover token", "removed": "removeu", "repeat-pin": "Repita os 6 novos dígitos da senha", - "report-bug-email-template": "1. Descrição da Edição \n (Descreva o recurso que você deseja ou resuma brevemente o bug e o que você fez, o que esperava que acontecesse e o que realmente acontece. Seções abaixo) \n\n\n 2. Passos para reproduzir \n (Descreva como podemos replicar o bug passo a passo.) \n - Abrir Status\n - ... \n - Etapa 3, etc. \n\n\n 3. Comportamento esperado \n (Descreva o que você esperava que acontecesse.) \n\n\n 4. Comportamento real \n (Descreva o que realmente aconteceu.) \n\n\n 5. Por favor, anexe capturas de tela que possam demonstrar o problema \n", + "report-bug-email-template": "1. Descrição da Edição \n{{description}} \n\n\n 2. Passos para reproduzir \n {{steps}}\n\n\n 5. Por favor, anexe capturas de tela que possam demonstrar o problema \n", "request-access": "Solicitar acesso", "request-feature": "Solicitar um recurso", "request-membership": "Solicitar para entrar", diff --git a/translations/pt_BR.json b/translations/pt_BR.json index d66fa82bec..36b311b617 100644 --- a/translations/pt_BR.json +++ b/translations/pt_BR.json @@ -1288,7 +1288,7 @@ "repeat-pin": "Repita os 6 novos dígitos do código de acesso", "repeat-puk": "Repita o novo PUK de 12 dígitos", "replying-to": "Respondendo a {{author}}", - "report-bug-email-template": "1. Descrição do problema \n (Descreva o recurso que você deseja ou resuma brevemente o bug e o que você fez, o que esperava que acontecesse e o que realmente acontece. Seções abaixo) \n\n\n 2. Passos para reproduzir \n (Descreva como podemos replicar o bug passo a passo.) \n - Abrir Status\n - ... \n - Etapa 3, etc. \n\n\n 3. Comportamento esperado \n (Descreva o que você esperava que acontecesse.) \n\n\n 4. Comportamento real \n (Descreva o que realmente aconteceu.) \n\n\n 5. Por favor, anexe capturas de tela que possam demonstrar o problema \n", + "report-bug-email-template": "1. Descrição do problema \n {{description}} \n\n\n 2. Passos para reproduzir \n {{steps}}\n\n\n 3. Por favor, anexe capturas de tela que possam demonstrar o problema \n", "request-access": "Solicitar acesso", "request-feature": "Solicitar um recurso", "request-membership": "Solicitar para entrar", diff --git a/translations/ru.json b/translations/ru.json index 74f33e5fb6..d33d5e7230 100644 --- a/translations/ru.json +++ b/translations/ru.json @@ -1228,7 +1228,7 @@ "removed": "удалено", "repeat-pin": "Повторите новый 6-значный код доступа", "repeat-puk": "Повторите новый 12-значный PUK", - "report-bug-email-template": "1. Описание проблемы \n(Опишите функцию, которую вы хотели бы иметь, или кратко опишите ошибку: ваши действия, ожидания и полученный результат, изложив информацию в соответствующих разделах ниже)\n\n\n2. Действия для повторения ошибки \n(Опишите, как мы можем повторить ошибку шаг за шагом.) \nНапример:\n- Открыть Status \n- ... \n- Шаг 3 и т. д.\n\n\n3. Ожидаемый результат.\n(Опишите, что вы ожидали получить в результате своих действий.) \n\n\n4. Фактический результат.\n(Опишите, что произошло на самом деле.) \n\n\n5. Приложите скриншоты, на которых видно проблему.\n", + "report-bug-email-template": "1. Описание проблемы \n{{description}} \n\n\n2. Действия для повторения ошибки \n {{steps}} \n\n\n5. Приложите скриншоты, на которых видно проблему.\n", "request-access": "Запрос доступа", "request-feature": "Запросить новую функцию", "request-membership": "Отправить запрос на участие", diff --git a/translations/tl.json b/translations/tl.json index d83ab719fa..de70ba7281 100644 --- a/translations/tl.json +++ b/translations/tl.json @@ -1194,7 +1194,7 @@ "remove-token": "Alisin ang token", "removed": "alisin", "repeat-pin": "Ulitin ang bagong 6-digit na passcode", - "report-bug-email-template": "1. Paglalarawan ng Isyu\n(Ilarawan ang tampok na nais mo, o maikli ang buod ng bug at kung ano ang iyong ginawa, kung ano ang inaasahan mong mangyari, at kung ano ang tunay na mangyayari. Mga seksyon sa ibaba)\n\n\n2. Mga hakbang upang makalikha\n(Ilarawan kung paano namin maaaring kopyahin ang sunud-sunod na hakbang.)\n-Buksan ang Status\n-...\n-Step 3, atbp.\n\n3. Inaasahang pag-uugali\n(Ilarawan kung ano ang inaasahan mong mangyari.)\n\n\n4. Aktwal na pag-uugali\n(Ilarawan kung ano talaga ang nangyari.)\n\n\n5. Ikabit ang mga screenshot na maaaring mag-demo sa problema, kung maaari sana", + "report-bug-email-template": "1. Paglalarawan ng Isyu\{{description}}\n\n\n2. Mga hakbang upang makalikha\n {{steps}}\n\n\n3. Ikabit ang mga screenshot na maaaring mag-demo sa problema, kung maaari sana", "request-access": "Humiling ng pag-access", "request-feature": "Humiling ng isang tampok", "request-membership": "Humiling ng pagiging miyembro", diff --git a/translations/tr.json b/translations/tr.json index 879f737499..52eb1fdcd6 100644 --- a/translations/tr.json +++ b/translations/tr.json @@ -1273,7 +1273,7 @@ "repeat-pin": "Yeni 6 haneli şifreyi tekrarlayın", "repeat-puk": "Yeni 12 haneli PUK'u tekrarlayın", "replying-to": "{{author}} yanıtlanıyor", - "report-bug-email-template": "1. Sorun Açıklaması\n( İstediğiniz özelliği açıklayın veya hatayı ve ne yaptığınızı, ne olmasını beklediğinizi ve gerçekte ne olduğunu kısaca özetleyin. Aşağıdaki bölümler )\n2. Birincil adım\n( Hatayı adım adım nasıl kopyalayabileceğimizi açıklayın. )\nStatus açın\n3. Adım vb.\n3. Beklenen davranış\n( Ne olmasını beklediğinizi açıklayın. )\n4. Gerçek davranış\n( Gerçekte ne olduğunu açıklayın. )\n5. sorunu demo olabilir ekran görüntüleri ekleyin, lütfen", + "report-bug-email-template": "1. Sorun Açıklaması\n{{description}}\n2. Birincil adım\n {{steps}} \n\n\n3. sorunu demo olabilir ekran görüntüleri ekleyin, lütfen", "request-access": "Erişim talep et", "request-feature": "Bir özellik isteyin", "request-membership": "Üyelik iste", diff --git a/translations/vi.json b/translations/vi.json index 7e791c9279..0c59601689 100644 --- a/translations/vi.json +++ b/translations/vi.json @@ -1022,7 +1022,7 @@ "remove-token": "Xóa mã thông báo", "removed": "loại bỏ", "repeat-pin": "Lặp lại mật mã 6 chữ số mới", - "report-bug-email-template": "1. Mô tả vấn đề\n (Mô tả tính năng bạn muốn hoặc tóm tắt ngắn gọn về lỗi và những gì bạn đã làm, những gì bạn mong đợi sẽ xảy ra và những gì thực sự xảy ra. Các phần bên dưới) \n\n\n 2. Các bước tái tạo\n (Mô tả cách chúng tôi có thể sao chép lỗi từng bước.)\n -Tình trạng mở\n -...\n -Bước 3, v.v. \n\n\n 3. Hành vi mong đợi\n (Mô tả những gì bạn mong đợi sẽ xảy ra.) \n\n\n 4. Hành vi thực tế\n (Mô tả những gì thực sự đã xảy ra.) \n\n\n 5. Đính kèm ảnh chụp màn hình có thể demo vấn đề, vui lòng\n", + "report-bug-email-template": "1. Mô tả vấn đề\n {{description}} \n\n\n 2. Các bước tái tạo\n {{steps}}\n\n\n 3. Đính kèm ảnh chụp màn hình có thể demo vấn đề, vui lòng\n", "request-feature": "Yêu cầu một tính năng", "request-membership": "Yêu cầu thành viên", "request-pending": "Đợi phản hồi…", diff --git a/translations/zh.json b/translations/zh.json index 6735f0e7e9..c68e051102 100644 --- a/translations/zh.json +++ b/translations/zh.json @@ -1280,7 +1280,7 @@ "repeat-pin": "重复新的6位数字密码", "repeat-puk": "重复新的12位PUK码", "replying-to": "回复{{author}}", - "report-bug-email-template": "1. 问题描述\n(描述您想要的功能,或简要说明发生的错误和您的操作,您预期的行为以及实际发生的行为。请在下方填写) \n\n\n 2. 操作步骤\n(描述我们如何一步一步复现这个错误。)\n - 打开Status\n- ...\n - 步骤 3 等。 \n\n\n 3. 预期行为\n(描述你期望发生的事情。) \n\n\n 4. 实际行为\n(描述实际发生的事情。) \n\n\n 5.请附上可以演示问题的截图\n", + "report-bug-email-template": "1. 问题描述\n {{description}} \n\n\n 2. 操作步骤\n {{steps}} \n\n\n 3.请附上可以演示问题的截图\n", "request-access": "申请加入", "request-feature": "请求功能", "request-membership": "申请进群", diff --git a/translations/zh_Hans_CN.json b/translations/zh_Hans_CN.json index 573bbac850..69f6365122 100644 --- a/translations/zh_Hans_CN.json +++ b/translations/zh_Hans_CN.json @@ -730,7 +730,7 @@ "remove-token": "删除代币", "removed": "已删除", "repeat-pin": "重复你的新的6位数字密码", - "report-bug-email-template": "1.问题描述\n (描述您想要的功能,或简要总结一下错误和您做了什么,您期望发生什么,以及实际发生了什么。下面的部分) \n\n\n 2.重现的步骤\n (描述我们如何逐步复制bug。) \n - 开放状态\n -... \n - 第3步等\n\n\n 3.预期的行为\n (描述你期望发生的事情。) \n\n\n 4.实际行为\n (描述实际发生的事情。) \n\n\n 5.附上可以演示问题的屏幕截图\n", + "report-bug-email-template": "1.问题描述\n {{description}} \n\n\n 2.重现的步骤\n {{steps}} \n\n\n 3.附上可以演示问题的屏幕截图\n", "request-transaction": "请求交易", "required-field": "必填字段", "resend-message": "重新发送", diff --git a/translations/zh_TW.json b/translations/zh_TW.json index 1b407d2fe9..3641bc8554 100644 --- a/translations/zh_TW.json +++ b/translations/zh_TW.json @@ -1283,7 +1283,7 @@ "repeat-pin": "重複新的六位數密碼", "repeat-puk": "再次確認新的12位數PUK", "replying-to": "回覆給{{author}}", - "report-bug-email-template": "1.問題說明\n (請描述您想要的功能,或簡要說明一下錯誤和您的操作,原本預期的事情以及實際發生的結果。請依序在下方填寫) \n\n\n 2.操作步驟\n (請試著回想操作順序,方便我們尋找錯誤。例如:啟動Status後,按下...然後步驟3...,依此類推)\n\n\n 3.預期行為\n (請描述您期望發生的事情。) \n\n\n 4.實際結果\n (請描述實際發生的情況。) \n\n\n 5.請附上可以顯示問題的螢幕截圖\n", + "report-bug-email-template": "1.問題說明\n {{description}} \n\n\n 2.操作步驟\n {{steps}}\n\n3.請附上可以顯示問題的螢幕截圖\n", "request-access": "申請加入", "request-feature": "要求功能", "request-membership": "申請會員", diff --git a/translations/zh_hans.json b/translations/zh_hans.json index 300eca770c..93e4ea0947 100644 --- a/translations/zh_hans.json +++ b/translations/zh_hans.json @@ -678,7 +678,7 @@ "remove-token": "删除代币", "removed": "已删除", "repeat-pin": "重复你的PIN码", - "report-bug-email-template": "1.问题描述\n (描述您想要的功能,或简要总结一下错误和您做了什么,您期望发生什么,以及实际发生了什么。下面的部分) \n\n\n 2.重现的步骤\n (描述我们如何逐步复制bug。) \n - 开放状态\n -... \n - 第3步等\n\n\n 3.预期的行为\n (描述你期望发生的事情。) \n\n\n 4.实际行为\n (描述实际发生的事情。) \n\n\n 5.附上可以演示问题的屏幕截图\n", + "report-bug-email-template": "1.问题描述\n {{description}} \n\n\n 2.重现的步骤\n {{steps}} \n\n\n 3.附上可以演示问题的屏幕截图\n", "request-transaction": "请求交易", "required-field": "必填字段", "resend-message": "重新发送",