[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[taler-taler-android] branch master updated (ec0738e -> 3a12b1c)
From: |
gnunet |
Subject: |
[taler-taler-android] branch master updated (ec0738e -> 3a12b1c) |
Date: |
Tue, 03 Jan 2023 12:35:47 +0100 |
This is an automated email from the git hooks/post-receive script.
torsten-grote pushed a change to branch master
in repository taler-android.
from ec0738e Translated using Weblate (French)
new 02ad9bd Adapt to new seconds based time format
new 3a12b1c [pos] Bump protocol version to 3.0.1
The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
.../src/main/java/net/taler/merchantlib/Orders.kt | 4 +-
.../java/net/taler/merchantlib/MerchantApiTest.kt | 9 ++-
.../net/taler/merchantpos/config/ConfigManager.kt | 3 +-
.../main/java/net/taler/merchantpos/order/Order.kt | 2 +-
.../taler/merchantpos/payment/PaymentManager.kt | 4 +-
.../src/main/java/net/taler/common/Time.kt | 68 +++++++---------------
.../java/net/taler/common/ContractTermsTest.kt | 8 +--
.../src/test/java/net/taler/common/TimeTest.kt | 10 ++--
.../wallet/deposit/TransactionDepositComposable.kt | 2 +-
.../taler/wallet/peer/TransactionPeerPullCredit.kt | 4 +-
.../taler/wallet/peer/TransactionPeerPullDebit.kt | 4 +-
.../taler/wallet/peer/TransactionPeerPushCredit.kt | 4 +-
.../taler/wallet/peer/TransactionPeerPushDebit.kt | 4 +-
.../taler/wallet/payment/PaymentResponsesTest.kt | 8 +--
14 files changed, 55 insertions(+), 79 deletions(-)
diff --git a/merchant-lib/src/main/java/net/taler/merchantlib/Orders.kt
b/merchant-lib/src/main/java/net/taler/merchantlib/Orders.kt
index 391abf5..9348ded 100644
--- a/merchant-lib/src/main/java/net/taler/merchantlib/Orders.kt
+++ b/merchant-lib/src/main/java/net/taler/merchantlib/Orders.kt
@@ -21,14 +21,14 @@ import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import kotlinx.serialization.json.JsonClassDiscriminator
import net.taler.common.ContractTerms
-import net.taler.common.Duration
+import net.taler.common.RelativeTime
@Serializable
data class PostOrderRequest(
@SerialName("order")
val contractTerms: ContractTerms,
@SerialName("refund_delay")
- val refundDelay: Duration? = null
+ val refundDelay: RelativeTime? = null
)
@Serializable
diff --git
a/merchant-lib/src/test/java/net/taler/merchantlib/MerchantApiTest.kt
b/merchant-lib/src/test/java/net/taler/merchantlib/MerchantApiTest.kt
index a89e2d3..9d6defd 100644
--- a/merchant-lib/src/test/java/net/taler/merchantlib/MerchantApiTest.kt
+++ b/merchant-lib/src/test/java/net/taler/merchantlib/MerchantApiTest.kt
@@ -19,7 +19,6 @@ package net.taler.merchantlib
import io.ktor.http.HttpStatusCode.Companion.NotFound
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.runBlocking
-import kotlinx.coroutines.test.TestCoroutineDispatcher
import kotlinx.coroutines.test.UnconfinedTestDispatcher
import net.taler.common.Amount
import net.taler.common.ContractProduct
@@ -173,7 +172,7 @@ class MerchantApiTest {
"order_id": "2020.217-0281FGXCS25P2",
"row_id": 183,
"timestamp": {
- "t_ms": 1596542338000
+ "t_s": 1596542338
},
"amount": "TESTKUDOS:1",
"summary": "Chips",
@@ -184,7 +183,7 @@ class MerchantApiTest {
"order_id": "2020.216-01G2ZPXSP6BYT",
"row_id": 154,
"timestamp": {
- "t_ms": 1596468174000
+ "t_s": 1596468174
},
"amount": "TESTKUDOS:0.8",
"summary": "Peanuts",
@@ -203,7 +202,7 @@ class MerchantApiTest {
assertEquals(true, order1.paid)
assertEquals(true, order1.refundable)
assertEquals("Chips", order1.summary)
- assertEquals(Timestamp(1596542338000), order1.timestamp)
+ assertEquals(Timestamp.fromMillis(1596542338000), order1.timestamp)
val order2 = it.orders[1]
assertEquals(Amount("TESTKUDOS", 0, 80000000), order2.amount)
@@ -211,7 +210,7 @@ class MerchantApiTest {
assertEquals(false, order2.paid)
assertEquals(false, order2.refundable)
assertEquals("Peanuts", order2.summary)
- assertEquals(Timestamp(1596468174000), order2.timestamp)
+ assertEquals(Timestamp.fromMillis(1596468174000), order2.timestamp)
}
}
diff --git
a/merchant-terminal/src/main/java/net/taler/merchantpos/config/ConfigManager.kt
b/merchant-terminal/src/main/java/net/taler/merchantpos/config/ConfigManager.kt
index 4327f4e..8986fc0 100644
---
a/merchant-terminal/src/main/java/net/taler/merchantpos/config/ConfigManager.kt
+++
b/merchant-terminal/src/main/java/net/taler/merchantpos/config/ConfigManager.kt
@@ -52,7 +52,7 @@ internal const val CONFIG_URL_DEMO =
"https://docs.taler.net/_static/sample-pos-
internal const val CONFIG_USERNAME_DEMO = ""
internal const val CONFIG_PASSWORD_DEMO = ""
-private val VERSION = Version(1, 0, 0)
+private val VERSION = Version(3, 0, 1)
private val TAG = ConfigManager::class.java.simpleName
@@ -137,6 +137,7 @@ class ConfigManager(
val versionIncompatible =
VERSION.getIncompatibleStringOrNull(context,
configResponse.version)
if (versionIncompatible != null) {
+ Log.e(TAG, "Versions incompatible $configResponse")
mConfigUpdateResult.postValue(ConfigUpdateResult.Error(versionIncompatible))
return
}
diff --git
a/merchant-terminal/src/main/java/net/taler/merchantpos/order/Order.kt
b/merchant-terminal/src/main/java/net/taler/merchantpos/order/Order.kt
index 9860dbd..2d4d32c 100644
--- a/merchant-terminal/src/main/java/net/taler/merchantpos/order/Order.kt
+++ b/merchant-terminal/src/main/java/net/taler/merchantpos/order/Order.kt
@@ -117,7 +117,7 @@ data class Order(val id: Int, val currency: String, val
availableCategories: Map
}
fun toContractTerms(): ContractTerms {
- val deadline = Timestamp(now() + HOURS.toMillis(1))
+ val deadline = Timestamp.fromMillis(now() + HOURS.toMillis(1))
return ContractTerms(
summary = summary,
summaryI18n = summaryI18n,
diff --git
a/merchant-terminal/src/main/java/net/taler/merchantpos/payment/PaymentManager.kt
b/merchant-terminal/src/main/java/net/taler/merchantpos/payment/PaymentManager.kt
index d703a31..02f66fa 100644
---
a/merchant-terminal/src/main/java/net/taler/merchantpos/payment/PaymentManager.kt
+++
b/merchant-terminal/src/main/java/net/taler/merchantpos/payment/PaymentManager.kt
@@ -26,7 +26,7 @@ import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Job
import kotlinx.coroutines.isActive
import kotlinx.coroutines.launch
-import net.taler.common.Duration
+import net.taler.common.RelativeTime
import net.taler.common.assertUiThread
import net.taler.merchantlib.CheckPaymentResponse
import net.taler.merchantlib.MerchantApi
@@ -74,7 +74,7 @@ class PaymentManager(
mPayment.value = Payment(order, order.summary,
configManager.currency!!)
val request = PostOrderRequest(
contractTerms = order.toContractTerms(),
- refundDelay = Duration(HOURS.toMillis(1))
+ refundDelay = RelativeTime.fromMillis(HOURS.toMillis(1))
)
api.postOrder(merchantConfig, request).handle(::onNetworkError) {
orderResponse ->
assertUiThread()
diff --git a/taler-kotlin-android/src/main/java/net/taler/common/Time.kt
b/taler-kotlin-android/src/main/java/net/taler/common/Time.kt
index 61bbce8..f280d5f 100644
--- a/taler-kotlin-android/src/main/java/net/taler/common/Time.kt
+++ b/taler-kotlin-android/src/main/java/net/taler/common/Time.kt
@@ -29,50 +29,31 @@ import kotlin.math.max
@Serializable
data class Timestamp(
- @SerialName("t_ms")
- @Serializable(NeverSerializer::class)
- val old_ms: Long? = null,
@SerialName("t_s")
@Serializable(NeverSerializer::class)
- private val s: Long? = null,
+ private val s: Long,
) : Comparable<Timestamp> {
- constructor(ms: Long) : this(ms, null)
-
companion object {
private const val NEVER: Long = -1
- fun now(): Timestamp = Timestamp(System.currentTimeMillis())
+ fun now(): Timestamp = fromMillis(System.currentTimeMillis())
fun never(): Timestamp = Timestamp(NEVER)
+ fun fromMillis(ms: Long) = Timestamp(ms / 1000L)
}
- val ms: Long = if (s != null) {
- s * 1000L
- } else if (old_ms !== null) {
- old_ms
- } else {
- throw Exception("timestamp didn't have t_s or t_ms")
- }
-
-
- /**
- * Returns a copy of this [Timestamp] rounded to seconds.
- */
- fun truncateSeconds(): Timestamp {
- if (ms == NEVER) return Timestamp(ms)
- return Timestamp((ms / 1000L) * 1000L)
- }
+ val ms: Long = s * 1000L
- operator fun minus(other: Timestamp): Duration = when {
- ms == NEVER -> Duration(Duration.FOREVER)
- other.ms == NEVER -> throw Error("Invalid argument for timestamp
comparision")
- ms < other.ms -> Duration(0)
- else -> Duration(ms - other.ms)
+ operator fun minus(other: Timestamp): RelativeTime = when {
+ ms == NEVER -> RelativeTime.fromMillis(RelativeTime.FOREVER)
+ other.ms == NEVER -> throw Error("Invalid argument for timestamp
comparison")
+ ms < other.ms -> RelativeTime.fromMillis(0)
+ else -> RelativeTime.fromMillis(ms - other.ms)
}
- operator fun minus(other: Duration): Timestamp = when {
+ operator fun minus(other: RelativeTime): Timestamp = when {
ms == NEVER -> this
- other.ms == Duration.FOREVER -> Timestamp(0)
- else -> Timestamp(max(0, ms - other.ms))
+ other.ms == RelativeTime.FOREVER -> fromMillis(0)
+ else -> fromMillis(max(0, ms - other.ms))
}
override fun compareTo(other: Timestamp): Int {
@@ -88,26 +69,21 @@ data class Timestamp(
}
@Serializable
-data class Duration(
- @SerialName("d_ms")
- @Serializable(ForeverSerializer::class) val old_ms: Long? = null,
- @SerialName("d_s")
+data class RelativeTime(
+ /**
+ * Duration in microseconds or "forever" to represent an infinite duration.
+ * Numeric values are capped at 2^53 - 1 inclusive.
+ */
+ @SerialName("d_us")
@Serializable(ForeverSerializer::class)
- private val s: Long? = null,
+ private val s: Long,
) {
- val ms: Long = if (s != null) {
- s * 1000L
- } else if (old_ms !== null) {
- old_ms
- } else {
- throw Exception("duration didn't have d_s or d_ms")
- }
-
- constructor(ms: Long) : this(ms, null)
+ val ms: Long = s * 1000L
companion object {
internal const val FOREVER: Long = -1
- fun forever(): Duration = Duration(FOREVER)
+ fun forever(): RelativeTime = fromMillis(FOREVER)
+ fun fromMillis(ms: Long) = RelativeTime(ms / 100L)
}
}
diff --git
a/taler-kotlin-android/src/test/java/net/taler/common/ContractTermsTest.kt
b/taler-kotlin-android/src/test/java/net/taler/common/ContractTermsTest.kt
index f7b83a9..3e1ebc4 100644
--- a/taler-kotlin-android/src/test/java/net/taler/common/ContractTermsTest.kt
+++ b/taler-kotlin-android/src/test/java/net/taler/common/ContractTermsTest.kt
@@ -37,14 +37,14 @@ class ContractTermsTest {
},
"fulfillment_url":"https://shop.test.taler.net/essay/1._The_Free_Software_Definition",
"summary":"Essay: 1. The Free Software Definition",
- "refund_deadline":{"t_ms":"never"},
- "wire_transfer_deadline":{"t_ms":1596128564000},
+ "refund_deadline":{"t_s":"never"},
+ "wire_transfer_deadline":{"t_s":1596128564},
"products":[],
"h_wire":"KV40K023N8EC1F5100TYNS23C4XN68Y1Z3PTJSWFGTMCNYD54KT4S791V2VQ91SZANN86VDAA369M4VEZ0KR6DN71EVRRZA71K681M0",
"wire_method":"x-taler-bank",
"order_id":"2020.212-01M9VKEAPF76C",
- "timestamp":{"t_ms":1596128114000},
- "pay_deadline":{"t_ms":"never"},
+ "timestamp":{"t_s":1596128114},
+ "pay_deadline":{"t_s":"never"},
"max_wire_fee":"TESTKUDOS:1",
"max_fee":"TESTKUDOS:1",
"wire_fee_amortization":3,
diff --git a/taler-kotlin-android/src/test/java/net/taler/common/TimeTest.kt
b/taler-kotlin-android/src/test/java/net/taler/common/TimeTest.kt
index beda621..4049940 100644
--- a/taler-kotlin-android/src/test/java/net/taler/common/TimeTest.kt
+++ b/taler-kotlin-android/src/test/java/net/taler/common/TimeTest.kt
@@ -18,9 +18,9 @@ package net.taler.common
import kotlinx.serialization.json.Json.Default.decodeFromString
import kotlinx.serialization.json.Json.Default.encodeToString
-import kotlin.random.Random
import org.junit.Assert.assertEquals
import org.junit.Test
+import kotlin.random.Random
// TODO test other functionality of Timestamp and Duration
class TimeTest {
@@ -29,18 +29,18 @@ class TimeTest {
fun testSerialize() {
for (i in 0 until 42) {
val t = Random.nextLong()
- assertEquals("""{"t_ms":$t}""",
encodeToString(Timestamp.serializer(), Timestamp(t)))
+ assertEquals("""{"t_s":$t}""",
encodeToString(Timestamp.serializer(), Timestamp(t)))
}
- assertEquals("""{"t_ms":"never"}""",
encodeToString(Timestamp.serializer(), Timestamp.never()))
+ assertEquals("""{"t_s":"never"}""",
encodeToString(Timestamp.serializer(), Timestamp.never()))
}
@Test
fun testDeserialize() {
for (i in 0 until 42) {
val t = Random.nextLong()
- assertEquals(Timestamp(t),
decodeFromString(Timestamp.serializer(), """{ "t_ms": $t }"""))
+ assertEquals(Timestamp(t),
decodeFromString(Timestamp.serializer(), """{ "t_s": $t }"""))
}
- assertEquals(Timestamp.never(),
decodeFromString(Timestamp.serializer(), """{ "t_ms": "never" }"""))
+ assertEquals(Timestamp.never(),
decodeFromString(Timestamp.serializer(), """{ "t_s": "never" }"""))
}
}
diff --git
a/wallet/src/main/java/net/taler/wallet/deposit/TransactionDepositComposable.kt
b/wallet/src/main/java/net/taler/wallet/deposit/TransactionDepositComposable.kt
index aa75c56..7c5c7a2 100644
---
a/wallet/src/main/java/net/taler/wallet/deposit/TransactionDepositComposable.kt
+++
b/wallet/src/main/java/net/taler/wallet/deposit/TransactionDepositComposable.kt
@@ -82,7 +82,7 @@ fun TransactionDepositComposable(t: TransactionDeposit,
onDelete: () -> Unit) {
fun TransactionDepositComposablePreview() {
val t = TransactionDeposit(
transactionId = "transactionId",
- timestamp = Timestamp(System.currentTimeMillis() - 360 * 60 * 1000),
+ timestamp = Timestamp.fromMillis(System.currentTimeMillis() - 360 * 60
* 1000),
pending = true,
depositGroupId = "fooBar",
amountRaw = Amount.fromDouble("TESTKUDOS", 42.1337),
diff --git
a/wallet/src/main/java/net/taler/wallet/peer/TransactionPeerPullCredit.kt
b/wallet/src/main/java/net/taler/wallet/peer/TransactionPeerPullCredit.kt
index 3179024..82a16be 100644
--- a/wallet/src/main/java/net/taler/wallet/peer/TransactionPeerPullCredit.kt
+++ b/wallet/src/main/java/net/taler/wallet/peer/TransactionPeerPullCredit.kt
@@ -81,13 +81,13 @@ fun ColumnScope.TransactionPeerPullCreditComposable(t:
TransactionPeerPullCredit
fun TransactionPeerPullCreditPreview() {
val t = TransactionPeerPullCredit(
transactionId = "transactionId",
- timestamp = Timestamp(System.currentTimeMillis() - 360 * 60 * 1000),
+ timestamp = Timestamp.fromMillis(System.currentTimeMillis() - 360 * 60
* 1000),
pending = true,
exchangeBaseUrl = "https://exchange.example.org/",
amountRaw = Amount.fromDouble("TESTKUDOS", 42.23),
amountEffective = Amount.fromDouble("TESTKUDOS", 42.1337),
info = PeerInfoShort(
- expiration = Timestamp(System.currentTimeMillis() + 60 * 60 *
1000),
+ expiration = Timestamp.fromMillis(System.currentTimeMillis() + 60
* 60 * 1000),
summary = "test invoice",
),
talerUri = "https://exchange.example.org/peer/pull/credit",
diff --git
a/wallet/src/main/java/net/taler/wallet/peer/TransactionPeerPullDebit.kt
b/wallet/src/main/java/net/taler/wallet/peer/TransactionPeerPullDebit.kt
index 823126b..fc14ec1 100644
--- a/wallet/src/main/java/net/taler/wallet/peer/TransactionPeerPullDebit.kt
+++ b/wallet/src/main/java/net/taler/wallet/peer/TransactionPeerPullDebit.kt
@@ -61,13 +61,13 @@ fun TransactionPeerPullDebitComposable(t:
TransactionPeerPullDebit) {
fun TransactionPeerPullDebitPreview() {
val t = TransactionPeerPullDebit(
transactionId = "transactionId",
- timestamp = Timestamp(System.currentTimeMillis() - 360 * 60 * 1000),
+ timestamp = Timestamp.fromMillis(System.currentTimeMillis() - 360 * 60
* 1000),
pending = true,
exchangeBaseUrl = "https://exchange.example.org/",
amountRaw = Amount.fromDouble("TESTKUDOS", 42.1337),
amountEffective = Amount.fromDouble("TESTKUDOS", 42.23),
info = PeerInfoShort(
- expiration = Timestamp(System.currentTimeMillis() + 60 * 60 *
1000),
+ expiration = Timestamp.fromMillis(System.currentTimeMillis() + 60
* 60 * 1000),
summary = "test invoice",
),
)
diff --git
a/wallet/src/main/java/net/taler/wallet/peer/TransactionPeerPushCredit.kt
b/wallet/src/main/java/net/taler/wallet/peer/TransactionPeerPushCredit.kt
index b986f57..ae8e7ac 100644
--- a/wallet/src/main/java/net/taler/wallet/peer/TransactionPeerPushCredit.kt
+++ b/wallet/src/main/java/net/taler/wallet/peer/TransactionPeerPushCredit.kt
@@ -61,13 +61,13 @@ fun TransactionPeerPushCreditComposable(t:
TransactionPeerPushCredit) {
fun TransactionPeerPushCreditPreview() {
val t = TransactionPeerPushCredit(
transactionId = "transactionId",
- timestamp = Timestamp(System.currentTimeMillis() - 360 * 60 * 1000),
+ timestamp = Timestamp.fromMillis(System.currentTimeMillis() - 360 * 60
* 1000),
pending = true,
exchangeBaseUrl = "https://exchange.example.org/",
amountRaw = Amount.fromDouble("TESTKUDOS", 42.23),
amountEffective = Amount.fromDouble("TESTKUDOS", 42.1337),
info = PeerInfoShort(
- expiration = Timestamp(System.currentTimeMillis() + 60 * 60 *
1000),
+ expiration = Timestamp.fromMillis(System.currentTimeMillis() + 60
* 60 * 1000),
summary = "test invoice",
),
)
diff --git
a/wallet/src/main/java/net/taler/wallet/peer/TransactionPeerPushDebit.kt
b/wallet/src/main/java/net/taler/wallet/peer/TransactionPeerPushDebit.kt
index 18528f9..2eb1c86 100644
--- a/wallet/src/main/java/net/taler/wallet/peer/TransactionPeerPushDebit.kt
+++ b/wallet/src/main/java/net/taler/wallet/peer/TransactionPeerPushDebit.kt
@@ -79,13 +79,13 @@ fun ColumnScope.TransactionPeerPushDebitComposable(t:
TransactionPeerPushDebit)
fun TransactionPeerPushDebitPreview() {
val t = TransactionPeerPushDebit(
transactionId = "transactionId",
- timestamp = Timestamp(System.currentTimeMillis() - 360 * 60 * 1000),
+ timestamp = Timestamp.fromMillis(System.currentTimeMillis() - 360 * 60
* 1000),
pending = true,
exchangeBaseUrl = "https://exchange.example.org/",
amountRaw = Amount.fromDouble("TESTKUDOS", 42.1337),
amountEffective = Amount.fromDouble("TESTKUDOS", 42.23),
info = PeerInfoShort(
- expiration = Timestamp(System.currentTimeMillis() + 60 * 60 *
1000),
+ expiration = Timestamp.fromMillis(System.currentTimeMillis() + 60
* 60 * 1000),
summary = "test invoice",
),
talerUri = "https://exchange.example.org/peer/pull/credit",
diff --git
a/wallet/src/test/java/net/taler/wallet/payment/PaymentResponsesTest.kt
b/wallet/src/test/java/net/taler/wallet/payment/PaymentResponsesTest.kt
index da2378e..f1eaa76 100644
--- a/wallet/src/test/java/net/taler/wallet/payment/PaymentResponsesTest.kt
+++ b/wallet/src/test/java/net/taler/wallet/payment/PaymentResponsesTest.kt
@@ -42,16 +42,16 @@ class PaymentResponsesTest {
"wire_method": "x-taler-bank",
"order_id": "2020.240-01MD5F476HMXW",
"timestamp": {
- "t_ms": 1598538535000
+ "t_s": 1598538535
},
"refund_deadline": {
- "t_ms": 1598538835000
+ "t_s": 1598538835
},
"pay_deadline": {
- "t_ms": 1598538835000
+ "t_s": 1598538835
},
"wire_transfer_deadline": {
- "t_ms": 1598542135000
+ "t_s": 1598542135
},
"max_wire_fee": "CHF:0.1",
"max_fee": "CHF:0.1",
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.
- [taler-taler-android] branch master updated (ec0738e -> 3a12b1c),
gnunet <=