/// <summary> /// /// </summary> private void NainstalujAktualizaci() { UpdateCheckInfo info = null; if (ApplicationDeployment.IsNetworkDeployed) { ApplicationDeployment ad = ApplicationDeployment.CurrentDeployment; try { info = ad.CheckForDetailedUpdate(); } catch (DeploymentDownloadException exc) { Vyjimky.VypisVyjimek("Nepodařilo se stáhnout novou verzi. Zkontroluj připojení k internetu", exc); return; } catch (InvalidDeploymentException exc) { Vyjimky.VypisVyjimek("Nepodařilo se stáhnout novou verzi.", exc); Nastaveni.ZapisChybovySoubor(DateTime.Now.ToString("d.M.yyyy H:mm:ss") + ": Chybně sestavený soubor (deployment). Detaily: " + exc.Message); return; } catch (InvalidOperationException exc) { Vyjimky.VypisVyjimek("Nepodařilo se aktualizovat novou verzi.", exc); Nastaveni.ZapisChybovySoubor(DateTime.Now.ToString("d.M.yyyy H:mm:ss") + ": Nezdařená aktualizace. Detaily: " + exc.Message); return; } if (info.UpdateAvailable) { MessageBox.Show("Byla nalezena aktualizace a nyní bude provedena její instalace.", "Aktualizace k dispozici", MessageBoxButtons.OK, MessageBoxIcon.Information); try { ad.Update(); MessageBox.Show("Aplikace byla aktualizována a nyní bude restartována."); Nastaveni.NastavStavAplikace((int)Nastaveni.StavyAplikace.koncici); // Vynucené okamžité ukončení aplikace Application.Restart(); this.Close(); return; } catch (DeploymentDownloadException exc) { Vyjimky.VypisVyjimek("Nepodařilo se nainstalovat aktualizaci. Zkontorluj si připojení k internetu nebo zkus později", exc); return; } } } }
/// <summary> /// Provádí čtení konfiguráku a kontroluje aktuálnost údajů /// </summary> /// <returns>True, pokud jsou data aktuální, false pokud nejsou data aktuální</returns> public static bool CtiNastaveni() { System.IO.StreamReader soubor = new System.IO.StreamReader(SlozkaNastaveni + SouborNastaveni); // Otevření konfiguráku while (!soubor.EndOfStream) // Dokud nejsme na samém konci konfiguráku { string radek = soubor.ReadLine(); // Postupně čteme jednotlivé řádky if (radek.Substring(0, 4) == "ver:") // Jestliže je na začátku řádku ver: tak je to info o poslední verzi Úkolníku (důležité pro aktualizace) { Verze = radek.Remove(0, 5); // Odtrhneme začátek a získáme tak verzi } else if (radek.Substring(0, 4) == "ser:") // Jestliže je na začátku řádku ser: tak je to info o databázovém serveru { Server = radek.Remove(0, 5); // Odtrhneme začátek a získáme tak databázový server } else if (radek.Substring(0, 4) == "uzi:") // Jestliže je na začátku řádku uzi: tak je to přihlašovací jméno do databáze { Uzivatel = radek.Remove(0, 5); // Odtrhneme začátek a získáme tak uživatelské jméno pro přihlášení do databáze } else if (radek.Substring(0, 4) == "hes:") // Jestliže je na začátku řádku hes: tak je to heslo pro přihlášení do databáze { Heslo = radek.Remove(0, 5); // Odtrhneme začátek a získáme tak heslo pro přihlášení do databáze } else if (radek.Substring(0, 4) == "dab:") // Jestliže je na začátku řádku dab: tak je to info o databázi obshaující tabulky pro Úkolník { Databaze = radek.Remove(0, 5); // Odtrhneme začátek a získáme tak databázi obsahující tabulky pro Úkolník } else if (radek.Substring(0, 4) == "spo:") // Jestliže je na začátku řádku spo: tak je to info, zda se má Úkolník automaticky spouštět při startu počítače { NastavSpousteni(radek.Remove(0, 5)); // Odtrhneme začátek a získáme tak, zda se má Úkolník automaticky spouštět při startu počítače } else if (radek.Substring(0, 4) == "upo:") // Jestliže je na začátku řádku upo: tak je to o kolik minut předem se má upozorňovat na události { try { UpozorneniDopredu = Convert.ToInt32(radek.Remove(0, 5)); // Zkusíme odtrhnutím začátku a převodu na číslo získat o kolik minut dřív se má upozorňovat na události } catch (Exception exc) // Pokud nastal problém a zadaná hodnota nelze předělat na číslo, tak se nastaví záklandí hodnota a vypíše se info o tomto problému { UpozorneniDopredu = 7; Vyjimky.VypisVyjimek("Chyba konfiguračním souboru, je zadána špatná hodnota pro upozornění, běž do nastavení a ulož tam novou.", exc); } } else if (radek.Substring(0, 4) == "pod:") // Jestliže je na začátku řádku pod: tak je to info o tom, zda se mají zobrazovat podrobnosti u vyjimek { NastavPodrobnostiVyjimek(radek.Remove(0, 5)); // Odtrhneme začátek a a předáme ho funkci na nastavení podrobností u výpisu vyjimek } } soubor.Close(); // Zavřeme konfigurák return(Verze == Obecne.DejVerzi()); }
/// <summary> /// Provádí jednotlivé akce a zobrazuje postup /// </summary> private void Start_Load(object sender, EventArgs e) { Nastaveni.NastavPodrobnostiVyjimek(true); // V tuto chvíli nejsou načteny data z konfiguráku, takže je zapnuto vypisování vyjímek if (System.IO.Directory.Exists(Nastaveni.SlozkaNastaveni) == false) // Existuje složka, kde má být uložen konfigurák? Pokud ne, tak se pokusí vytvořit { try { System.IO.Directory.CreateDirectory(Nastaveni.SlozkaNastaveni); } catch (Exception exc) { Vyjimky.VypisVyjimek("Nepodařilo se vytvořit tuto cestu: " + Nastaveni.SlozkaNastaveni, exc); Nastaveni.NastavStavAplikace((int)Nastaveni.StavyAplikace.koncici); // Vynucené okamžité ukončení aplikace this.Close(); return; } } if (System.IO.File.Exists(Nastaveni.SlozkaNastaveni + Nastaveni.SouborNastaveni) == false) // Existuje konfigurák? Pokud ne, tak ho vytvořit (v té době je ochrana proti zobrazování chyb), pokud ano, tak ho přečíst { try { Nastaveni.PraveVytvorenKonfigurak = true; Nastaveni.VytvorNastaveni(); } catch (Exception exc) { Vyjimky.VypisVyjimek("Nepodařilo se vytvořit konfigurační soubor v této složce: \n" + Nastaveni.SlozkaNastaveni, exc); Nastaveni.NastavStavAplikace((int)Nastaveni.StavyAplikace.koncici); // Vynucené okamžité ukončení aplikace this.Close(); return; } } else { if (Nastaveni.CtiNastaveni() == false) { if (DialogResult.Abort == new Aktualizace().ShowDialog()) // Zda nedošlo k chybě při aktualizaci { Obecne.ZobrazZpravu("Nezdařila se konfigurace aplikace po provedení aktualizace, aplikace nemůže dál pokračovat a bude tudíž ukončena. Opětovné spuštění by mělo problém vyřešit. Pokud ne, tak jsou na vině internetové problémy, které snad brzo budou vyřešeny.", "Problém s konfigurací", MessageBoxButtons.OK, MessageBoxIcon.Error); Nastaveni.NastavStavAplikace((int)Nastaveni.StavyAplikace.koncici); this.Close(); return; } } } progressBarStart.Value += 1; if (Nastaveni.StavAplikace != (int)Nastaveni.StavyAplikace.bezici) // Pokud nastala chyba při čtení konfiguráku { this.Close(); return; } new System.Threading.Thread(Nastaveni.OdesliChybovySoubor).Start(); // Pokusí se odeslat soubor s chybama - má vlastní vlákno, aby nezdržovalo start aplikace progressBarStart.Value += 1; Databaze db = new Databaze(); db.Dotaz("UPDATE udalosti SET Splneno=1 WHERE Splneno=0 AND Typ=" + ((int)Obecne.UdalostiTypy.udalost).ToString() + " AND Kdy <= NOW();"); // Staré události automaticky splnění (když se mělo něco udát, tak se to událo) progressBarStart.Value += 1; alarm.AlarmKontrola(); // Aktivuje alarm, aby se upozornilo na případné blížící se události progressBarStart.Value += 1; db.Dotaz("SELECT COUNT(*) as Pocet FROM udalosti WHERE Splneno=0 AND Typ=" + ((int)Obecne.UdalostiTypy.ukol).ToString() + " AND Kdy <= NOW();"); // Získá nesplněné úkoly, který už měly být splněny while (db.DalsiVysledek()) { if (db.DejVysledekInt("Pocet") > 0) // Pokud jsou nesplněné úkoly, které měly být splněny, tak se zobrazé dialog s jejich výpisem { StareUdalosti okno = new StareUdalosti((int)Obecne.UdalostiTypy.ukol); okno.ShowDialog(); } } progressBarStart.Value += 1; db.Dotaz("SELECT COUNT(*) as Pocet FROM udalosti WHERE Splneno=0 AND Typ=" + ((int)Obecne.UdalostiTypy.pisemka).ToString() + " AND Kdy <= NOW();"); // Získá nesplněné písemky, který už měly být splněny while (db.DalsiVysledek()) { if (db.DejVysledekInt("Pocet") > 0) // Pokud jsou nesplněné písemky, které měly být splněny, tak se zobrazé dialog s jejich výpisem { StareUdalosti okno = new StareUdalosti((int)Obecne.UdalostiTypy.pisemka); okno.ShowDialog(); } } progressBarStart.Value += 1; Obecne.PametNadpis = new AutoCompleteStringCollection(); // Vytvoříme novou nápovědní kolekci nadpisů db.Dotaz("SELECT DISTINCT Nadpis FROM udalosti;"); // Získáme unikátní nadpisy a ty postupně přidáváme do kolekce while (db.DalsiVysledek()) { Obecne.PametNadpis.Add(db.DejVysledekString("Nadpis")); } progressBarStart.Value += 1; db.Close(); // Zavře databázové spojení, uvolní zdroje Obecne.PripravNarozeninyPrehled(); // Připravíme narozeniny pro zobrazení (aby seděly přechody roků) alarm.Vypnout(); // Vypne upozorňování na blížíce se události progressBarStart.Value += 1; this.Close(); // Zavře okno }