Version 2.0
This commit is contained in:
parent
6c08c40531
commit
91ced51326
|
@ -0,0 +1 @@
|
||||||
|
__pycache__
|
|
@ -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.
|
|
@ -20,6 +20,12 @@ $ chmod +x mail-notifier.py
|
||||||
```
|
```
|
||||||
|
|
||||||
## Changelog
|
## 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)
|
### 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**
|
* **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
|
* 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
|
||||||
### Version 0.10 (pre release date: 28.10.15)
|
### Version 0.10 (pre release date: 28.10.15)
|
||||||
* Initial version
|
* Initial version
|
||||||
* All parameters are stored right in script
|
* All parameters are stored right in script
|
||||||
|
|
||||||
## Todo
|
|
||||||
* "About program" window
|
|
||||||
|
|
|
@ -11,14 +11,15 @@ imaplib._MAXLINE = 400000
|
||||||
import subprocess
|
import subprocess
|
||||||
import resources_rc
|
import resources_rc
|
||||||
from ui_settings import Ui_Settings
|
from ui_settings import Ui_Settings
|
||||||
|
from ui_about import Ui_about
|
||||||
from PyQt5 import QtCore, QtGui, QtWidgets
|
from PyQt5 import QtCore, QtGui, QtWidgets
|
||||||
import os
|
import os
|
||||||
import socket
|
import socket
|
||||||
import time
|
import time
|
||||||
|
|
||||||
#variables
|
#variables
|
||||||
timers = []
|
|
||||||
programTitle = "Mail Notifier"
|
programTitle = "Mail Notifier"
|
||||||
|
programVersion = "2.0"
|
||||||
settings = QSettings(os.path.expanduser("~")+"/.config/mail-notifier/settings.conf", QSettings.NativeFormat)
|
settings = QSettings(os.path.expanduser("~")+"/.config/mail-notifier/settings.conf", QSettings.NativeFormat)
|
||||||
def GlobalSettingsExist():
|
def GlobalSettingsExist():
|
||||||
if ((settings.contains("CheckInterval") and settings.value("CheckInterval") != "") and
|
if ((settings.contains("CheckInterval") and settings.value("CheckInterval") != "") and
|
||||||
|
@ -80,16 +81,15 @@ class Window(QDialog):
|
||||||
|
|
||||||
# Menu actions
|
# Menu actions
|
||||||
def createActions(self):
|
def createActions(self):
|
||||||
self.quitAction = QAction(QIcon(':icons/menu_quit.png'),"&Quit", self,
|
self.aboutShow = QAction(QIcon(':icons/mailbox_empty.png'),"&About", self, triggered=self.aboutShow)
|
||||||
triggered=QApplication.instance().quit)
|
self.checkNow = QAction(QIcon(':icons/check_now.png'),"&Check now", self, triggered=mail_check)
|
||||||
self.checkNow = QAction(QIcon(':icons/check_now.png'),"&Check now", self,
|
self.restoreAction = QAction(QIcon(":icons/settings.png"),"&Settings", self, triggered=self.showNormal)
|
||||||
triggered=mail_check)
|
self.quitAction = QAction(QIcon(':icons/menu_quit.png'),"&Quit", self, triggered=QApplication.instance().quit)
|
||||||
self.restoreAction = QAction(QIcon(":icons/settings.png"),"&Settings", self,
|
|
||||||
triggered=self.showNormal)
|
|
||||||
|
|
||||||
# UI functions
|
# UI functions
|
||||||
def createTrayIcon(self):
|
def createTrayIcon(self):
|
||||||
self.trayIconMenu = QMenu(self)
|
self.trayIconMenu = QMenu(self)
|
||||||
|
self.trayIconMenu.addAction(self.aboutShow)
|
||||||
self.trayIconMenu.addAction(self.checkNow)
|
self.trayIconMenu.addAction(self.checkNow)
|
||||||
self.trayIconMenu.addAction(self.restoreAction)
|
self.trayIconMenu.addAction(self.restoreAction)
|
||||||
self.trayIconMenu.addAction(self.quitAction)
|
self.trayIconMenu.addAction(self.quitAction)
|
||||||
|
@ -196,6 +196,12 @@ class Window(QDialog):
|
||||||
self.ui.txtboxPassword.setText(settings.value("Password"))
|
self.ui.txtboxPassword.setText(settings.value("Password"))
|
||||||
self.ui.boolifSSL.setChecked(bool(settings.value("SSL")))
|
self.ui.boolifSSL.setChecked(bool(settings.value("SSL")))
|
||||||
settings.endGroup()
|
settings.endGroup()
|
||||||
|
|
||||||
|
def aboutShow(self):
|
||||||
|
if (about.isMinimized):
|
||||||
|
about.hide()
|
||||||
|
about.show()
|
||||||
|
about.activateWindow()
|
||||||
|
|
||||||
def start(self):
|
def start(self):
|
||||||
if (GlobalSettingsExist() and AccountExist()):
|
if (GlobalSettingsExist() and AccountExist()):
|
||||||
|
@ -207,9 +213,24 @@ class Window(QDialog):
|
||||||
|
|
||||||
def stop (self):
|
def stop (self):
|
||||||
self.timer.stop()
|
self.timer.stop()
|
||||||
|
|
||||||
def closeEvent(self, event):
|
class About(QDialog):
|
||||||
print ("Closing the app")
|
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
|
# Common functions
|
||||||
|
@ -288,6 +309,8 @@ def notify(message):
|
||||||
subprocess.Popen(['notify-send', programTitle, message])
|
subprocess.Popen(['notify-send', programTitle, message])
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
import sys
|
import sys
|
||||||
app = QApplication(sys.argv)
|
app = QApplication(sys.argv)
|
||||||
|
@ -302,6 +325,7 @@ if __name__ == '__main__':
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
QApplication.setQuitOnLastWindowClosed(False)
|
QApplication.setQuitOnLastWindowClosed(False)
|
||||||
window = Window()
|
window = Window()
|
||||||
|
about = About()
|
||||||
if (GlobalSettingsExist() and AccountExist()):
|
if (GlobalSettingsExist() and AccountExist()):
|
||||||
window.hide()
|
window.hide()
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -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>
|
|
@ -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…
Reference in New Issue