#include "guncelleme_penceresi.hpp" #include #include "fiko/cekirdek/guncelleme.hpp" #include "fiko/cekirdek/surum.hpp" #include "fiko/ui/pencere_cerceve.hpp" #include "fiko/ui/tema.hpp" #include "guncelleme_indir.hpp" #include "guncelleme_kontrol.hpp" #include "imgui.h" namespace fiko { namespace { bool g_ustte = false; int g_ertelenenYama = -1; // ertelenen sürümün yaması (aynı sürüm tekrar bildirmesin) void surumMetni(const Surum& s, char* buf, size_t n) { std::snprintf(buf, n, "%u.%u.%u", (unsigned)s.buyuk, (unsigned)s.kucuk, (unsigned)s.yama); } } // namespace void guncellemePenceresiCiz(GuncellemeServisi& svc, bool& panelAcik) { const ImVec4 YESIL = ui::tema().basari; const ImVec4 CYAN = ui::tema().vurgu; const ImVec4 SOLUK = ui::tema().metinSoluk; const ImVec4 HATA_RENK = ui::tema().hata; const ImVec4 SARI = ui::tema().uyari; using Durum = GuncellemeServisi::Durum; const Durum durum = svc.durum(); const ManifestBilgi& m = svc.mevcut(); // Otomatik bildirim: yeni sürüm var + bu sürüm ertelenmedi. const bool yeniVar = (durum == Durum::Mevcut && m.gecerli); const bool ertelenmedi = !(yeniVar && g_ertelenenYama == (int)m.surum.yama && g_ertelenenYama >= 0); // İndirme başladıysa/doğrulandıysa pencere açık kalsın (ilerleme/sonuç görünsün). const bool bildir = (yeniVar && ertelenmedi) || durum == Durum::Indiriliyor || durum == Durum::Dogrulandi; if (!panelAcik && !bildir) return; bool acik = true; { ui::Pencere pen{"🔄 Güncelleme###guncelleme", &acik, {.boyut = {360, 0}, .pinDurum = &g_ustte}}; if (!pen) { if (!acik) panelAcik = false; return; } ImGui::TextColored(SOLUK, "Yüklü sürüm: %s (%s)", SURUM_METIN, SURUM_KANAL); ImGui::Separator(); char sbuf[32]; switch (durum) { case Durum::Kontrol: ImGui::TextColored(CYAN, "⟳ Sunucu denetleniyor…"); break; case Durum::Guncel: ImGui::TextColored(YESIL, "✔ En güncel sürümü kullanıyorsunuz."); break; case Durum::Indiriliyor: surumMetni(m.surum, sbuf, sizeof(sbuf)); ImGui::TextColored(CYAN, "⬇ %s indiriliyor…", sbuf); ImGui::ProgressBar(svc.ilerleme(), {-1, 0}); break; case Durum::Dogrulandi: surumMetni(m.surum, sbuf, sizeof(sbuf)); ImGui::TextColored(YESIL, "✔ %s indirildi ve doğrulandı (sha256 + imza).", sbuf); ImGui::Separator(); if (ImGui::Button("🚀 Kur & Yeniden Başlat", {-1, 0})) svc.kurulumIste(); ImGui::TextColored(SOLUK, "Uygulama kapanır, güncellenir ve yeniden açılır."); break; case Durum::Hata: ImGui::TextColored(HATA_RENK, "⚠ Hata:"); ImGui::TextWrapped("%s", svc.sonHata().c_str()); break; case Durum::Mevcut: { surumMetni(m.surum, sbuf, sizeof(sbuf)); ImGui::TextColored(SARI, "🔔 Yeni sürüm mevcut: %s", sbuf); if (!m.cikisTarihi.empty()) ImGui::TextColored(SOLUK, "Çıkış: %s", m.cikisTarihi.c_str()); if (m.zorunlu) ImGui::TextColored(HATA_RENK, "Bu güncelleme zorunludur."); if (!m.degisiklikler.empty()) { ImGui::SeparatorText("Değişiklikler"); ImGui::TextWrapped("%s", m.degisiklikler.c_str()); } ImGui::Separator(); if (ImGui::Button("⬇ İndir & Doğrula", {-1, 0})) guncellemeIndirBaslat(svc); if (!m.zorunlu) { if (ImGui::Button("Sonra", {-1, 0})) { g_ertelenenYama = (int)m.surum.yama; // bu sürümü bu oturumda tekrar bildirme panelAcik = false; } } break; } default: // Bosta ImGui::TextColored(SOLUK, "Henüz denetlenmedi."); break; } ImGui::Separator(); ImGui::BeginDisabled(durum == Durum::Kontrol); if (ImGui::Button("🔄 Şimdi Denetle", {-1, 0})) { g_ertelenenYama = -1; // manuel denetim → erteleme sıfırla guncellemeKontrolBaslat(svc, /*sessiz*/ false); } ImGui::EndDisabled(); } // Pencere kapanışı → RAII End() if (!acik) panelAcik = false; } } // namespace fiko