arayuz.py 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. # Copyright (c) 2017 Milis İşletim Sistemi
  4. # Author: sonakinci41
  5. from PyQt5.QtWidgets import (QDialog, QVBoxLayout, QListWidget, QListWidgetItem, QApplication, QListView,
  6. QDesktopWidget, QSystemTrayIcon, QMenu, QAction, qApp)
  7. from PyQt5.QtCore import Qt, QFileSystemWatcher, QSettings, QTimer
  8. from PyQt5.QtGui import QIcon
  9. import os, yaml, sys, subprocess
  10. from ui import listemadddesi, ayarlarui, gonder
  11. class Okuyucu(QDialog):
  12. MESAJ_DIZINI = "./mesajlar/"
  13. BILDIRIM_SUREC= os.getcwd()+"/"+"bildirim"
  14. BILDIRIM_SUREC_KAPAT= "killall -9 "+os.getcwd()+"/"+"bildirim"
  15. def __init__(self, ebeveyn=None):
  16. super(Okuyucu, self).__init__(ebeveyn)
  17. kutu = QVBoxLayout()
  18. self.setLayout(kutu)
  19. kutu.setContentsMargins(0, 0, 0, 0)
  20. self.sistem_cekmecesi = QSystemTrayIcon(self)
  21. self.sistem_cekmecesi.setIcon(QIcon("./icons/milis-bildirim.png"))
  22. self.sistem_cekmecesi.activated.connect(self.sistem_cekmecesi_tiklandi)
  23. self.sistem_cekmecesi.show()
  24. self.menu_cekmece = QMenu(self)
  25. self.mesaj_oku_aksiyon = QAction("Mesaj Oku", self, statusTip="MesajOku", triggered=self.mesaj_oku_fonk)
  26. self.mesaj_gonder_aksiyon = QAction("Mesaj Gönder", self, statusTip="MesajGonder",
  27. triggered=self.mesaj_gonder_fonk)
  28. self.ayarlar_aksiyon = QAction("Ayarlar", self, statusTip="Ayarlar", triggered=self.ayarlar_fonk)
  29. self.kapat_aksiyon = QAction("Kapat", self, statusTip="Kapat", triggered=self.kapat_fonk)
  30. self.menu_cekmece.addAction(self.mesaj_oku_aksiyon)
  31. self.menu_cekmece.addAction(self.mesaj_gonder_aksiyon)
  32. self.menu_cekmece.addAction(self.ayarlar_aksiyon)
  33. self.menu_cekmece.addAction(self.kapat_aksiyon)
  34. self.sistem_cekmecesi.setContextMenu(self.menu_cekmece)
  35. self.sistem_cekmecesi.showMessage("Çalıştı", "Milis Bildirim Başarıyla Çalıştırıldı",
  36. QSystemTrayIcon.MessageIcon(1), 5000)
  37. self.mesaj_liste = QListWidget()
  38. self.mesaj_liste.setSelectionMode(QListView.ExtendedSelection)
  39. kutu.addWidget(self.mesaj_liste)
  40. self.setFixedWidth(285)
  41. s = QDesktopWidget().screenGeometry(0)
  42. self.setFixedHeight(s.height())
  43. self.setWindowFlags(Qt.Popup)
  44. self.move(s.width() - 285, 0)
  45. ################################
  46. self.settings = QSettings()
  47. self.okunmus_mesajlar = self.settings.value("liste", [], str) or []
  48. self.tum_mesajlar = os.listdir(self.MESAJ_DIZINI)
  49. self.varolan_mesajlar = []
  50. try:
  51. self.gecersizleri_goster = int(self.settings.value("gecersizleri_goster"))
  52. self.anonimleri_goster = int(self.settings.value("anonimleri_goster"))
  53. except:
  54. self.gecersizleri_goster = 1
  55. self.anonimleri_goster = 1
  56. ################################
  57. self.tum_mesajlar_fonk()
  58. self.dosya_izleyici = QFileSystemWatcher()
  59. self.dosya_izleyici.addPath(self.MESAJ_DIZINI)
  60. self.dosya_izleyici.directoryChanged.connect(self.tum_mesajlar_fonk)
  61. #################################
  62. # Bildirim çalıştırılıyor #
  63. #################################
  64. zamanlayici = QTimer(self)
  65. zamanlayici.setInterval(6000)
  66. zamanlayici.timeout.connect(self.bildirim_calistir)
  67. zamanlayici.start()
  68. def mesaj_gonder_fonk(self):
  69. pencere_gonder = gonder.Gonderici(self)
  70. pencere_gonder.show()
  71. def closeEvent(self, event):
  72. self.settings.setValue('liste', self.okunmus_mesajlar)
  73. self.settings.sync()
  74. def ayarlar_fonk(self):
  75. ayarlar_pencere = ayarlarui.Ayarlar(self)
  76. ayarlar_pencere.show()
  77. def kapat_fonk(self):
  78. os.system(self.BILDIRIM_SUREC_KAPAT)
  79. qApp.quit()
  80. def sistem_cekmecesi_tiklandi(self, value):
  81. if value == self.sistem_cekmecesi.DoubleClick:
  82. self.mesaj_oku_fonk()
  83. def mesaj_oku_fonk(self):
  84. self.sistem_cekmecesi.setIcon(QIcon("./icons/milis-bildirim.png"))
  85. self.show()
  86. def bildirim_calistir(self):
  87. print("######################")
  88. print(self.surec_kontrol())
  89. if not self.surec_kontrol():
  90. subprocess.Popen([self.BILDIRIM_SUREC])
  91. def surec_kontrol(self):
  92. _surec = os.popen("ps -Af").read()
  93. surec_adet = _surec.count(self.BILDIRIM_SUREC)
  94. if surec_adet > 0:
  95. return True
  96. return False
  97. def imza_kontrol(self, konum, dosya):
  98. sgd = "/tmp/" + dosya + ".cikti"
  99. dogrulama = "/tmp/" + dosya + ".dogrula"
  100. os.system("rm -rf " + sgd)
  101. os.system("rm -rf " + dogrulama)
  102. os.system("gpg --output " + sgd + " " + konum + dosya)
  103. os.system("gpg --status-fd 1 --no-default-keyring --verify " + konum + dosya + " > " + dogrulama)
  104. yol = konum + dosya
  105. gonderen = "anonim"
  106. gonderen_onay = "geçersiz"
  107. with open(dogrulama) as f:
  108. satirlar = f.readlines()
  109. durum = False
  110. if os.path.isfile(sgd):
  111. yol = sgd
  112. durum = True
  113. for satir in satirlar:
  114. if "ERRSIG" in satir:
  115. gonderen = satir.split()[2]
  116. break
  117. if "GOODSIG" in satir:
  118. gonderen = satir.split()[-1]
  119. gonderen_onay = "geçerli"
  120. break
  121. os.system("rm -rf " + dogrulama)
  122. return durum, yol, gonderen, gonderen_onay
  123. def yaml_oku(self, dosya):
  124. durum, yol, gonderen, gonderen_onay = self.imza_kontrol(self.MESAJ_DIZINI, dosya)
  125. with open(yol, 'r') as f:
  126. okunan = yaml.load(f)
  127. return okunan, gonderen, gonderen_onay
  128. def tum_mesajlar_fonk(self):
  129. self.varolan_mesajlar = self.tum_mesajlar
  130. self.mesaj_liste.clear()
  131. duzenli_mesajlar = self.mesajlar_oku_sirala()
  132. mesajlar = duzenli_mesajlar.keys()
  133. sirali_mesajlar = list(mesajlar)
  134. sirali_mesajlar.sort()
  135. sirali_mesajlar = sirali_mesajlar[::-1]
  136. if len(sirali_mesajlar) != 0:
  137. for mesaj in sirali_mesajlar:
  138. mesaj_ = duzenli_mesajlar[mesaj]
  139. ozel_widget = listemadddesi.OzelListeMaddesi(self)
  140. ozel_widget.okuyucu()
  141. ozel_widget.mesaj_id_ekle(mesaj_[2])
  142. ozel_widget.mesaj_tipi_ekle(mesaj_[0])
  143. ozel_widget.mesaj_ekle(mesaj_[1])
  144. ozel_widget.tarih_ekle(mesaj)
  145. ozel_widget.gonderen_ekle(mesaj_[3])
  146. ozel_widget.gonderen_onay_ekle(mesaj_[4])
  147. if mesaj_[2] in self.okunmus_mesajlar:
  148. ozel_widget.okunma_degistir("okundu")
  149. else:
  150. ozel_widget.okunma_degistir("okunmadi")
  151. ozel_widget_item = QListWidgetItem(self.mesaj_liste)
  152. ozel_widget_item.setSizeHint(ozel_widget.sizeHint())
  153. self.mesaj_liste.setItemWidget(ozel_widget_item, ozel_widget)
  154. if mesaj_[2] not in self.varolan_mesajlar:
  155. if mesaj_[0] == "bilgi":
  156. icon = 1
  157. elif mesaj_[0] == "sistem":
  158. icon = 2
  159. elif mesaj_[0] == "kritik":
  160. icon = 3
  161. else:
  162. icon = 0
  163. self.sistem_cekmecesi.showMessage(mesaj_[0], mesaj_[1],
  164. QSystemTrayIcon.MessageIcon(icon), 5000)
  165. self.sistem_cekmecesi.setIcon(QIcon("./icons/milis-bildirim-m.png"))
  166. def mesajlar_oku_sirala(self):
  167. duzenli_mesajlar = {}
  168. mesajlar = os.listdir(self.MESAJ_DIZINI)
  169. self.tum_mesajlar = mesajlar
  170. for mesaj in mesajlar:
  171. okunan, gonderen, gonderen_onay = self.yaml_oku(mesaj)
  172. if gonderen_onay == "geçersiz" and self.gecersizleri_goster == False:
  173. pass
  174. elif gonderen == "anonim" and self.anonimleri_goster == False:
  175. pass
  176. else:
  177. if okunan == None:
  178. pass
  179. try:
  180. mesaj_tipi = okunan["mesaj_tipi"]
  181. except:
  182. mesaj_tipi = ""
  183. try:
  184. mesaj_metni = okunan["mesaj"]
  185. except:
  186. mesaj_metni = ""
  187. try:
  188. mesaj_tarihi = okunan["tarih"]
  189. except:
  190. mesaj_tarihi = ""
  191. if gonderen[0] == "<" and gonderen[-1] == ">":
  192. gonderen = gonderen[1:-1]
  193. duzenli_mesajlar[mesaj_tarihi] = [mesaj_tipi, mesaj_metni, mesaj, gonderen, gonderen_onay]
  194. return duzenli_mesajlar
  195. if __name__ == "__main__":
  196. uyg = QApplication(sys.argv)
  197. okuyucu_pencere = Okuyucu()
  198. uyg.setOrganizationName('milis-bildirim')
  199. uyg.setQuitOnLastWindowClosed(False)
  200. sys.exit(uyg.exec_())