arayuz.py 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277
  1. #!/usr/bin/env python3
  2. from PyQt5.QtWidgets import (QMainWindow, QApplication, QWidget, QGridLayout, QLineEdit, QLabel, QComboBox, QCheckBox,
  3. QTextEdit, QPushButton,QFileDialog,QMessageBox)
  4. from PyQt5.QtCore import QDir,QUrl
  5. import sys,os,subprocess,contextlib
  6. class BuilderPencere(QMainWindow):
  7. def __init__(self,ebeveyn=None):
  8. super(BuilderPencere,self).__init__(ebeveyn)
  9. merkez_widget = QWidget()
  10. self.setCentralWidget(merkez_widget)
  11. merkez_kutu = QGridLayout()
  12. merkez_widget.setLayout(merkez_kutu)
  13. ac_dugme = QPushButton(self.tr("Ayarlar Aç"))
  14. ac_dugme.clicked.connect(self.ac_func)
  15. merkez_kutu.addWidget(ac_dugme,0,0,1,1)
  16. self.acilan_url = QLineEdit()
  17. self.acilan_url.setReadOnly(True)
  18. merkez_kutu.addWidget(self.acilan_url,0,1,1,3)
  19. merkez_kutu.addWidget(QLabel(self.tr("Dağıtım Adı")),1,0,1,1)
  20. self.dagitim_adi = QLineEdit()
  21. merkez_kutu.addWidget(self.dagitim_adi,1,1,1,1)
  22. merkez_kutu.addWidget(QLabel(self.tr("Dağıtım Kod Adı")),1,2,1,1)
  23. self.dagitim_kod_adi = QLineEdit()
  24. merkez_kutu.addWidget(self.dagitim_kod_adi,1,3,1,1)
  25. merkez_kutu.addWidget(QLabel(self.tr("Versiyon")),2,0,1,1)
  26. self.versiyon = QLineEdit()
  27. merkez_kutu.addWidget(self.versiyon,2,1,1,1)
  28. merkez_kutu.addWidget(QLabel(self.tr("CD/DVD İso Etiketi")),2,2,1,1)
  29. self.iso_etiketi = QLineEdit()
  30. merkez_kutu.addWidget(self.iso_etiketi,2,3,1,1)
  31. merkez_kutu.addWidget(QLabel(self.tr("Masaüstü")),3,0,1,1)
  32. self.masaustleri = QComboBox()
  33. self.masaustleri.addItems(["------","xfce4","mate","gnome"])
  34. merkez_kutu.addWidget(self.masaustleri,3,1,1,1)
  35. merkez_kutu.addWidget(QLabel(self.tr("Giriş Yöneticileri")),3,2,1,1)
  36. self.giris_yoneticisi = QComboBox()
  37. self.giris_yoneticisi.addItems(["------","slim", "mdm", "lxdm"])
  38. merkez_kutu.addWidget(self.giris_yoneticisi,3,3,1,1)
  39. merkez_kutu.addWidget(QLabel(self.tr("Host Adı")),4,0,1,1)
  40. self.host_adi = QLineEdit()
  41. merkez_kutu.addWidget(self.host_adi,4,1,1,1)
  42. merkez_kutu.addWidget(QLabel(self.tr("Root Parolası")),4,2,1,1)
  43. self.root_parolasi = QLineEdit()
  44. merkez_kutu.addWidget(self.root_parolasi,4,3,1,1)
  45. self.uefi_desteği = QCheckBox(self.tr("Uefi Desteği Olsun"))
  46. merkez_kutu.addWidget(self.uefi_desteği,5,0,1,4)
  47. merkez_kutu.addWidget(QLabel(self.tr("Ek Paketler (Her satıra bir paket gelecek şekilde yazınız)")),6,0,1,4)
  48. self.ek_paketler = QTextEdit()
  49. merkez_kutu.addWidget(self.ek_paketler,7,0,1,4)
  50. merkez_kutu.addWidget(QLabel(self.tr("Dağıtımın özelleştirilmesi için gerekli dosyaların bulunduğu klasör")),8,0,1,4)
  51. self.ozellestirme = QLineEdit()
  52. merkez_kutu.addWidget(self.ozellestirme,9,0,1,4)
  53. merkez_kutu.addWidget(QLabel(self.tr("Dağıtım hazırlanması için kullanılacak klasör yolu. /mnt altında olmamalıdır.")),10,0,1,4)
  54. self.lfs = QLineEdit()
  55. merkez_kutu.addWidget(self.lfs,11,0,1,3)
  56. lfs_klasor_dugme = QPushButton(self.tr("..."))
  57. lfs_klasor_dugme.clicked.connect(self.lfs_klasor_func)
  58. merkez_kutu.addWidget(lfs_klasor_dugme,11,3,1,1)
  59. merkez_kutu.addWidget(QLabel(self.tr("mps.conf yolu isteğe bağlı mps.conf kullanabilmek için")),12,0,1,4)
  60. self.mpsconf = QLineEdit()
  61. merkez_kutu.addWidget(self.mpsconf,13,0,1,3)
  62. mpsconf_dugme = QPushButton(self.tr("..."))
  63. mpsconf_dugme.clicked.connect(self.mpsconf_klasor_func)
  64. merkez_kutu.addWidget(mpsconf_dugme,13,3,1,1)
  65. merkez_kutu.addWidget(QLabel(self.tr("Yerel Paket Sunucusu (isteğe bağlı)")),14,0,1,4)
  66. self.yerelps = QLineEdit()
  67. merkez_kutu.addWidget(self.yerelps,15,0,1,3)
  68. yerelps_dugme = QPushButton(self.tr("..."))
  69. yerelps_dugme.clicked.connect(self.yerelps_klasor_func)
  70. merkez_kutu.addWidget(yerelps_dugme,15,3,1,1)
  71. self.kaydet_dugme = QPushButton(self.tr("Kaydet"))
  72. self.kaydet_dugme.clicked.connect(self.kaydet)
  73. merkez_kutu.addWidget(self.kaydet_dugme,16,0,1,2)
  74. self.farkli_kaydet_dugme = QPushButton(self.tr("Farklı Kaydet"))
  75. self.farkli_kaydet_dugme.clicked.connect(self.farkli_kaydet)
  76. merkez_kutu.addWidget(self.farkli_kaydet_dugme,16,2,1,2)
  77. self.iso_on_hazırlık_dugme = QPushButton(self.tr("Ön Hazırlık"))
  78. self.iso_on_hazırlık_dugme.clicked.connect(self.iso_on_hazirlik_fonk)
  79. merkez_kutu.addWidget(self.iso_on_hazırlık_dugme,17,0,1,1)
  80. self.iso_olustur_dugme = QPushButton(self.tr("İso Oluştur"))
  81. self.iso_olustur_dugme.setDisabled(True)
  82. self.iso_olustur_dugme.clicked.connect(self.iso_olustur_fonk)
  83. merkez_kutu.addWidget(self.iso_olustur_dugme,17,1,1,1)
  84. self.sadece_iso_olustur_dugme = QPushButton(self.tr("Sadece İso Oluştur"))
  85. self.sadece_iso_olustur_dugme.clicked.connect(self.sadece_iso_olustur_fonk)
  86. merkez_kutu.addWidget(self.sadece_iso_olustur_dugme,17,2,1,2)
  87. def komutCalistirFonksiyon(self, komut):
  88. try:
  89. out = subprocess.check_output(komut, stderr=subprocess.STDOUT, shell=True, universal_newlines=True)
  90. return out.replace("\b", "")
  91. except subprocess.CalledProcessError as e:
  92. return e.output
  93. def iso_on_hazirlik_fonk(self):
  94. if self.acilan_url.text():
  95. self.komutCalistirFonksiyon('xterm -hold -e "./builder.sh {} -o"'.format(self.acilan_url.text()))
  96. self.iso_olustur_dugme.setDisabled(False)
  97. else:
  98. QMessageBox.warning(self,self.tr("Hata"),self.tr("Bir ayar dosyası seçmediniz veya kaydetmediniz."))
  99. def iso_olustur_fonk(self):
  100. if self.acilan_url.text():
  101. self.komutCalistirFonksiyon('xterm -hold -e "./builder.sh {} -i"'.format(self.acilan_url.text()))
  102. def sadece_iso_olustur_fonk(self):
  103. if self.acilan_url.text():
  104. self.komutCalistirFonksiyon('xterm -hold -e "./builder.sh {} -si"'.format(self.acilan_url.text()))
  105. def ac_func(self):
  106. dosya = QFileDialog.getOpenFileName(self, self.tr("Conf Dosyası Aç"), "./ayarlar","(*.conf)")
  107. if dosya:
  108. if dosya != ("",""):
  109. self.ayarlar_oku(dosya[0])
  110. def lfs_klasor_func(self):
  111. dizin = QFileDialog.getExistingDirectory(self, self.tr("LFS klasör ekle"), QDir.homePath(), QFileDialog.ShowDirsOnly)
  112. if dizin:
  113. if dizin != ("",""):
  114. self.lfs.setText(dizin)
  115. def mpsconf_klasor_func(self):
  116. dizin = QFileDialog.getExistingDirectory(self, self.tr("LFS klasör ekle"), QDir.homePath(), QFileDialog.ShowDirsOnly)
  117. if dizin:
  118. if dizin != ("",""):
  119. self.mpsconf.setText(dizin)
  120. def yerelps_klasor_func(self):
  121. dizin = QFileDialog.getExistingDirectory(self, self.tr("LFS klasör ekle"), QDir.homePath(), QFileDialog.ShowDirsOnly)
  122. if dizin:
  123. if dizin != ("",""):
  124. self.yerelps.setText(dizin)
  125. def ayarlar_oku(self,url):
  126. self.acilan_url.setText(url)
  127. dosya = open(url, "r")
  128. okunan = dosya.readlines()
  129. dosya.close()
  130. for satir in okunan:
  131. if satir[0:8] == "DAGITIM=":
  132. self.dagitim_adi.setText(satir[9:-2])
  133. elif satir[0:7] == "KODADI=":
  134. self.dagitim_kod_adi.setText(satir[8:-2])
  135. elif satir[0:9] == "VERSIYON=":
  136. self.versiyon.setText(satir[10:-2])
  137. elif satir[0:9] == "MASAUSTU=":
  138. self.masaustleri.setCurrentText(satir[10:-2])
  139. elif satir[0:16] == "GIRISYONETICISI=":
  140. self.giris_yoneticisi.setCurrentText(satir[17:-2])
  141. elif satir[0:15] == "EXTRA_PAKETLER=":
  142. self.ek_paketler.setText(satir[16:-2].replace(" ","\n"))
  143. elif satir[0:9] == "HOSTNAME=":
  144. self.host_adi.setText(satir[10:-2])
  145. elif satir[0:14] == "ROOT_PAROLASI=":
  146. self.root_parolasi.setText(satir[15:-2])
  147. elif satir[0:11] == "ISO_ETIKET=":
  148. self.iso_etiketi.setText(satir[12:-2])
  149. elif satir[0:5] == "UEFI=":
  150. if satir[6:-2] == "0":
  151. self.uefi_desteği.setChecked(False)
  152. elif satir[6:-2] == "1":
  153. self.uefi_desteği.setChecked(True)
  154. elif satir[0:13] == "OZELLESTIRME=":
  155. self.ozellestirme.setText(satir[14:-2])
  156. elif satir[0:4] == "LFS=":
  157. self.lfs.setText(satir[5:-2])
  158. elif satir[0:8] == "MPSCONF=":
  159. self.mpsconf.setText(satir[9:-2])
  160. elif satir[0:8] == "YERELPS=":
  161. self.yerelps.setText(satir[9:-2])
  162. def kaydet(self):
  163. yazilacak = ""
  164. if not os.path.exists(self.acilan_url.text()):
  165. QMessageBox.warning(self,self.tr("Hata"),self.acilan_url.text()+self.tr(" dosyası bulunamadı."))
  166. return 0
  167. dosya = open(self.acilan_url.text(), "r")
  168. okunan = dosya.readlines()
  169. dosya.close()
  170. for satir in okunan:
  171. if satir[0:8] == "DAGITIM=":
  172. yazilacak += 'DAGITIM="{}"\n'.format(self.dagitim_adi.text())
  173. elif satir[0:7] == "KODADI=":
  174. yazilacak += 'KODADI="{}"\n'.format(self.dagitim_kod_adi.text())
  175. elif satir[0:9] == "VERSIYON=":
  176. yazilacak += 'VERSIYON="{}"\n'.format(self.versiyon.text())
  177. elif satir[0:9] == "MASAUSTU=":
  178. yazilacak += 'MASAUSTU="{}"\n'.format(self.masaustleri.currentText())
  179. elif satir[0:16] == "GIRISYONETICISI=":
  180. yazilacak += 'GIRISYONETICISI="{}"\n'.format(self.giris_yoneticisi.currentText())
  181. elif satir[0:15] == "EXTRA_PAKETLER=":
  182. yazilacak += 'EXTRA_PAKETLER="{}"\n'.format(self.ek_paketler.toPlainText().replace("\n"," "))
  183. elif satir[0:9] == "HOSTNAME=":
  184. yazilacak += 'HOSTNAME="{}"\n'.format(self.host_adi.text())
  185. elif satir[0:14] == "ROOT_PAROLASI=":
  186. yazilacak += 'ROOT_PAROLASI="{}"\n'.format(self.root_parolasi.text())
  187. elif satir[0:11] == "ISO_ETIKET=":
  188. yazilacak += 'ISO_ETIKET="{}"\n'.format(self.iso_etiketi.text())
  189. elif satir[0:5] == "UEFI=":
  190. if self.uefi_desteği.isChecked():
  191. yazilacak += 'UEFI="1"\n'
  192. else:
  193. yazilacak += 'UEFI="0"\n'
  194. elif satir[0:13] == "OZELLESTIRME=":
  195. yazilacak += 'OZELLESTIRME="{}"\n'.format(self.ozellestirme.text())
  196. elif satir[0:4] == "LFS=":
  197. yazilacak+='LFS="{}"\n'.format(self.lfs.text())
  198. elif satir[0:8] == "MPSCONF=":
  199. yazilacak+='MPSCONF="{}"\n'.format(self.mpsconf.text())
  200. elif satir[0:8] == "YERELPS=":
  201. yazilacak+='YERELPS="{}"\n'.format(self.yerelps.text())
  202. else:
  203. yazilacak+=satir
  204. dosya = open(self.acilan_url.text(), "w")
  205. dosya.write(yazilacak)
  206. dosya.close()
  207. QMessageBox.information(self,self.tr("Başarılı"),self.tr("Yazma işlemi başarıyla tamamlandı"))
  208. def farkli_kaydet(self):
  209. yazilacak = ""
  210. yazilacak += 'DAGITIM="{}"\n'.format(self.dagitim_adi.text())
  211. yazilacak += 'KODADI="{}"\n'.format(self.dagitim_kod_adi.text())
  212. yazilacak += 'VERSIYON="{}"\n'.format(self.versiyon.text())
  213. yazilacak += 'MASAUSTU="{}"\n'.format(self.masaustleri.currentText())
  214. yazilacak += 'GIRISYONETICISI="{}"\n'.format(self.giris_yoneticisi.currentText())
  215. yazilacak += 'EXTRA_PAKETLER="{}"\n'.format(self.ek_paketler.toPlainText().replace("\n", " "))
  216. yazilacak += 'HOSTNAME="{}"\n'.format(self.host_adi.text())
  217. yazilacak += 'ROOT_PAROLASI="{}"\n'.format(self.root_parolasi.text())
  218. yazilacak += 'ISO_ETIKET="{}"\n'.format(self.iso_etiketi.text())
  219. if self.uefi_desteği.isChecked():
  220. yazilacak += 'UEFI="1"\n'
  221. else:
  222. yazilacak += 'UEFI="0"\n'
  223. yazilacak += 'OZELLESTIRME="{}"\n'.format(self.ozellestirme.text())
  224. yazilacak += 'LFS="{}"\n'.format(self.lfs.text())
  225. yazilacak += 'MPSCONF="{}"\n'.format(self.mpsconf.text())
  226. yazilacak += 'YERELPS="{}"\n'.format(self.yerelps.text())
  227. kaydet = QFileDialog.getSaveFileUrl(self, self.tr("Conf Dosyası Kaydet"), "./ayarlar","(*.conf)")
  228. if kaydet:
  229. if kaydet != (QUrl(''), ''):
  230. url = kaydet[0].toString()[7:]
  231. if url.split(".")[-1] != "conf":
  232. url += ".conf"
  233. dosya = open(url, "w+")
  234. dosya.write(yazilacak)
  235. dosya.close()
  236. self.ayarlar_oku(url)
  237. QMessageBox.information(self, self.tr("Başarılı"), self.tr("Yazma işlemi başarıyla tamamlandı"))
  238. if __name__ == "__main__":
  239. uygulama = QApplication(sys.argv)
  240. uygulama.setOrganizationName('Milis Builder')
  241. uygulama.setApplicationName('Milis Builder')
  242. merkezPencere = BuilderPencere()
  243. merkezPencere.show()
  244. sys.exit(uygulama.exec_())