#pragma once // ── Otomatik kayıt + çökme kurtarma ────────────────────────────────────────── // AMAÇ: çökme/elektrik kesintisi/kazara kapatmada saatlerce iş kaybolmasın. // Kullanıcının dosyasına ASLA dokunmaz — anlık görüntü geçici ağaca yazılır: // /oturum//anlik-.fikocad (n = kuşak, döngüsel) // /oturum//oturum.txt (kaynak yol + belge adı + zaman) // Temiz kapanışta bu dizin SİLİNİR → açılışta duran dizin = çökmüş oturum. // Açılışta ölü PID'lerin dizinleri "kurtarılabilir" olarak sunulur (canlı PID = // başka bir örnek çalışıyor, dokunulmaz). // // SICAK YOL: kare(dt) yalnız bir toplama + eşik karşılaştırmasıdır. Kirlilik // olay aboneliğiyle işaretlenir (tarama yok); anlık görüntü ana-thread'de UCUZ // çıkarılır (brepErtele) ve ağır serileştirme worker'a gider — UI donmaz. #include #include #include "fiko/core/temel.hpp" namespace fiko { struct UygulamaBaglam; // Açılışta bulunan çökmüş oturum. struct KurtarmaAdayi { std::string anlikYol; // en yeni .fikocad anlık görüntüsü std::string kaynakYol; // kullanıcının dosyası (boş = hiç kaydedilmemiş belge) std::string belgeAd; std::string oturumDizin; u64 zaman = 0; // unix saniye (anlık görüntü zamanı) u64 boyut = 0; }; class OtoKayit { public: // Oturum dizinini kur, model-değişim olaylarına abone ol, çökmüş oturumları tara. void bagla(UygulamaBaglam& b); // Kare başı (sıcak yol): süreyi ilerlet, eşiği geçince anlık görüntü al. void kare(f32 dt); // Elle/komutla anında anlık görüntü (kirli değilse de yazar). void simdiKaydet(); // Temiz kapanış: oturum dizinini sil (çökme işareti kalmaz). void temizKapanis(); // Aç/kaydet sonrası kaynak dosya yolunu bildir (kurtarma metası). Geçici ağaç // içindeki yol (kurtarma anlık görüntüsü) kaynak sayılmaz — bkz. kurtarmaBasla. void belgeYolu(const std::string& yol); // Kurtarma açılışı: belge geçici anlık görüntüden yüklenecek ama Ctrl+S hedefi // ve kurtarma metası KULLANICININ dosyası kalmalı (boş olabilir = adsız belge). void kurtarmaBasla(const std::string& kaynakYol); const std::vector& adaylar() const { return adaylar_; } void adaylariUnut(); // adayların dizinlerini sil (kullanıcı "Sil" dedi) bool kurtarmaSorAcik = false; bool kirli() const { return kirli_; } f32 sonKayittanBeriSn() const { return gecen_; } private: void anlikAl(const char* neden); UygulamaBaglam* b_ = nullptr; std::string oturumDizin_; std::string kaynakYol_; std::string kurtarmaKaynak_; bool kurtarmaBekliyor_ = false; std::vector adaylar_; f32 gecen_ = 0; u32 kusak_ = 0; // sıradaki dosya indeksi (döngüsel) bool kirli_ = false; bool yaziliyor_ = false; }; OtoKayit& otoKayit(); // Açılışta çökmüş oturum bulunduysa kurtarma penceresi (DM tarzı: sade, jest yok, // üç eylem). Kurtar → belgeyi açar; Sil → dizini kaldırır; Sonra → dokunmaz. void otoKayitKurtarmaCiz(UygulamaBaglam& b); // Ayar bağları (ayar_kayitlari.cpp kaydeder). bool& otoKayitAktif(); f64& otoKayitDakika(); int& otoKayitKusakSayisi(); } // namespace fiko