//--------------------------------------------------------------------------- void __fastcall TForm6::MyActionExecute(TObject *Sender) { VacationTabControl->ActiveTab = WeatherTabItem; TListBoxItem * MyListBoxItem; // days to vacation CountdownLabel->Text = "Days to Vacation: " + IntToStr(DaysBetween( Now(), CalendarEdit1->Date) ); if (FoundAddrLatLong) { // uses WeatherBug REST API // http://developer.weatherbug.com/docs/read/WeatherBug_Rest_XML_API // update RESTRequest Resource property // with latitude, longitude and API key RESTRequest1->Resource = "REST/Direct/GetForecast.ashx?la=" + FloatToStr(FoundLatitude) + "&lo=" + FloatToStr(FoundLongitude) + "&ht=t&ht=i&ht=d&api_key=" + APIKeyString; // get weather temperatures RESTRequest1->Execute(); // Populate listbox with temperatures for next 7 days // TODO: get day and night icons for condition codes // For now just display strings WeatherListBox->Items->Clear(); WeatherListBox->BeginUpdate(); ClientDataSet1->First(); while (!ClientDataSet1->Eof) { MyListBoxItem = new TListBoxItem(WeatherListBox); MyListBoxItem->Text = ClientDataSet1->FieldByName("dayTitle")->AsString + ": High: " + ClientDataSet1->FieldByName("high")->AsString + ", Low: " + ClientDataSet1->FieldByName("low")->AsString + " " + ClientDataSet1->FieldByName("dayDesc")->AsString; WeatherListBox->AddObject(MyListBoxItem); ClientDataSet1->Next(); } WeatherListBox->EndUpdate(); } }
//--------------------------------------------------------------------------- // Check to see if SelfImage is up-to-date - notify the user if it isn't // void CheckVersion(void) { TDateTime *dtLastCheck = NULL; char *filename = NULL; char *buffer = NULL; char *verbuff = NULL; unsigned nVersionInfoSize; int nBuildPos; static AnsiString sMyVersion = ""; static int nMyBuild = 0; AnsiString sCurrentVersion, sURL; int nCurrentBuild = 0; TIdHTTP *HTTP; DWORD nDummy; __ENTERFUNCTION__; try { try { formSelfImageNewVersionNotify = NULL; if (!SelfImageConfig->Values["Update Notify"]) { LOG(LOG_DEBUG, "Update Notify is turned off - not checking for new version."); goto END; // Ugly - C++ Builder silently ignores a __finally block if a return is process from a nested try. } // if (!SelfImageConfig->Values["Update Notify"]) if (String(SelfImageConfig->Values["Last Version Check"]).IsEmpty()) SelfImageConfig->Values["Last Version Check"] = (Now()-1).DateTimeString(); dtLastCheck = new TDateTime(String(SelfImageConfig->Values["Last Version Check"])); if (!DaysBetween(Now(), *dtLastCheck)) { LOG1(LOG_DEBUG, "Last new version check was performed %s - not checking again.", dtLastCheck->DateTimeString().c_str()); goto END; // Ugly - C++ Builder silently ignores a __finally block if a return is process from a nested try. } // if (!DaysBetween(Now(), *dtLastCheck)) SelfImageConfig->Values["Last Version Check"] = Now().DateTimeString(); // Get this executable's version - this is a pain, so let's just do it once for each time SelfImage is instantiated if (!nMyBuild) { LOG(LOG_DEBUG, "Retrieving internal version number."); filename = (char *)malloc(MAXPATH); GetModuleFileName(HInstance, filename, MAXPATH); nVersionInfoSize = GetFileVersionInfoSize(filename, &nDummy); // These following three exceptions should never make it to the user except through the logs in a debug build. // Since they are only for logging, they are allowed to have text that doesn't come from the string table. if (!nVersionInfoSize) throw ESelfImageSystemError("GetFileVersionInfoSize() failed: " + GetLastErrorMessage()); buffer = (char *)malloc(nVersionInfoSize); if (!GetFileVersionInfo(filename, NULL, nVersionInfoSize, buffer)) throw ESelfImageSystemError("GetFileVersionInfo() failed:" + GetLastErrorMessage()); if (!VerQueryValue(buffer, "\\StringFileInfo\\100904E4\\FileVersion", (void **)&verbuff, NULL)) throw ESelfImageSystemError("VerQueryValue() failed:" + GetLastErrorMessage()); sMyVersion = verbuff; nBuildPos = sMyVersion.LastDelimiter("."); nMyBuild = sMyVersion.SubString(nBuildPos + 1, sMyVersion.Length() - nBuildPos).ToInt(); sMyVersion = sMyVersion.SubString(1,nBuildPos-1) + " (Build " + String(nMyBuild) + ")"; LOG1(LOG_MESSAGE, "Internal version string retrieved from resources: \"%s\".", sMyVersion.c_str()); } // if (sMyVersion.IsEmpty()) // Get SelfImage's current version from the interweb - woo, this is cool HTTP = new TIdHTTP(NULL); sURL = SelfImageConfig->Values["Version URL"]; LOG1(LOG_DEBUG, "Attempting to retrieve version string from URL \"%s\".", sURL.c_str()); try { sCurrentVersion = HTTP->Get(SelfImageConfig->Values["Version URL"]); nBuildPos = sCurrentVersion.Pos("(Build "); nCurrentBuild = sCurrentVersion.SubString(nBuildPos + 7, sCurrentVersion.Length() - nBuildPos - 7).ToInt(); } catch (...) { sCurrentVersion = ""; } delete HTTP; #ifdef __LOGGINGENABLED__ if (!sCurrentVersion.IsEmpty()) LOG2(LOG_MESSAGE, "Version string \"%s\" retrieved from %s.", sCurrentVersion.c_str(), sURL.c_str()) else LOG2(LOG_WARNING, "Unable to retrieve version string from URL \"%s\": %s", sURL.c_str(), HTTP->ResponseText.c_str()); #endif // Compare the two... if (nCurrentBuild && nMyBuild < nCurrentBuild && sCurrentVersion != String(SelfImageConfig->Values["Notify Squelch"])) { LOG(LOG_DEBUG, "Notifying user of new version."); formSelfImageNewVersionNotify = new TformSelfImageNewVersionNotify(NULL, sMyVersion, sCurrentVersion); if (formSelfImageNewVersionNotify->ShowModal() == mrCancel) SelfImageConfig->Values["Notify Squelch"] = sCurrentVersion; } // if (different versions) } // inner try catch (Exception &e) { LOG2(LOG_ERROR, "Exception of type \"%s\" raised during new version check with message \"%s\"", String(e.ClassName()).c_str(), e.Message.c_str()); } // catch } // outer try __finally { if (dtLastCheck) delete dtLastCheck; if (filename) free(filename); if (buffer) free(buffer); if (formSelfImageNewVersionNotify) { delete formSelfImageNewVersionNotify; formSelfImageNewVersionNotify = NULL; } // if (formSelfImageNewVersionNotify) } END: __RETURNFUNCTION__; } // void CheckVersion(void)