Göç Aracı Nedir? ________________ Pardus Göç Aracı, bilgisayarınızda önceden yüklü olan işletim sistemlerinden Pardus'a dosya ve ayarlarınızı aktarmanızı sağlar. Böylece yeni kurulumdan sonra elle yapmak zorunda kaldığınız pek çok değişiklik, dört adımda otomatik olarak gerçekleşmiş olur. Göç aracı ile aşağıdaki verileri aktarabilirsiniz: * İnternet tarayıcı yer imleri (Firefox ve Internet Explorer) * Masaüstü duvar kağıdı * Belgelerim, resimlerim, müziklerim, videolarım ve masaüstü dizinlerinde bulunan dosyalar Göç Aracı Nasıl Çalışır? ________________________ BAŞLANGIÇ: Göç aracı programını başlatmak için migration.py çalıştırılır. migration.py ilk açıldığında bir KApplication oluşturur ve wizard.py dosyasında tanımlı olan MigrationWizard sınıfından bir nesne yaratır. MigrationWizard, KWizard'ın geliştirilmesiyle oluşmuştur. Sihirbaza eklenmeye çalışılan sayfalar, solda bir logo ve sayfa listesi olacak şekilde başka bir widget'ın içine alır. KWizard'ın diğer metodları da bu sistemde doğru çalışacak şekilde tekrar tanımlanır. MigrationWizard'ın oluşturulmasının hemen ardından, AddUsers metodu çağrılır. Bu metod, utility/partition.py modülünü kullanarak bilgisayardaki işletim sistemlerini ve kullanıcıları inceler. Bulduğu kullanıcıları, sihirbazın ilk sayfasına (userspage) ekler. Eğer herhangi bir kullanıcı bulunamadıysa, uyarı verilerek program sonlandırılır. Kullanıcı seçiminin ardından, utility/info.py dosyası kullanılarak, o kullanıcının registry kayıtları ve dosyaları incelenir. Hangi verilerin transfer edilebileceği tesbit edilir ve "sources" isimli bir sözlüğe yazılır. Sources sözlüğü aşağıdaki gibidir: { 'Partition': '/mnt/hda1', 'OS Type': 'Windows Vista', 'User Name': 'murat', 'Home Path': '/mnt/hda1/Users/murat', 'Desktop Path': '/mnt/hda1/Users/murat/Desktop', 'Personal Path': '/mnt/hda1/Users/murat/Documents', 'My Pictures Path': '/mnt/hda1/Users/murat/Pictures', 'My Music Path': '/mnt/hda1/Users/murat/Music', 'My Video Path': '/mnt/hda1/Users/murat/Videos', 'Firefox Profile Path': '/mnt/hda1/Users/murat/AppData/Roaming/Mozilla/Firefox/Profiles/8jaasd7t.default', 'Cache Path': '/mnt/hda1/Users/murat/AppData/Local/Microsoft/Windows/Temporary Internet Files', 'Favorites Path': '/mnt/hda1/Users/murat/Favorites', 'Cookies Path': '/mnt/hda1/Users/murat/AppData/Roaming/Microsoft/Windows/Cookies', 'History Path': '/mnt/hda1/Users/murat/AppData/Local/Microsoft/Windows/History', 'AppData Path': '/mnt/hda1/Users/murat/AppData/Roaming', 'Wallpaper Path': '/mnt/hda1/Windows/Web/Wallpaper/img24.jpg' 'Fonts Path': '/mnt/hda1/Windows/Fonts', } AYARLARIN VE DOSYALARIN SEÇİLMESİ: Programın sonraki iki adımında (optionspage ve filespage), bu sözlük kullanılarak grafik arabirim dinamik olarak oluşturulur. Ayarların seçildiği sayfayı oluşturan modül, gui/optionspage dosyasıdır. OptionsPage, init metodunda kendisine argüman olarak verilen sources sözlüğündeki verileri kontrol eder ve kullanılabilir olanları kullanıcıya soracak arabirimi hazırlar. İleri tuşuna basıldığında, getOptions metodu ile, Kullanıcının seçtiği değişiklikler alınıp, seçmedikleri elenerek sources sözlüğüne benzeyen bir options sözlüğü oluşturulur. Bu işlem sonunda options sözlüğü şuna benzer: { 'Partition': '/mnt/hda1', 'OS Type': 'Windows Vista' 'User Name': 'murat', 'Home Path': '/mnt/hda1/Users/murat', 'Wallpaper Path': '/mnt/hda1/Windows/Web/Wallpaper/img24.jpg', 'Firefox Profile Path': '/mnt/hda1/Users/murat/AppData/Roaming/Mozilla/Firefox/Profiles/8jaasd7t.default', } Sonraki aşamada gui/filespage.py modülü, sources sözlüğünde bulunan dizinleri inceler. Bu dizinlerden biri diğerinin altındaysa elenir. (Windows XP'de My Music dizini My Documents'ın altında bulunur. Aynı dizini kullanıcıya iki kere göstermemek için yalnızca üst seviyede bulunan My Documents dizini gösterilir.) Kullanıcı dosyaları bulunan dizinleri gui/dirview.py dosyasında tanımlı olan DirView nesnesine "DirViewRoot" olarak ekler. DirView, QListView'dan; DirViewItem, QCheckListItem'dan; DirViewRoot da DirViewItem'dan türemiştir. DirView'a eklenen DirViewRoot'lar, altındaki dosya ve dizinleri ekler. Dosya sistemindeki her dosya ve dizin için bir DirViewItem nesnesi yaratılmasını önlemek için, sadece görüntülenen nesnelerin çocukları oluşturulur. Bu işlem, addChildren metoduyla yapılır. FilesPage'de, ileri tuşuna basıldığında eğer link oluşturma seçeneği seçildiyse, options sözlüğüne aşağıdaki gibi bir ifade eklenir: 'links':[ {'path': '/mnt/hda1/Users/murat/Documents', 'name': 'My Documents', 'localname': u'Belgelerim'}, {'path': '/mnt/hda1/Users/murat/Desktop', 'name': 'Desktop', 'localname': u'Masa\xfcst\xfc'}, {'path': '/mnt/hda1/Users/murat/Music', 'name': 'My Music', 'localname': u'M\xfczi\u011fim'}, {'path': '/mnt/hda1/Users/murat/Pictures', 'name': 'My Pictures', 'localname': u'Resimlerim'}, {'path': '/mnt/hda1/Users/murat/Videos', 'name': 'My Video', 'localname': u'Videolar\u0131m'}] Kolayca anlaşılabileceği gibi dizinin türü, adı ve yolu eklenir. Linki oluşturma aşamasında bu bilgiler yeterlidir. FilesPage'de eğer kopyalama seçeneği işaretlendiyse, bu sefer her DirViewRoot için options sözlüğünün folders isimli listesine bir eleman eklenir. Her eleman yine bir sözlüktür. Dizinin adı, boyutu, yerelleştirilmiş adı ve bu dizinde seçilmiş olan dosyalar bulunur. Buna göre options sözlüğüne eklenen ifade şuna benzer: 'folders': [ {'files': ['/mnt/hda1/Users/murat/Documents'], 'localname': u'Belgelerim', 'size': 444665L, 'name': 'My Documents', 'source': '/mnt/hda1/Users/murat/Documents'}, {'files': ['/mnt/hda1/Users/murat/Desktop/video'], 'localname': u'Masa\xfcst\xfc', 'size': 40712324L, 'name': 'Desktop', 'source': '/mnt/hda1/Users/murat/Desktop'}, {'files': ['/mnt/hda1/Users/murat/Pictures/Google Talk/Bear.bmp', '/mnt/hda1/Users/murat/Pictures/Google Talk/Birthday Cake.bmp'], 'localname': u'Resimlerim', 'size': 25355L, 'name': 'My Pictures', 'source': '/mnt/hda1/Users/murat/Pictures'}] Burda dikkat edilmesi gereken nokta şudur: DirView, bir dizin içinde kısmen seçilmiş dizinler olabileceği için, files'a eklenenler yalnızca tam seçilmiş dizinler olmalıdır. Buna göre bir dizin tam olarak seçildiyse, altındaki dosya ve dizinleri listeye ayrıca eklemeye gerek yoktur. Kopyalama işlemi esnasında otomatik olarak yapılacaktır. Dosyalar sayfasında ileriye basıldığında, wizard'ın next metodu içinde dosya boyutlarını hesaplama, hedef dizinin var olup olmadığını ve yazma hakkını kontrol etme gibi işlemler yapılır. İşlemlerin uygulanması için herhangi bir sorun bulunursa bir mesaj kutusu açılarak kullanıcı bilgilendirilir. Bir problem kalmaması halinde işlemler uygulanabilir. DEĞİŞİKLİKLERİN UYGULANMASI: Son sayfada (progresspage) bir ilerleme çubuğu yardımıyla kullanıcı bilgilendirilir. Ayrıca altında bulunan maddeler, uygulamanın hangi aşamasında olduğunu açıklar. Bu aşamada grafik arabirimin donmasını engellemek için, değişiklikler ayrı bir thread'de yapılır. Bu thread apply.py dosyasında ApplyThread adıyla tanımlanmıştır. applythread, wizard'ın progresspage sayfasına ve options sözlüğüne erişir. Options sözlüğü kullanarak yaptığı değişiklikleri progresspage sayfasında gösterir. applythread, progresspage'e veri göndermek için temel olarak iki metod kullanır: addOperation ve go. addOperation ile, yapılacak bir değişiklik progresspage'e önceden bildirilir ve bunla ilgili bir madde açılır. Bir argüman olarak dosya boyutu temelli bir argüman gönderilir. steps adı verilen bu argüman, progressbar'ı yönetmede kullanılır. go metodu ise belli bir değişiklik yapıldığında bunla ilgili eklenecek log kaydını, yapılan işlemin bir hataya ya da uyarıya yol açıp açmadığını ve yapılan işlemin boyutunu (daha önce step argümanıyla verilen) progresspage'e bildirir. Böylece ilerleme kolay bir şekilde takip edilebilir ve progresspage, bir hata gerçekleştiğinde bunun hangi işlem (operation) esnasında olduğunu anlayabilir. Bir hata olması durumunda sadece hata olan işlemin yanındaki simge değiştirilir ve bir log gösterilir. Herhangi bir hata ile karşılaşılmayan durumlarda simge uygun şekilde değiştirilir. Tüm değişiklikler gerçekleştikten sonra kullanıcı bilgilendirilir ve programdan çıkılabilir. Göç Aracı'na Yeni Bir Modül Nasıl Eklenir? __________________________________________ Göç aracına yeni bir işlev kazandırmak için, önce bu işlevi yapmak için gereken sınıflar, bağımsız bir modül halinde hazırlanır. Bu modülü göç aracına entegre etmek için aşağıdaki basamaklar uygulanır: - Bu işlem için önceden veri toplamak gerekiyorsa utility/info.py dosyası içinde gerekli değişiklik yapılır ve toplanan verinin sources sözlüğüne eklenmesi sağlanır. - Yapılan işlem hakkında sorulacak soru, diğer modüllerde olduğu gibi gui/optionspage.py içine eklenir. Böylece uygun şekilde sorular sorulur ve getOptions metodunun değiştirilmesiyle kullanıcının verdiği cevapların options sözlüğüne eklenmesi sağlanır. - İşlemler esnasında önceden bir hata kontrolü gerekiyorsa bu işlem, MigrationWizard'ın next metodu içinde, filespage sayfasından sonra yapılır. Hata durumunda kullanıcı bilgilendirilir. - Değişikliklerin yapılması için apply.py dosyası içinde de değişiklik yapmak gerekir. Böylece progresspage'de işlemin detaylarının gözükmesi sağlanır. prepare metodunda işlemin adı ve step argümanı verilir. step argümanı, dosya kopyalanacaksa byte cinsinden dosya boyutunu içermeli, bu mümkün değilse buna uygun bir değer belirlenerek yazılmalıdır. İşlemin uygulanması için de run metodu içinde hazırlanan modül kullanılır ve gerekli değişikliklerin yapılması sağlanır. İşlemler esnasında ve sonrasında progresspage, go metodu ile bilgilendirilir.