diff --git a/core/src/main/resources/i18n/displayStrings.properties b/core/src/main/resources/i18n/displayStrings.properties index ea559c6aa0..92aaa86fc6 100644 --- a/core/src/main/resources/i18n/displayStrings.properties +++ b/core/src/main/resources/i18n/displayStrings.properties @@ -909,6 +909,7 @@ portfolio.pending.role=My role portfolio.pending.tradeInformation=Trade information portfolio.pending.remainingTime=Remaining time portfolio.pending.remainingTimeDetail={0} (until {1}) +portfolio.pending.remainingTimeDetail.startsAfter=Starts after {0} confirmations portfolio.pending.tradePeriodInfo=After the first blockchain confirmation, the trade period starts. Based on the payment method used, a different maximum allowed trade period is applied. portfolio.pending.tradePeriodWarning=If the period is exceeded both traders can open a dispute. portfolio.pending.tradeNotCompleted=Trade not completed in time (until {0}) diff --git a/core/src/main/resources/i18n/displayStrings_cs.properties b/core/src/main/resources/i18n/displayStrings_cs.properties index da0f4177db..332eaf5d4e 100644 --- a/core/src/main/resources/i18n/displayStrings_cs.properties +++ b/core/src/main/resources/i18n/displayStrings_cs.properties @@ -909,6 +909,7 @@ portfolio.pending.role=Moje role portfolio.pending.tradeInformation=Obchodní informace portfolio.pending.remainingTime=Zbývající čas portfolio.pending.remainingTimeDetail={0} (do {1}) +portfolio.pending.remainingTimeDetail.startsAfter=Začne po {0} potvrzeních portfolio.pending.tradePeriodInfo=Po prvním potvrzení na blockchainu začíná obchodní období. Na základě použité metody platby se použije jiné maximální povolené obchodní období. portfolio.pending.tradePeriodWarning=Pokud je tato lhůta překročena, mohou oba obchodníci zahájit spor. portfolio.pending.tradeNotCompleted=Obchod nebyl dokončen včas (do {0}) diff --git a/core/src/main/resources/i18n/displayStrings_de.properties b/core/src/main/resources/i18n/displayStrings_de.properties index 5a4a8f1b11..742956bc2d 100644 --- a/core/src/main/resources/i18n/displayStrings_de.properties +++ b/core/src/main/resources/i18n/displayStrings_de.properties @@ -774,6 +774,7 @@ portfolio.pending.role=Meine Rolle portfolio.pending.tradeInformation=Handelsinformationen portfolio.pending.remainingTime=Verbleibende Zeit portfolio.pending.remainingTimeDetail={0} (bis {1}) +portfolio.pending.remainingTimeDetail.startsAfter=Beginnt nach {0} Bestätigungen portfolio.pending.tradePeriodInfo=Die Handelsdauer beginnt mit der ersten Blockchain-Bestätigung. Abhängig von der Zahlungart, wird eine maximale Handesldauer gesetzt. portfolio.pending.tradePeriodWarning=Wird die Dauer überschritten, können beide Händler einen Konflikt öffnen. portfolio.pending.tradeNotCompleted=Maximale Handelsdauer wurde überschritten (bis {0}) diff --git a/core/src/main/resources/i18n/displayStrings_es.properties b/core/src/main/resources/i18n/displayStrings_es.properties index f88afdd52d..6cd683477e 100644 --- a/core/src/main/resources/i18n/displayStrings_es.properties +++ b/core/src/main/resources/i18n/displayStrings_es.properties @@ -774,6 +774,7 @@ portfolio.pending.role=Mi rol portfolio.pending.tradeInformation=Información de intercambio portfolio.pending.remainingTime=Tiempo requerido portfolio.pending.remainingTimeDetail={0} (hasta {1}) +portfolio.pending.remainingTimeDetail.startsAfter=Comienza después de {0} confirmaciones portfolio.pending.tradePeriodInfo=Después de la primera confirmación en la cadena de bloques, el periodo de intercambio comienza. Según el método de pago utilizado, se aplicará un periodo de intercambio máximo permitido. portfolio.pending.tradePeriodWarning=Si el periodo se excede ambos comerciantes pueden abrir una disputa. portfolio.pending.tradeNotCompleted=Intercambio no completado a tiempo(hasta {0}) diff --git a/core/src/main/resources/i18n/displayStrings_fa.properties b/core/src/main/resources/i18n/displayStrings_fa.properties index ad28899ecd..481be3c26d 100644 --- a/core/src/main/resources/i18n/displayStrings_fa.properties +++ b/core/src/main/resources/i18n/displayStrings_fa.properties @@ -773,6 +773,7 @@ portfolio.pending.role=نقش من portfolio.pending.tradeInformation=اطلاعات معامله portfolio.pending.remainingTime=زمان باقیمانده portfolio.pending.remainingTimeDetail={0} (تا {1}) +portfolio.pending.remainingTimeDetail.startsAfter=پس از {0} تأیید شروع می‌شود portfolio.pending.tradePeriodInfo=پس از تأییدیه بلاکچین اولیه، دوره ی زمانی معامله آغاز می شود. بسته به نوع روش پرداخت، حداکثر مهلت مجاز مختلفی اعمال می گردد. portfolio.pending.tradePeriodWarning=اگر مهلت به پایان برسد، هر دو معامله گر می توانند یک مناقشه را باز کنند. portfolio.pending.tradeNotCompleted=معامله به موقع (تا {0}) تکمیل نشد diff --git a/core/src/main/resources/i18n/displayStrings_fr.properties b/core/src/main/resources/i18n/displayStrings_fr.properties index 02feadc14a..f2d4ced6df 100644 --- a/core/src/main/resources/i18n/displayStrings_fr.properties +++ b/core/src/main/resources/i18n/displayStrings_fr.properties @@ -775,6 +775,7 @@ portfolio.pending.role=Mon rôle portfolio.pending.tradeInformation=Information sur le trade portfolio.pending.remainingTime=Temps restant portfolio.pending.remainingTimeDetail={0} (jusqu'’à {1}) +portfolio.pending.remainingTimeDetail.startsAfter=Commence après {0} confirmations portfolio.pending.tradePeriodInfo=Après la première confirmation de la blockchain, la période de trade commence. En fonction de la méthode de paiement utilisée, une période maximale allouée pour la transaction sera appliquée. portfolio.pending.tradePeriodWarning=Si le délai est dépassé, l'es deux participants du trade peuvent ouvrir un litige. portfolio.pending.tradeNotCompleted=Trade inachevé dans le temps imparti (jusqu'à {0}) diff --git a/core/src/main/resources/i18n/displayStrings_it.properties b/core/src/main/resources/i18n/displayStrings_it.properties index 2a633b60dc..472614ed08 100644 --- a/core/src/main/resources/i18n/displayStrings_it.properties +++ b/core/src/main/resources/i18n/displayStrings_it.properties @@ -773,6 +773,7 @@ portfolio.pending.role=Il mio ruolo portfolio.pending.tradeInformation=Informazioni sullo scambio portfolio.pending.remainingTime=Tempo rimanente portfolio.pending.remainingTimeDetail={0} (fino a {1}) +portfolio.pending.remainingTimeDetail.startsAfter=Inizia dopo {0} conferme portfolio.pending.tradePeriodInfo=Dopo la prima conferma della blockchain, inizia il periodo di scambio. In base al metodo di pagamento utilizzato, verrà applicato un diverso periodo di scambio massimo consentito. portfolio.pending.tradePeriodWarning=Se il periodo viene superato, entrambi i trader possono aprire una disputa. portfolio.pending.tradeNotCompleted=Scambio non completato in tempo (fino a {0}) diff --git a/core/src/main/resources/i18n/displayStrings_ja.properties b/core/src/main/resources/i18n/displayStrings_ja.properties index 8bab115bb7..ecd53957aa 100644 --- a/core/src/main/resources/i18n/displayStrings_ja.properties +++ b/core/src/main/resources/i18n/displayStrings_ja.properties @@ -774,6 +774,7 @@ portfolio.pending.role=私の役割 portfolio.pending.tradeInformation=トレード情報 portfolio.pending.remainingTime=残り時間 portfolio.pending.remainingTimeDetail={0} ({1}まで) +portfolio.pending.remainingTimeDetail.startsAfter={0} 回の承認後に開始します portfolio.pending.tradePeriodInfo=最初のブロックチェーンの確認後、トレード期間が始まります。 使用した支払い方法に基づいて、異なる最大許容トレード期間が適用されます。 portfolio.pending.tradePeriodWarning=この期間を超えた場合、両方の取引者が係争を開始できます。 portfolio.pending.tradeNotCompleted=時間内に完了してないトレード({0}まで) diff --git a/core/src/main/resources/i18n/displayStrings_pt-br.properties b/core/src/main/resources/i18n/displayStrings_pt-br.properties index 7ae6e8f243..4089ddda8b 100644 --- a/core/src/main/resources/i18n/displayStrings_pt-br.properties +++ b/core/src/main/resources/i18n/displayStrings_pt-br.properties @@ -776,6 +776,7 @@ portfolio.pending.role=Minha função portfolio.pending.tradeInformation=Informação da negociação portfolio.pending.remainingTime=Tempo restante portfolio.pending.remainingTimeDetail={0} (até {1}) +portfolio.pending.remainingTimeDetail.startsAfter=Começa após {0} confirmações portfolio.pending.tradePeriodInfo=O período de negociação irá se iniciar após a primeira confirmação na blockchain. O período de negociação máximo irá variar de acordo com o método de pagamento utilizado. portfolio.pending.tradePeriodWarning=Se o período expirar, os dois negociantes poderão abrir uma disputa. portfolio.pending.tradeNotCompleted=Negociação não completada a tempo (até {0}) diff --git a/core/src/main/resources/i18n/displayStrings_pt.properties b/core/src/main/resources/i18n/displayStrings_pt.properties index 113d8a7867..387a6a9d5e 100644 --- a/core/src/main/resources/i18n/displayStrings_pt.properties +++ b/core/src/main/resources/i18n/displayStrings_pt.properties @@ -773,6 +773,7 @@ portfolio.pending.role=O meu cargo portfolio.pending.tradeInformation=Informação do negócio portfolio.pending.remainingTime=Tempo restante portfolio.pending.remainingTimeDetail={0} (até {1}) +portfolio.pending.remainingTimeDetail.startsAfter=Começa após {0} confirmações portfolio.pending.tradePeriodInfo=Após a primeira confirmação da blockchain, o período de negócio começa. Com base no método de pagamento usado, um período de negócio máximo permitido é aplicado. portfolio.pending.tradePeriodWarning=Se o período é excedido ambos os negociadores podem abrir disputa. portfolio.pending.tradeNotCompleted=Negócio não completo à tempo (até {0}) diff --git a/core/src/main/resources/i18n/displayStrings_ru.properties b/core/src/main/resources/i18n/displayStrings_ru.properties index 667fad12c7..da6fc2d00b 100644 --- a/core/src/main/resources/i18n/displayStrings_ru.properties +++ b/core/src/main/resources/i18n/displayStrings_ru.properties @@ -773,6 +773,7 @@ portfolio.pending.role=Моя роль portfolio.pending.tradeInformation=Информация о сделке portfolio.pending.remainingTime=Оставшееся время portfolio.pending.remainingTimeDetail={0} (до {1}) +portfolio.pending.remainingTimeDetail.startsAfter=Начнётся после {0} подтверждений portfolio.pending.tradePeriodInfo=Начало отсчета срока сделки начинается после первого подтверждения в блокчейне. Срок сделки зависит от выбранного метода платежа. portfolio.pending.tradePeriodWarning=При превышении срока оба трейдера могут начать спор. portfolio.pending.tradeNotCompleted=Сделка не завершена вовремя (до {0}) diff --git a/core/src/main/resources/i18n/displayStrings_th.properties b/core/src/main/resources/i18n/displayStrings_th.properties index aaa8f20a91..af41c56792 100644 --- a/core/src/main/resources/i18n/displayStrings_th.properties +++ b/core/src/main/resources/i18n/displayStrings_th.properties @@ -773,6 +773,7 @@ portfolio.pending.role=บทบาทของฉัน portfolio.pending.tradeInformation=ข้อมูลทางการซื้อขาย portfolio.pending.remainingTime=เวลาที่เหลือ portfolio.pending.remainingTimeDetail={0} (จนถึง {1}) +portfolio.pending.remainingTimeDetail.startsAfter=เริ่มหลังจากยืนยัน {0} ครั้ง portfolio.pending.tradePeriodInfo=หลังจากการยืนยันบล็อกเชนครั้งแรก ระยะเวลาการซื้อขายจะเริ่มต้นขึ้น โดยจะขึ้นอยู่กับวิธีการชำระเงินที่ใช้ ระยะเวลาการซื้อขายที่ได้รับอนุญาตสูงสุดนั้นแตกต่างกัน portfolio.pending.tradePeriodWarning=หากเกินระยะเวลานักซื้อขายทั้งสองฝ่ายสามารถเปิดข้อพิพาทได้ portfolio.pending.tradeNotCompleted=การซื้อขายไม่เสร็จสิ้นภายในเวลา (จนถึง {0}) diff --git a/core/src/main/resources/i18n/displayStrings_tr.properties b/core/src/main/resources/i18n/displayStrings_tr.properties index cf031cbbbd..9f078152de 100644 --- a/core/src/main/resources/i18n/displayStrings_tr.properties +++ b/core/src/main/resources/i18n/displayStrings_tr.properties @@ -872,6 +872,7 @@ portfolio.pending.role=Rolüm portfolio.pending.tradeInformation=Ticaret bilgileri portfolio.pending.remainingTime=Kalan süre portfolio.pending.remainingTimeDetail={0} (kadar {1}) +portfolio.pending.remainingTimeDetail.startsAfter={0} onaydan sonra başlar portfolio.pending.tradePeriodInfo=İlk blok zinciri onayından sonra ticaret süresi başlar. Kullanılan ödeme yöntemine bağlı olarak, farklı bir maksimum ticaret süresi uygulanır. portfolio.pending.tradePeriodWarning=Süre aşılırsa her iki tüccar da bir anlaşmazlık açabilir. portfolio.pending.tradeNotCompleted=Ticaret zamanında tamamlanmadı (kadar {0}) diff --git a/core/src/main/resources/i18n/displayStrings_vi.properties b/core/src/main/resources/i18n/displayStrings_vi.properties index a296c7de1e..7c52476311 100644 --- a/core/src/main/resources/i18n/displayStrings_vi.properties +++ b/core/src/main/resources/i18n/displayStrings_vi.properties @@ -773,6 +773,7 @@ portfolio.pending.role=Vai trò của tôi portfolio.pending.tradeInformation=Thông tin giao dịch portfolio.pending.remainingTime=Thời gian còn lại portfolio.pending.remainingTimeDetail={0} (cho đến khi {1}) +portfolio.pending.remainingTimeDetail.startsAfter=Bắt đầu sau {0} lần xác nhận portfolio.pending.tradePeriodInfo=Sau xác nhận blockchain đầu tiên, thời gian giao dịch bắt đầu. Phương thức thanh toán áp dụng khác nhau sẽ có thời gian giao dịch tối đa cho phép khác nhau. portfolio.pending.tradePeriodWarning=Nếu quá thời gian giao dịch, cả hai Thương gia đều có thể mở khiếu nại. portfolio.pending.tradeNotCompleted=giao dịch không được hoàn thành đúng thời gian (cho đến khi {0}) diff --git a/core/src/main/resources/i18n/displayStrings_zh-hans.properties b/core/src/main/resources/i18n/displayStrings_zh-hans.properties index e1a5edbd6a..656f7d744c 100644 --- a/core/src/main/resources/i18n/displayStrings_zh-hans.properties +++ b/core/src/main/resources/i18n/displayStrings_zh-hans.properties @@ -774,6 +774,7 @@ portfolio.pending.role=我的角色 portfolio.pending.tradeInformation=交易信息 portfolio.pending.remainingTime=剩余时间 portfolio.pending.remainingTimeDetail={0}(直到 {1} ) +portfolio.pending.remainingTimeDetail.startsAfter=在获得 {0} 次确认后开始 portfolio.pending.tradePeriodInfo=在第一次区块链确认之后,交易周期开始。根据所使用的付款方法,采用不同的最大允许交易周期。 portfolio.pending.tradePeriodWarning=如果超过了这个周期,双方均可以提出纠纷。 portfolio.pending.tradeNotCompleted=交易不会及时完成(直到 {0} ) diff --git a/core/src/main/resources/i18n/displayStrings_zh-hant.properties b/core/src/main/resources/i18n/displayStrings_zh-hant.properties index 7971e05fcd..68a0846afb 100644 --- a/core/src/main/resources/i18n/displayStrings_zh-hant.properties +++ b/core/src/main/resources/i18n/displayStrings_zh-hant.properties @@ -774,6 +774,7 @@ portfolio.pending.role=我的角色 portfolio.pending.tradeInformation=交易信息 portfolio.pending.remainingTime=剩餘時間 portfolio.pending.remainingTimeDetail={0}(直到 {1} ) +portfolio.pending.remainingTimeDetail.startsAfter=在確認數達到 {0} 之後開始 portfolio.pending.tradePeriodInfo=在第一次區塊鏈確認之後,交易週期開始。根據所使用的付款方法,採用不同的最大允許交易週期。 portfolio.pending.tradePeriodWarning=如果超過了這個週期,雙方均可以提出糾紛。 portfolio.pending.tradeNotCompleted=交易不會及時完成(直到 {0} ) diff --git a/desktop/src/main/java/haveno/desktop/main/portfolio/pendingtrades/steps/TradeStepView.java b/desktop/src/main/java/haveno/desktop/main/portfolio/pendingtrades/steps/TradeStepView.java index 426890717a..f0de3caed5 100644 --- a/desktop/src/main/java/haveno/desktop/main/portfolio/pendingtrades/steps/TradeStepView.java +++ b/desktop/src/main/java/haveno/desktop/main/portfolio/pendingtrades/steps/TradeStepView.java @@ -157,10 +157,6 @@ public abstract class TradeStepView extends AnchorPane { updateTimeLeft(); } }; - -// newBestBlockListener = block -> { -// checkIfLockTimeIsOver(); -// }; } public void activate() { @@ -286,40 +282,41 @@ public abstract class TradeStepView extends AnchorPane { } public void deactivate() { - if (selfTxIdSubscription != null) - selfTxIdSubscription.unsubscribe(); - if (peerTxIdSubscription != null) - peerTxIdSubscription.unsubscribe(); + if (selfTxIdSubscription != null) + selfTxIdSubscription.unsubscribe(); + if (peerTxIdSubscription != null) + peerTxIdSubscription.unsubscribe(); - if (selfTxIdTextField != null) - selfTxIdTextField.cleanup(); - if (peerTxIdTextField != null) - peerTxIdTextField.cleanup(); + if (selfTxIdTextField != null) + selfTxIdTextField.cleanup(); + if (peerTxIdTextField != null) + peerTxIdTextField.cleanup(); - if (errorMessageListener != null) - trade.errorMessageProperty().removeListener(errorMessageListener); + if (errorMessageListener != null) + trade.errorMessageProperty().removeListener(errorMessageListener); - if (disputeStateSubscription != null) - disputeStateSubscription.unsubscribe(); + if (disputeStateSubscription != null) + disputeStateSubscription.unsubscribe(); - if (mediationResultStateSubscription != null) - mediationResultStateSubscription.unsubscribe(); + if (mediationResultStateSubscription != null) + mediationResultStateSubscription.unsubscribe(); - if (tradePeriodStateSubscription != null) - tradePeriodStateSubscription.unsubscribe(); - if (tradeStateSubscription != null) - tradeStateSubscription.unsubscribe(); + if (tradePeriodStateSubscription != null) + tradePeriodStateSubscription.unsubscribe(); - if (clockListener != null) - model.clockWatcher.removeListener(clockListener); + if (tradeStateSubscription != null) + tradeStateSubscription.unsubscribe(); - if (tradeStepInfo != null) - tradeStepInfo.setOnAction(null); + if (clockListener != null) + model.clockWatcher.removeListener(clockListener); - if (acceptMediationResultPopup != null) { - acceptMediationResultPopup.hide(); - acceptMediationResultPopup = null; - } + if (tradeStepInfo != null) + tradeStepInfo.setOnAction(null); + + if (acceptMediationResultPopup != null) { + acceptMediationResultPopup.hide(); + acceptMediationResultPopup = null; + } } /////////////////////////////////////////////////////////////////////////////////////////// @@ -431,8 +428,10 @@ public abstract class TradeStepView extends AnchorPane { String remainingTime = model.getRemainingTradeDurationAsWords(); timeLeftProgressBar.setProgress(model.getRemainingTradeDurationAsPercentage()); if (!remainingTime.isEmpty()) { - timeLeftTextField.setText(Res.get("portfolio.pending.remainingTimeDetail", - remainingTime, model.getDateForOpenDispute())); + boolean isDepositsFinalized = trade.isDepositsFinalized(); + timeLeftTextField.setText(isDepositsFinalized ? + Res.get("portfolio.pending.remainingTimeDetail", remainingTime, model.getDateForOpenDispute()) : + Res.get("portfolio.pending.remainingTimeDetail.startsAfter", Trade.NUM_BLOCKS_DEPOSITS_FINALIZED)); if (model.showWarning() || model.showDispute()) { timeLeftTextField.getStyleClass().add("error-text"); timeLeftProgressBar.getStyleClass().add("error"); @@ -799,6 +798,7 @@ public abstract class TradeStepView extends AnchorPane { } private void updateTradeState(Trade.State tradeState) { + updateTimeLeft(); if (!trade.getDisputeState().isOpen() && trade.isDepositTxMissing()) { tradeStepInfo.setState(TradeStepInfo.State.DEPOSIT_MISSING); }