Bug reporting and logs sharing improvements

This commit is contained in:
Roman Volosovskyi 2021-11-01 12:00:17 +02:00
parent 2c8276f353
commit 7359c52af1
No known key found for this signature in database
GPG Key ID: 0238A4B5ECEE70DE
35 changed files with 342 additions and 210 deletions

View File

@ -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]);

View File

@ -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]

View File

@ -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)]]]))

View File

@ -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)

View File

@ -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)

View File

@ -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])})))))))

View File

@ -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))))

View File

@ -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]

View File

@ -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": "طلب عضوية",

View File

@ -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": "মুলতুবি অনুরোধ…",

View File

@ -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",

View File

@ -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": "Το αίτημά σας είναι σε αναμονή…",

View File

@ -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",

View File

@ -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",

View File

@ -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",

View File

@ -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",

View File

@ -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",

View File

@ -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 laccès",
"request-feature": "Demander une fonctionnalité",
"request-membership": "Demande d'inscription",

View File

@ -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…",

View File

@ -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",

View File

@ -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": "参加をリクエストする",

View File

@ -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": "멤버쉽 요청",

View File

@ -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",

View File

@ -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",

View File

@ -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",

View File

@ -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",

View File

@ -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",

View File

@ -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": "Отправить запрос на участие",

View File

@ -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",

View File

@ -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",

View File

@ -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…",

View File

@ -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": "申请进群",

View File

@ -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": "重新发送",

View File

@ -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": "申請會員",

View File

@ -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": "重新发送",