DWORD WINAPI LoadUpdate (LPVOID param)
{
  CUpdateDlg* dlg = (CUpdateDlg*) param;

  if (dlg->autoCheck)
    UpdateVersion (NULL);

  char buf[2048];
  sprintf (buf, "Current version: %s\r\n"
                "Last version: %s\r\n",
                formatVersion (curVersion),
                formatVersion (lastVersion));
  dlg->SetDlgItemText (IDC_BUFFER, buf);

  if (curVersion < lastVersion)
  {
    CString log = buf;
    log += "\r\nLoading changelog...";
    dlg->SetDlgItemText (IDC_BUFFER, log);
    try
    {
      CInternetSession inet;
      CInternetFile* file = dynamic_cast<CInternetFile*> (inet.OpenURL (logURL));
      log = buf;
      log += "\r\nChangelog:\r\n";
      if (file != NULL)
      {
        while (file->ReadString (buf, sizeof buf - 5))
        {
          if (buf[0] == '*' && buf[1] == '*')
          {
            unsigned int ver = parseVersion (buf + 2);
            if (ver != 0 && ver <= curVersion)
              break;
          }
          log += buf;
        }
        log.Replace ("\n", "\r\n");
        dlg->SetDlgItemText (IDC_BUFFER, log);
        delete file;
      }
      else
        lastVersion = 0;
    }
    catch (CInternetException*)
    {
    }
  }

  return 0;
}
static void setVersion(ScriptValue* val, uint32 version)
{
  val->setValue(formatVersion(version));
  val->addElement("major")->setValue(version / 2600);
  val->addElement("minor")->setValue((version / 26) % 100);
  val->addElement("build")->setValue(String(char('a' + (version % 26))));
}
void KaduExtInfo::onDownloaded()
{
    union {
        uint packed;
        uchar unpacked[4];
    };
    packed = extractVersion(http->data().data());
    if (packed > extractVersion(EXTINFO_PACKED_VERSION))
    {
        QString str = tr("New %1 version ext_info is available: %2").arg(unpacked[0] ? tr("experimental") : tr("stable")).arg(formatVersion(unpacked));
        MessageBox::msg(str);
    }
    disconnect(http, SIGNAL(finished()), this, SLOT(onDownloaded()));
}