mps-gui.py 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. #!/usr/bin/python3
  2. from PyQt5.QtWidgets import (QMessageBox, QMainWindow, QApplication, QWidget, QVBoxLayout, QStackedWidget)
  3. from PyQt5.QtGui import QIcon
  4. from siniflar import desitlepencere, paketgenelpencere, paketbilgipencere, kursilpencere, guncelle, surec
  5. import os, sys
  6. class MerkezPencere(QMainWindow):
  7. def __init__(self, ebeveyn=None):
  8. super(MerkezPencere, self).__init__(ebeveyn)
  9. self.setMinimumSize(800,600)
  10. self.icon_adresi = "/usr/share/icons/Numix-Circle-Light/scalable/apps/"
  11. self.talimatname_dizini = "/root/talimatname/genel/"
  12. merkez_widget = QWidget()
  13. self.setCentralWidget(merkez_widget)
  14. merkez_kutu = QVBoxLayout()
  15. merkez_kutu.setContentsMargins(0,0,0,0)
  16. merkez_widget.setLayout(merkez_kutu)
  17. self.asamalar = QStackedWidget()
  18. merkez_kutu.addWidget(self.asamalar)
  19. self.desitlepencere = desitlepencere.DEsitlePencere()
  20. self.asamalar.addWidget(self.desitlepencere)
  21. self.paketgenelpencere = paketgenelpencere.PaketGenelPencere(self)
  22. self.asamalar.addWidget(self.paketgenelpencere)
  23. self.paketbilgipencere = paketbilgipencere.PaketBilgiPencere(self)
  24. self.asamalar.addWidget(self.paketbilgipencere)
  25. self.kursilpencere = kursilpencere.KurSilPencere(self)
  26. self.asamalar.addWidget(self.kursilpencere)
  27. self.guncelle = guncelle.GuncellePencere(self)
  28. self.asamalar.addWidget(self.guncelle)
  29. self.setWindowIcon(QIcon("simgeler/paket.svg"))
  30. self.asamalar.setCurrentIndex(0)
  31. self.depo_esitle()
  32. def closeEvent(self, event):
  33. os.system("killall mps")
  34. def icon_getir(self,icon_adi):
  35. if os.path.exists(self.icon_adresi+icon_adi+".svg"):
  36. icon = QIcon(self.icon_adresi+icon_adi+".svg")
  37. elif os.path.exists(self.icon_adresi+"package-manager-icon.svg"):
  38. icon = QIcon(self.icon_adresi+"package-manager-icon.svg")
  39. else:
  40. icon = QIcon.fromTheme(icon_adi, QIcon.fromTheme("package-manager-icon"))
  41. return icon
  42. def paketleri_guncelle(self):
  43. self.asamalar.setCurrentIndex(4)
  44. self.guncelle.islem = "guncelle"
  45. self.guncelle.guncelle_surec_baslat()
  46. def paket_kur_sil(self,paket_adi,islem):
  47. self.asamalar.setCurrentIndex(3)
  48. self.kursilpencere.sorgu_surec_baslat(paket_adi,islem)
  49. def paket_secildi(self,paket_adi):
  50. self.paketbilgipencere.surec_baslat(paket_adi)
  51. self.asamalar.setCurrentIndex(2)
  52. def tum_paketler_kontrol(self):
  53. self.tum_paketler = []
  54. self.komut = "mps paketler"
  55. self.islem = "tum_paketler_kontrol"
  56. self.surec_baslat()
  57. def kurulu_paketler_tespit(self):
  58. self.kurulu_paketler = []
  59. self.komut = "mps liste --normal"
  60. self.islem = "kurulu_paketler_tespit"
  61. self.surec_baslat()
  62. def depo_esitle(self):
  63. self.komut = "mps -GG && mps guncelle --normal"
  64. self.islem = "depo_esitle"
  65. self.surec_baslat()
  66. def son_kontroller(self):
  67. self.paketler_sozluk = {}
  68. self.gruplar_sozluk = {}
  69. for i in os.listdir(self.talimatname_dizini):
  70. dizin = self.talimatname_dizini + i
  71. for a in os.listdir(dizin):
  72. self.bilgi_getir(dizin,a)
  73. for i in os.listdir(self.talimatname_dizini):
  74. dizin = self.talimatname_dizini
  75. self.bilgi_getir(dizin,i)
  76. def bilgi_getir(self,dizin,isim):
  77. if os.path.exists(dizin+"/"+isim+"/"+"talimat"):
  78. f = open(dizin+"/"+isim+"/"+"talimat","r")
  79. okunan = f.readlines()
  80. f.close()
  81. varmi = self.paketler_sozluk.get(isim,"yok")
  82. if varmi == "yok":
  83. self.paketler_sozluk[isim] = {"Tanim":"","URL":"","Paketci":"","Gerekler":"","Grup":"","Isim":"","Surum":"","Devir":"","Kaynak":""}
  84. for satir in okunan:
  85. if "# Tanım: " in satir:
  86. self.paketler_sozluk[isim]["Tanim"] = satir.split("# Tanım: ")[1][:-1]
  87. elif "# URL: " in satir:
  88. self.paketler_sozluk[isim]["URL"] = satir.split("# URL: ")[1][:-1]
  89. elif "# Paketçi: " in satir:
  90. self.paketler_sozluk[isim]["Paketci"] = satir.split("# Paketçi: ")[1][:-1]
  91. elif "# Gerekler: " in satir:
  92. self.paketler_sozluk[isim]["Gerekler"] = satir.split("# Gerekler: ")[1][:-1]
  93. elif "# Grup: " in satir:
  94. gruplar = satir.split("# Grup: ")[1][:-1]
  95. self.paketler_sozluk[isim]["Grup"] = gruplar
  96. for grup in gruplar.split():
  97. varmi = self.gruplar_sozluk.get(grup.capitalize(),"yok")
  98. if varmi == "yok":
  99. self.gruplar_sozluk[grup.capitalize()]=[isim]
  100. else:
  101. varmi.append(isim)
  102. elif "isim=" in satir:
  103. self.paketler_sozluk[isim]["Isim"] = satir.split("isim=")[1][:-1]
  104. elif "surum=" in satir:
  105. self.paketler_sozluk[isim]["Surum"] = satir.split("surum=")[1][:-1]
  106. elif "devir=" in satir:
  107. self.paketler_sozluk[isim]["Devir"] = satir.split("devir=")[1][:-1]
  108. elif "kaynak=" in satir:
  109. kaynak = satir.split("kaynak=")[1].split(")")[0][1:]
  110. kaynak = kaynak.replace("$isim",self.paketler_sozluk[isim]["Isim"])
  111. s_ = self.paketler_sozluk[isim]["Surum"].split(".")
  112. if len(s_) >= 2:
  113. kaynak = kaynak.replace("${surum%.*}",s_[0]+"."+s_[1])
  114. kaynak = kaynak.replace("$surum",self.paketler_sozluk[isim]["Surum"])
  115. kaynak = kaynak.replace("$devir",self.paketler_sozluk[isim]["Devir"])
  116. self.paketler_sozluk[isim]["Kaynak"] = kaynak
  117. def surec_baslat(self):
  118. terminal_thread = surec.SurecThread(self)
  119. terminal_thread.update.connect(self.surec_guncelle)
  120. terminal_thread.finished.connect(self.surec_bitti)
  121. terminal_thread.start()
  122. def surec_bitti(self):
  123. if self.islem == "depo_esitle":
  124. self.desitlepencere.donut_label.setText("Depolar Güncellendi")
  125. self.kurulu_paketler_tespit()
  126. elif self.islem == "kurulu_paketler_tespit":
  127. self.desitlepencere.donut_label.setText("Kurulu Paketler Tespit Edildi")
  128. self.tum_paketler_kontrol()
  129. elif self.islem == "tum_paketler_kontrol":
  130. self.desitlepencere.donut_label.setText("MPS-GUI Paket Veri Tabanı Eşitleniyor")
  131. self.son_kontroller()
  132. self.paketgenelpencere.grup_liste_guncelle()
  133. self.paketgenelpencere.paket_liste_guncelle()
  134. self.asamalar.setCurrentIndex(1)
  135. def surec_guncelle(self,cikti):
  136. if self.islem == "depo_esitle":
  137. self.desitlepencere.donut_label.setText(cikti[7:-7])
  138. elif self.islem == "kurulu_paketler_tespit":
  139. self.kurulu_paketler.append(cikti)
  140. self.desitlepencere.donut_label.setText("Kurulu Paketler Tespit Ediliyor : "+cikti)
  141. elif self.islem == "tum_paketler_kontrol":
  142. self.tum_paketler.append(cikti)
  143. def cikis(self):
  144. os.system("killall mps")
  145. sys.exit()
  146. if __name__ == "__main__":
  147. uygulama = QApplication(sys.argv)
  148. uygulama.setOrganizationName('Milis Paket Yöneticisi')
  149. uygulama.setApplicationName('Milis Paket Yöneticisi')
  150. if os.getuid() != 0:
  151. QMessageBox.warning(QWidget(),"Hata","MPS-GUI çalışabilmek için root yetkilerine ihtiyaç duymaktadır.\nLütfen root yetkileriyle tekrar çalıştırın.")
  152. else:
  153. merkezPencere = MerkezPencere()
  154. merkezPencere.show()
  155. sys.exit(uygulama.exec_())