Bu derste Vala uygulama ayarlarını nasıl saklayabileceğimizi öğreniyoruz
Bu derste Vala uygulama ayarlarını nasıl saklayabileceğimizi öğreneceğiz.
Allah'ın izni ile geliştirmekte olduğumuz Rize yazılımını göz önüne alalım.
Örneğin saat bilgisini saklayabiliriz.
Diyelim ki 5 dakikada değil, 3 dakikada saatin çalmasını ya da kullanıcıyı uyaracak şekilde bir yazılımı tetiklemesini istiyoruz.
İlk akla gelen yöntem bu ayarları basitçe bir metin kütüğüne yazıp okumak olabilir.
Vala ise bu iş için XML kütükleri kullanıyor. Daha sonra da derlenip ikili olarak erişilebiliyor.
Öncelikle meson kullanarak uygulama ayarlarını nasıl derleyebileceğimize bakalım.
Bunun için bir önce geliştirdiğimiz uygulamanın veri dizinindeki meson.build kütüğünü aşağıdaki gibi değiştirelim.
kaynaklar = gnome.compile_resources(
uygulamaIsmi + '-resources',
'rize.xml'
)
install_data('rize.gschema.xml', install_dir: get_option('datadir') / 'glib-2.0' / 'schemas')
meson.add_install_script('kur.py')
Burada sonradan eklediğimiz satırlardan ilki rize.gschema.xml ismindeki ayar kütüğünü bilgisayara kur diyor.
Bir sonraki satır ise ayarları derleyen kur.py isimli Python betiğini çalıştırmak istediğimizi belirtiyor.
Aynı dizinde kur.py ismi ile bu Python betiğini oluşturuyoruz.
#!/usr/bin/env python3
import os
import subprocess
ayarDizini = os.path.join(os.environ['MESON_INSTALL_PREFIX'], 'share', 'glib-2.0', 'schemas')
if not os.environ.get('DESTDIR'):
print('Ayarlar derleniyor...')
subprocess.call(['glib-compile-schemas', ayarDizini])
Gene veri dizininde rize.gschema.xml ismi ile ayar kütüğünü oluşturuyoruz.
<schemalist>
<schema id="bir.cay.koy" path="/bir/cay/koy/">
<key name="saat" type="s">
<default>"03:15"</default>
<summary>Alarm süresi</summary>
<description>
Saatin süresi
</description>
</key>
<key name="ayarla" type="b">
<default>false</default>
<summary>Saati ayarlayacak mıyız?</summary>
<description>
Saati ayarlayacak mıyız?
</description>
</key>
</schema>
</schemalist>
Ayar kütüğünde bulunan saat değişkeni dizge yani düz metin tutuyor. En sondaki s bunu ifade ediyor.
ayarla isimli değişken ise DOĞRU ya da YANLIŞ şeklinde ikili bir değer tutuyor.
Ayar kütüğünün başında bir.cay.koy gibi bir değer girilmiş.
Bunu gösterebilmek için öncelikle diğer derslerde anlatıldığı gibi meson kullanarak uygulamayı derleyiniz.
sudo ninja install
En sonunda da uygulamayı kurunuz.
Bu ayarları göstermek için dconf-editor isimli bir yazılımı kullanacağız. Eğer kurulu değilse kurunuz.

Anahtarları istersek değiştirebiliyoruz.
Uygulama ayarlarının karışmaması için böyle sıralı bir düzen geliştirilmiş.
Daha önce geliştirdiğimiz uygulamada saatin süresine rastgele bir değer veriyorduk.
Bunun yerine bu ayarlardan okuyabiliriz.
Ayrıca kullanıcıya alarm süresini değiştirme imkanı sunabiliriz.
Örneğin kullanıcı a tuşuna basarsa uygulama ayarlama kipine girsin. Kullanıcının ayarladığı saat değerini saklayalım.
Bunun için kaynak dizinindeki rize.vala kütüğünü aşağıdaki gibi değiştiriniz.
using Gtk;
using Gdk;
using GLib;
[GtkTemplate (ui = "/bir/cay/koy/rize.glade")]
class Pencere : Gtk.Window
{
public Pencere ()
{
ayarlar = new GLib.Settings("bir.cay.koy");
saat.set_label(ayarlar.get_string("saat"));
saatiAyarla = ayarlar.get_boolean("ayarla");
show_all();
}
private GLib.Settings ayarlar;
private bool saatiAyarla;
[GtkChild]
private unowned Label saat;
private int saniyeyeCevir(string sure)
{
int dakika = sure.split(":")[0].to_int();
int saniye = sure.split(":")[1].to_int();
return dakika * 60 + saniye;
}
private string metneCevir(int sureDakika)
{
int dakika = sureDakika / 60;
int saniye = sureDakika - dakika * 60;
if (dakika > 9)
if (saniye > 9)
return (dakika.to_string() + ":" + saniye.to_string());
else
return (dakika.to_string() + ":" + "0" + saniye.to_string());
else
if (saniye > 9)
return ("0" + dakika.to_string() + ":" + saniye.to_string());
else
return ("0" + dakika.to_string() + ":" + "0" + saniye.to_string());
}
private void saatiAzalt()
{
int simdikiSaat = saniyeyeCevir(saat.get_label());
stdout.printf("Saati azaltıyorum\n");
if (simdikiSaat != 0)
simdikiSaat = simdikiSaat - 1;
if (!saatiAyarla)
stdout.printf("Şimdiki saat %s\n", metneCevir(simdikiSaat));
saat.set_label(metneCevir(simdikiSaat));
if (saatiAyarla)
ayarlar.set_string("saat", metneCevir(simdikiSaat));
}
private void saatiArttir()
{
int simdikiSaat = saniyeyeCevir(saat.get_label());
stdout.printf("Saati arttırıyorum\n");
simdikiSaat = simdikiSaat + 1;
if (!saatiAyarla)
stdout.printf("Şimdiki saat %s\n", metneCevir(simdikiSaat));
saat.set_label(metneCevir(simdikiSaat));
if (saatiAyarla)
ayarlar.set_string("saat", metneCevir(simdikiSaat));
}
[GtkCallback]
private bool tusaBasildi(EventKey tus )
{
string tusIsmi = Gdk.keyval_name(tus.keyval);
stdout.printf("%s tuşuna basıldı\n", tusIsmi);
if (tusIsmi == "a" || tusIsmi == "A")
{
saatiAyarla = !saatiAyarla;
if (saatiAyarla)
stdout.printf(" - Saati ayarlama açık - \n");
else
stdout.printf(" - Saati ayarlama kapalı - \n");
}
if (tusIsmi == "minus" || tusIsmi == "KP_Subtract")
saatiAzalt();
if (tusIsmi == "plus" || tusIsmi == "KP_Add")
saatiArttir();
return true;
}
}
int main (string[] secenekler)
{
Gtk.init (ref secenekler);
var pencere = new Pencere();
pencere.destroy.connect(Gtk.main_quit);
Gtk.main();
return 0;
}
Bir nedenden dolayı ayarları silmek isterseniz öncelikle ayar dizinine geliniz.
cd /usr/local/share/glib-2.0/schemas
Ayar kütüğünü siliyoruz.
sudo rm rize.gschema.xml
En sonunda tüm ayarları tekrar derliyoruz.
sudo glib-compile-schemas /usr/local/share/glib-2.0/schemas/
Uygulamanın kaynağını buradan indirebilirsiniz.
Eğer git kullanarak indirmek indirmek isterseniz
git clone https://codeberg.org/erdem/rizeden.git --branch Ders6
komutu ile bu dersi indirebilirsiniz.
rizeden dizinin içine giriniz.
cd rizeden
Öncelikle derleme yapacağımız dizini oluşturuyoruz.
meson setup oluştur
Sonra bu oluşturduğumuz dizine girelim.
cd oluştur/
Burada uygulamayı derleyip kurmak için
sudo ninja install
komutunu verebilirsiniz.
Artık uygulamaya rize yazarak erişebilirsiniz.
Uygulama çalışırken a tuşuna basarak alarm süresini değiştirmeyi deneyiniz.
Bilgisayarı kapatıp açtığınızda ayarlar saklanıyor mu?
Uygulamayı kaldırmak için aynı dizinin içinde
sudo ninja uninstall
komutu vermek yeterlidir.
Yorumlar