#include "ui_interface.h"
#include "base58.h"
-#include <boost/lexical_cast.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
+#include <boost/lexical_cast.hpp>
#include <boost/variant/get.hpp>
#include <boost/algorithm/string.hpp>
void EnsureWalletIsUnlocked();
-std::string static EncodeDumpTime(int64 nTime) {
- return DateTimeStrFormat("%Y-%m-%dT%H:%M:%SZ", nTime);
+namespace bt = boost::posix_time;
+
+// Extended DecodeDumpTime implementation, see this page for details:
+// http://stackoverflow.com/questions/3786201/parsing-of-date-time-from-string-boost
+const std::locale formats[] = {
+ std::locale(std::locale::classic(),new bt::time_input_facet("%Y-%m-%dT%H:%M:%SZ")),
+ std::locale(std::locale::classic(),new bt::time_input_facet("%Y-%m-%d %H:%M:%S")),
+ std::locale(std::locale::classic(),new bt::time_input_facet("%Y/%m/%d %H:%M:%S")),
+ std::locale(std::locale::classic(),new bt::time_input_facet("%d.%m.%Y %H:%M:%S")),
+ std::locale(std::locale::classic(),new bt::time_input_facet("%Y-%m-%d"))
+};
+
+const size_t formats_n = sizeof(formats)/sizeof(formats[0]);
+
+std::time_t pt_to_time_t(const bt::ptime& pt)
+{
+ bt::ptime timet_start(boost::gregorian::date(1970,1,1));
+ bt::time_duration diff = pt - timet_start;
+ return diff.ticks()/bt::time_duration::rep_type::ticks_per_second;
+}
+
+int64 DecodeDumpTime(const std::string& s)
+{
+ bt::ptime pt;
+
+ for(size_t i=0; i<formats_n; ++i)
+ {
+ std::istringstream is(s);
+ is.imbue(formats[i]);
+ is >> pt;
+ if(pt != bt::ptime()) break;
+ }
+
+ return pt_to_time_t(pt);
}
-int64 static DecodeDumpTime(const std::string &str) {
- static const boost::posix_time::time_input_facet facet("%Y-%m-%dT%H:%M:%SZ");
- static const boost::posix_time::ptime epoch = boost::posix_time::from_time_t(0);
- const std::locale loc(std::locale::classic(), &facet);
- std::istringstream iss(str);
- iss.imbue(loc);
- boost::posix_time::ptime ptime(boost::date_time::not_a_date_time);
- iss >> ptime;
- if (ptime.is_not_a_date_time())
- return 0;
- return (ptime - epoch).total_seconds();
+std::string static EncodeDumpTime(int64 nTime) {
+ return DateTimeStrFormat("%Y-%m-%dT%H:%M:%SZ", nTime);
}
std::string static EncodeDumpString(const std::string &str) {
CBitcoinSecret vchSecret;
if (!vchSecret.SetString(vstr[0]))
continue;
- bool isCompressed;
+
+ bool fCompressed;
CKey key;
- CSecret secret = vchSecret.GetSecret(isCompressed);
- key.SetSecret(secret, isCompressed);
- CPubKey pubkey = key.GetPubKey();
- CKeyID keyid = pubkey.GetID();
+ CSecret secret = vchSecret.GetSecret(fCompressed);
+ key.SetSecret(secret, fCompressed);
+ CKeyID keyid = key.GetPubKey().GetID();
+
if (pwalletMain->HaveKey(keyid)) {
printf("Skipping import of %s (key already present)\n", CBitcoinAddress(keyid).ToString().c_str());
continue;
"dumpprivkey <novacoinaddress>\n"
"Reveals the private key corresponding to <novacoinaddress>.");
+ EnsureWalletIsUnlocked();
+
string strAddress = params[0].get_str();
CBitcoinAddress address;
if (!address.SetString(strAddress))