Browse Source

Version 2.0

master
Rinaldus 6 years ago
parent
commit
91ced51326
  1. 1
      .gitignore
  2. 12
      LICENSE.txt
  3. 9
      README.md
  4. 44
      mail-notifier.py
  5. 89
      ui/about.ui
  6. 51
      ui_about.py

1
.gitignore vendored

@ -0,0 +1 @@ @@ -0,0 +1 @@
__pycache__

12
LICENSE.txt

@ -0,0 +1,12 @@ @@ -0,0 +1,12 @@
Copyright (c) 2015-2016, Peter Svirshchevskiy
All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

9
README.md

@ -20,6 +20,12 @@ $ chmod +x mail-notifier.py @@ -20,6 +20,12 @@ $ chmod +x mail-notifier.py
```
## Changelog
### Version 2.0 (release date: 23.03.16)
* **Important! Users of Mail Notifier 1.x have to delete old configuration file located in ~/.config/mail-notifier/settings.conf before first launch of new version**
* New "About" window
* Added license (BSD 3-Clause)
### Version 2.0-beta1 (release date: 10.02.16)
* **Important! The configuration structure was changed. Users of Mail Notifier 1.x have to delete old configuration file located in ~/.config/mail-notifier/settings.conf before first launch of new version**
* Multi account support. Now the program is able to check new mails in several mailboxes. You will get the total quantity of new mails from all mailboxes in system tray
@ -39,6 +45,3 @@ $ chmod +x mail-notifier.py @@ -39,6 +45,3 @@ $ chmod +x mail-notifier.py
### Version 0.10 (pre release date: 28.10.15)
* Initial version
* All parameters are stored right in script
## Todo
* "About program" window

44
mail-notifier.py

@ -11,14 +11,15 @@ imaplib._MAXLINE = 400000 @@ -11,14 +11,15 @@ imaplib._MAXLINE = 400000
import subprocess
import resources_rc
from ui_settings import Ui_Settings
from ui_about import Ui_about
from PyQt5 import QtCore, QtGui, QtWidgets
import os
import socket
import time
#variables
timers = []
programTitle = "Mail Notifier"
programVersion = "2.0"
settings = QSettings(os.path.expanduser("~")+"/.config/mail-notifier/settings.conf", QSettings.NativeFormat)
def GlobalSettingsExist():
if ((settings.contains("CheckInterval") and settings.value("CheckInterval") != "") and
@ -80,16 +81,15 @@ class Window(QDialog): @@ -80,16 +81,15 @@ class Window(QDialog):
# Menu actions
def createActions(self):
self.quitAction = QAction(QIcon(':icons/menu_quit.png'),"&Quit", self,
triggered=QApplication.instance().quit)
self.checkNow = QAction(QIcon(':icons/check_now.png'),"&Check now", self,
triggered=mail_check)
self.restoreAction = QAction(QIcon(":icons/settings.png"),"&Settings", self,
triggered=self.showNormal)
self.aboutShow = QAction(QIcon(':icons/mailbox_empty.png'),"&About", self, triggered=self.aboutShow)
self.checkNow = QAction(QIcon(':icons/check_now.png'),"&Check now", self, triggered=mail_check)
self.restoreAction = QAction(QIcon(":icons/settings.png"),"&Settings", self, triggered=self.showNormal)
self.quitAction = QAction(QIcon(':icons/menu_quit.png'),"&Quit", self, triggered=QApplication.instance().quit)
# UI functions
def createTrayIcon(self):
self.trayIconMenu = QMenu(self)
self.trayIconMenu.addAction(self.aboutShow)
self.trayIconMenu.addAction(self.checkNow)
self.trayIconMenu.addAction(self.restoreAction)
self.trayIconMenu.addAction(self.quitAction)
@ -196,6 +196,12 @@ class Window(QDialog): @@ -196,6 +196,12 @@ class Window(QDialog):
self.ui.txtboxPassword.setText(settings.value("Password"))
self.ui.boolifSSL.setChecked(bool(settings.value("SSL")))
settings.endGroup()
def aboutShow(self):
if (about.isMinimized):
about.hide()
about.show()
about.activateWindow()
def start(self):
if (GlobalSettingsExist() and AccountExist()):
@ -207,9 +213,24 @@ class Window(QDialog): @@ -207,9 +213,24 @@ class Window(QDialog):
def stop (self):
self.timer.stop()
def closeEvent(self, event):
print ("Closing the app")
class About(QDialog):
def __init__(self):
super(About, self).__init__()
self.ui = Ui_about()
self.ui.setupUi(self)
self.setWindowFlags(QtCore.Qt.Tool)
self.setFixedSize(483,334)
self.ui.lblNameVersion.setText(programTitle + " " + programVersion)
f = open('LICENSE.txt', 'r')
self.ui.txtLicense.setPlainText(f.read())
def closeEvent(self, event):
event.ignore()
self.hide()
# Common functions
@ -288,6 +309,8 @@ def notify(message): @@ -288,6 +309,8 @@ def notify(message):
subprocess.Popen(['notify-send', programTitle, message])
return
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
@ -302,6 +325,7 @@ if __name__ == '__main__': @@ -302,6 +325,7 @@ if __name__ == '__main__':
sys.exit(1)
QApplication.setQuitOnLastWindowClosed(False)
window = Window()
about = About()
if (GlobalSettingsExist() and AccountExist()):
window.hide()
else:

89
ui/about.ui

@ -0,0 +1,89 @@ @@ -0,0 +1,89 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>about</class>
<widget class="QDialog" name="about">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>483</width>
<height>334</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="windowTitle">
<string>Mail Notifier</string>
</property>
<property name="windowIcon">
<iconset resource="../resources.qrc">
<normaloff>:/icons/mailbox_empty.png</normaloff>:/icons/mailbox_empty.png</iconset>
</property>
<widget class="QPlainTextEdit" name="txtLicense">
<property name="geometry">
<rect>
<x>50</x>
<y>120</y>
<width>381</width>
<height>201</height>
</rect>
</property>
</widget>
<widget class="QLabel" name="lblLogo">
<property name="geometry">
<rect>
<x>50</x>
<y>0</y>
<width>131</width>
<height>111</height>
</rect>
</property>
<property name="text">
<string/>
</property>
<property name="pixmap">
<pixmap resource="../resources.qrc">:/icons/mailbox_empty.png</pixmap>
</property>
<property name="scaledContents">
<bool>true</bool>
</property>
</widget>
<widget class="QLabel" name="lblNameVersion">
<property name="geometry">
<rect>
<x>200</x>
<y>40</y>
<width>203</width>
<height>31</height>
</rect>
</property>
<property name="minimumSize">
<size>
<width>203</width>
<height>0</height>
</size>
</property>
<property name="font">
<font>
<pointsize>20</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Mail Notifier</string>
</property>
<property name="scaledContents">
<bool>true</bool>
</property>
</widget>
</widget>
<resources>
<include location="../resources.qrc"/>
</resources>
<connections/>
</ui>

51
ui_about.py

@ -0,0 +1,51 @@ @@ -0,0 +1,51 @@
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'ui/about.ui'
#
# Created by: PyQt5 UI code generator 5.5.1
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_about(object):
def setupUi(self, about):
about.setObjectName("about")
about.resize(483, 334)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(about.sizePolicy().hasHeightForWidth())
about.setSizePolicy(sizePolicy)
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap(":/icons/mailbox_empty.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
about.setWindowIcon(icon)
self.txtLicense = QtWidgets.QPlainTextEdit(about)
self.txtLicense.setGeometry(QtCore.QRect(50, 120, 381, 201))
self.txtLicense.setObjectName("txtLicense")
self.lblLogo = QtWidgets.QLabel(about)
self.lblLogo.setGeometry(QtCore.QRect(50, 0, 131, 111))
self.lblLogo.setText("")
self.lblLogo.setPixmap(QtGui.QPixmap(":/icons/mailbox_empty.png"))
self.lblLogo.setScaledContents(True)
self.lblLogo.setObjectName("lblLogo")
self.lblNameVersion = QtWidgets.QLabel(about)
self.lblNameVersion.setGeometry(QtCore.QRect(200, 40, 203, 31))
self.lblNameVersion.setMinimumSize(QtCore.QSize(203, 0))
font = QtGui.QFont()
font.setPointSize(20)
font.setBold(True)
font.setWeight(75)
self.lblNameVersion.setFont(font)
self.lblNameVersion.setScaledContents(True)
self.lblNameVersion.setObjectName("lblNameVersion")
self.retranslateUi(about)
QtCore.QMetaObject.connectSlotsByName(about)
def retranslateUi(self, about):
_translate = QtCore.QCoreApplication.translate
about.setWindowTitle(_translate("about", "Mail Notifier"))
self.lblNameVersion.setText(_translate("about", "Mail Notifier 2.0"))
import resources_rc
Loading…
Cancel
Save