diff --git a/app/src/main/java/com/wownero/wownerujo/GenerateFragment.java b/app/src/main/java/com/wownero/wownerujo/GenerateFragment.java index 86ebe19..cd733b2 100644 --- a/app/src/main/java/com/wownero/wownerujo/GenerateFragment.java +++ b/app/src/main/java/com/wownero/wownerujo/GenerateFragment.java @@ -396,22 +396,16 @@ public class GenerateFragment extends Fragment { long height = 0; String restoreHeight = etWalletRestoreHeight.getEditText().getText().toString().trim(); + Timber.d("Restore Height string %s", restoreHeight); if (restoreHeight.isEmpty()) return -1; try { // is it a date? - SimpleDateFormat parser = new SimpleDateFormat("yyyy-MM-dd"); + SimpleDateFormat parser = new SimpleDateFormat("yyyy-MM"); parser.setLenient(false); height = RestoreHeight.getInstance().getHeight(parser.parse(restoreHeight)); } catch (ParseException ex) { + Timber.d("Failed to parse %s, %s", restoreHeight, ex); } - if (height <= 0) - try { - // is it a date without dashes? - SimpleDateFormat parser = new SimpleDateFormat("yyyyMMdd"); - parser.setLenient(false); - height = RestoreHeight.getInstance().getHeight(parser.parse(restoreHeight)); - } catch (ParseException ex) { - } if (height <= 0) try { // or is it a height? diff --git a/app/src/main/java/com/wownero/wownerujo/util/RestoreHeight.java b/app/src/main/java/com/wownero/wownerujo/util/RestoreHeight.java index 27c9f67..8e71f48 100644 --- a/app/src/main/java/com/wownero/wownerujo/util/RestoreHeight.java +++ b/app/src/main/java/com/wownero/wownerujo/util/RestoreHeight.java @@ -24,6 +24,7 @@ import java.util.HashMap; import java.util.Map; import java.util.TimeZone; import java.util.concurrent.TimeUnit; +import timber.log.Timber; public class RestoreHeight { static private RestoreHeight Singleton = null; @@ -42,79 +43,44 @@ public class RestoreHeight { private Map blockheight = new HashMap<>(); RestoreHeight() { - blockheight.put("2018-05-01", 8000L); - blockheight.put("2018-06-01", 17000L); - blockheight.put("2018-07-01", 25000L); - blockheight.put("2018-08-01", 34000L); - blockheight.put("2018-09-01", 43000L); - blockheight.put("2018-10-01", 52000L); + blockheight.put("2018-05", 8000L); + blockheight.put("2018-06", 17000L); + blockheight.put("2018-07", 25000L); + blockheight.put("2018-08", 34000L); + blockheight.put("2018-09", 43000L); + blockheight.put("2018-10", 52000L); } - public long getHeight(String date) { - SimpleDateFormat parser = new SimpleDateFormat("yyyy-MM-dd"); - parser.setTimeZone(TimeZone.getTimeZone("UTC")); - parser.setLenient(false); - try { - return getHeight(parser.parse(date)); - } catch (ParseException ex) { - throw new IllegalArgumentException(ex); - } - } + long latestHeight = 52000L; public long getHeight(final Date date) { - Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC")); - cal.set(Calendar.DST_OFFSET, 0); + Timber.d("Restore Height date %s", date); + + Calendar cal = Calendar.getInstance(); cal.setTime(date); - cal.add(Calendar.DAY_OF_MONTH, -4); // give it some leeway + Timber.d("Restore Height cal %s", cal); + if (cal.get(Calendar.YEAR) < 2018) return 0; - if ((cal.get(Calendar.YEAR) == 2018) && (cal.get(Calendar.MONTH) <= 4)) + // Month is 0 based + // https://stackoverflow.com/a/7183009 + if ((cal.get(Calendar.YEAR) == 2018) && ((cal.get(Calendar.MONTH) + 1) <= 4)) // before Apr 2018 return 0; - Calendar query = (Calendar) cal.clone(); - - SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM"); formatter.setTimeZone(TimeZone.getTimeZone("UTC")); String queryDate = formatter.format(date); + Timber.d("String query date %s", queryDate); - cal.set(Calendar.DAY_OF_MONTH, 1); - long prevTime = cal.getTimeInMillis(); - String prevDate = formatter.format(prevTime); - // lookup blockheight at first of the month - Long prevBc = blockheight.get(prevDate); - if (prevBc == null) { - // if too recent, go back in time and find latest one we have - while (prevBc == null) { - cal.add(Calendar.MONTH, -1); - if (cal.get(Calendar.YEAR) < 2018) { - throw new IllegalStateException("endless loop looking for blockheight"); - } - prevTime = cal.getTimeInMillis(); - prevDate = formatter.format(prevTime); - prevBc = blockheight.get(prevDate); - } - } - long height = prevBc; - // now we have a blockheight & a date ON or BEFORE the restore date requested - if (queryDate.equals(prevDate)) return height; - // see if we have a blockheight after this date - cal.add(Calendar.MONTH, 1); - long nextTime = cal.getTimeInMillis(); - String nextDate = formatter.format(nextTime); - Long nextBc = blockheight.get(nextDate); - if (nextBc != null) { // we have a range - interpolate the blockheight we are looking for - long diff = nextBc - prevBc; - long diffDays = TimeUnit.DAYS.convert(nextTime - prevTime, TimeUnit.MILLISECONDS); - long days = TimeUnit.DAYS.convert(query.getTimeInMillis() - prevTime, - TimeUnit.MILLISECONDS); - height = Math.round(prevBc + diff * (1.0 * days / diffDays)); + long height = 0; + if (blockheight.get(queryDate) == null) { + height = latestHeight; } else { - long days = TimeUnit.DAYS.convert(query.getTimeInMillis() - prevTime, - TimeUnit.MILLISECONDS); - height = Math.round(prevBc + 1.0 * days * (24 * 60 / 2)); + height = blockheight.get(queryDate); } + return height; } } diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index 96c2a03..a4e9cc1 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -171,7 +171,7 @@ Το Πορτοφόλι δημιουργήθηκε Η δημιουργία πορτοφολιού απέτυχε - Βάλε αριθμό ή ημερομηνία (YYYY-MM-DD δλδ χρονιά-μήνας-μέρα) + Βάλε αριθμό ή ημερομηνία (YYYY-MM δλδ χρονιά-μήνας-μέρα) Κλειδιά Νέο @@ -182,7 +182,7 @@ Κλειδί Προβολής(View Key) Κλειδί Ξοδεύματος(Spend Key) Μνημονικός Σπόρος(Mnemonic Seed) 25-Λέξεων - Ύψος ανάκτησης ή Ημερομηνία (YYYY-MM-DD δλδ χρονιά-μήνας-μέρα) + Ύψος ανάκτησης ή Ημερομηνία (YYYY-MM δλδ χρονιά-μήνας-μέρα) Δημόσια Διεύθυνση(Public Address) Κλειδί προβολής(View Key) diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index f55482c..c3ecb8a 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -153,7 +153,7 @@ Clave de Vista Clave de Gasto Semilla Mnemotécnica de 25 Palabras - Altura o Fecha (YYYY-MM-DD) de Restauración + Altura o Fecha (YYYY-MM) de Restauración Dirección Pública Clave de Vista diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index f5b8e8e..42242ce 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -200,7 +200,7 @@ Portefeuille créé Création du Portefeuille échouée - Entrer un nombre ou une date (YYYY-MM-DD) + Entrer un nombre ou une date (YYYY-MM) Clefs Nouveau @@ -211,7 +211,7 @@ Clef d\'audit Clef de dépense Phrase Mnémonique - Hauteur ou date de restauration (YYYY-MM-DD) + Hauteur ou date de restauration (YYYY-MM) Adresse publique Clef d\'audit diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 3b6d18f..fb98196 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -199,7 +199,7 @@ Кошелек создан Не удалось создать кошелек - Введите номер блока или дату (YYYY-MM-DD) + Введите номер блока или дату (YYYY-MM) Ключ Новый @@ -210,13 +210,13 @@ View Key Spend Key 25-Word Mnemonic Seed - Restore Height or Date (YYYY-MM-DD) + Restore Height or Date (YYYY-MM) Публичный адрес Ключ просмотра Ключ траты Мнемоническая фраза - Дата высоты восстановления (YYYY-MM-DD) + Дата высоты восстановления (YYYY-MM) Введите действующий ключ Введите действующий адрес diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 175a762..dce049f 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -194,7 +194,7 @@ 钱包已建立 钱包建立失败 - 输入区块高度或日期(YYYY-MM-DD) + 输入区块高度或日期(YYYY-MM) 密钥 新增 @@ -205,7 +205,7 @@ 查看密钥 花费密钥 25字记忆种子码 - 从区块高度或日期(YYYY-MM-DD)恢复 + 从区块高度或日期(YYYY-MM)恢复 公开地址 查看密钥 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 78c654b..ce4f05a 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -196,7 +196,7 @@ 錢包已建立 錢包建立失敗 - 輸入區塊高度或日期(YYYY-MM-DD) + 輸入區塊高度或日期(YYYY-MM) 金鑰 新增 @@ -207,7 +207,7 @@ 查看金鑰 花費金鑰 25字記憶種子碼 - 從區塊高度或日期(YYYY-MM-DD)回復 + 從區塊高度或日期(YYYY-MM)回復 公開地址 查看金鑰 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c61e6e8..d87dff6 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -205,7 +205,7 @@ Wallet created Wallet create failed - Enter Number or Date (YYYY-MM-DD) + Enter Number or Date (YYYY-MM) Keys New @@ -216,7 +216,7 @@ View Key Spend Key 25-Word Mnemonic Seed - Restore Height or Date (YYYY-MM-DD) + Restore Height or Date (YYYY-MM) Public Address View Key @@ -373,7 +373,7 @@ Send all confirmed funds in this account! Subaddress #%1$d Public Subaddress #%1$d - 2018-10-01 + 2018-10 Language Use System Language