-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmain.py
100 lines (88 loc) · 4.31 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
import ScreenCloud
from PythonQt.QtCore import QFile, QSettings, QBuffer, QIODevice
from PythonQt.QtGui import QWidget, QDialog, QDesktopServices, QIcon, QStandardItem, QStandardItemModel
from PythonQt.QtUiTools import QUiLoader
import ftplib, time
class FTPSUploader():
def __init__(self):
self.uil = QUiLoader()
def showSettingsUI(self, parentWidget):
self.parentWidget = parentWidget
self.settingsDialog = self.uil.load(QFile(workingDir + "/settings.ui"), parentWidget)
self.settingsDialog.group_location.input_name.connect("textChanged(QString)", self.nameFormatEdited)
self.settingsDialog.connect("accepted()", self.saveSettings)
self.loadSettings()
self.settingsDialog.group_server.input_host.text = self.host
self.settingsDialog.group_server.input_port.value = self.port
self.settingsDialog.group_server.input_username.text = self.username
self.settingsDialog.group_server.input_password.text = self.password
self.settingsDialog.group_server.input_url.text = self.url
self.settingsDialog.group_location.input_folder.text = self.folder
self.settingsDialog.group_location.input_name.text = self.nameFormat
self.settingsDialog.open()
def loadSettings(self):
settings = QSettings()
settings.beginGroup("uploaders")
settings.beginGroup("ftps")
self.host = settings.value("host", "")
self.port = int(settings.value("port", 21))
self.username = settings.value("username", "")
self.password = settings.value("password", "")
self.url = settings.value("url", "")
self.folder = settings.value("folder", "")
self.nameFormat = settings.value("name-format", "Screenshot at %H-%M-%S")
settings.endGroup()
settings.endGroup()
def saveSettings(self):
settings = QSettings()
settings.beginGroup("uploaders")
settings.beginGroup("ftps")
settings.setValue("host", self.settingsDialog.group_server.input_host.text)
settings.setValue("port", int(self.settingsDialog.group_server.input_port.value))
settings.setValue("username", self.settingsDialog.group_server.input_username.text)
settings.setValue("password", self.settingsDialog.group_server.input_password.text)
settings.setValue("url", self.settingsDialog.group_server.input_url.text)
settings.setValue("folder", self.settingsDialog.group_location.input_folder.text)
settings.setValue("name-format", self.settingsDialog.group_location.input_name.text)
settings.endGroup()
settings.endGroup()
def isConfigured(self):
self.loadSettings()
return not (not self.host or not self.username or not self.password or not self.folder)
def getFilename(self):
self.loadSettings()
return ScreenCloud.formatFilename(self.nameFormat)
def upload(self, screenshot, name):
self.loadSettings()
timestamp = time.time()
try:
tmpFilename = QDesktopServices.storageLocation(QDesktopServices.TempLocation) + "/" + ScreenCloud.formatFilename(str(timestamp))
except AttributeError:
from PythonQt.QtCore import QStandardPaths # fix for Qt5
tmpFilename = QStandardPaths.writableLocation(QStandardPaths.TempLocation) + "/" + ScreenCloud.formatFilename(str(timestamp))
screenshot.save(QFile(tmpFilename), ScreenCloud.getScreenshotFormat())
# Old: ftp = ftplib.FTP()
# Using the FTP_TLS Lib
ftp = ftplib.FTP_TLS()
ftp.connect(self.host, self.port)
ftp.login(self.username, self.password)
# Using secure Data Connection
ftp.prot_p()
f = open(tmpFilename, 'rb')
try:
ftp.cwd(self.folder)
except ftplib.error_perm as err:
ScreenCloud.setError(err.message)
return False
try:
ftp.storbinary('STOR ' + name, f)
except ftplib.error_perm as err:
ScreenCloud.setError(err.message)
return False
ftp.quit()
f.close()
if self.url:
ScreenCloud.setUrl(self.url + ScreenCloud.formatFilename(name))
return True
def nameFormatEdited(self, nameFormat):
self.settingsDialog.group_location.label_example.setText(ScreenCloud.formatFilename(nameFormat))