void WalletSerializer::save(const std::string& password, Common::IOutputStream& destination, bool saveDetails, bool saveCache) {
  CryptoContext cryptoContext = generateCryptoContext(password);

  CryptoNote::BinaryOutputStreamSerializer s(destination);
  s.beginObject("wallet");

  saveVersion(destination);
  saveIv(destination, cryptoContext.iv);

  saveKeys(destination, cryptoContext);
  saveWallets(destination, saveCache, cryptoContext);
  saveFlags(saveDetails, saveCache, destination, cryptoContext);

  if (saveDetails) {
    saveTransactions(destination, cryptoContext);
    saveTransfers(destination, cryptoContext);
  }

  if (saveCache) {
    saveBalances(destination, saveCache, cryptoContext);
    saveTransfersSynchronizer(destination, cryptoContext);
    saveSpentOutputs(destination, cryptoContext);
    saveUnlockTransactionsJobs(destination, cryptoContext);
    saveChange(destination, cryptoContext);
  }

  s.endObject();
}
void UpdateChecker::reportNewVersionAvailable(const QString & new_version) {
	QWidget * p = qobject_cast<QWidget*>(parent());

	QMessageBox::StandardButton button = QMessageBox::information(p, tr("New version available"),
		tr("A new version of SMPlayer is available.") + "<br><br>" +
		tr("Installed version: %1").arg(Version::with_revision()) + "<br>" +
		tr("Available version: %1").arg(new_version) + "<br><br>" +
		tr("Would you like to know more about this new version?"),
		QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);

	if (button == QMessageBox::Yes) {
		QDesktopServices::openUrl(QUrl("http://smplayer.sourceforge.net/changes.php"));
	}

	saveVersion(new_version);
}