-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.py
More file actions
124 lines (78 loc) · 3.76 KB
/
main.py
File metadata and controls
124 lines (78 loc) · 3.76 KB
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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
import ScreenCloud
import json
import traceback
import urllib.request, urllib.error, urllib.parse
from PythonQt.QtCore import QSettings, QByteArray, QBuffer, QIODevice, QFile
from PythonQt.QtGui import QWidget, QDialog
from PythonQt.QtUiTools import QUiLoader
class TokenUploader():
def __init__(self):
self.uil = QUiLoader()
self.loadSettings()
def showSettingsUI(self, parentWidget):
self.parentWidget = parentWidget
self.settingsDialog = self.uil.load(QFile(workingDir + "/settings.ui"), parentWidget)
self.settingsDialog.group_screenshot.input_name.connect("textChanged(QString)", self.nameFormatEdited)
self.settingsDialog.connect("accepted()", self.saveSettings)
self.loadSettings()
self.settingsDialog.group_url.input_token.text = self.url_token
self.settingsDialog.group_url.input_address.text = self.url_address
self.settingsDialog.group_screenshot.input_name.text = self.name_format
self.settingsDialog.open()
def nameFormatEdited(self, name_format):
self.settingsDialog.group_screenshot.label_example.setText(ScreenCloud.formatFilename(name_format))
def loadSettings(self):
settings = QSettings()
settings.beginGroup("uploaders")
settings.beginGroup("tokenupload")
self.url_token = settings.value("url-token", "")
self.url_address = settings.value("url-address", "")
self.name_format = settings.value("name-format", "Screenshot (%Y-%m-%d %H-%M-%S)")
settings.endGroup()
settings.endGroup()
def saveSettings(self):
settings = QSettings()
settings.beginGroup("uploaders")
settings.beginGroup("tokenupload")
settings.setValue("url-token", self.settingsDialog.group_url.input_token.text)
settings.setValue("url-address", self.settingsDialog.group_url.input_address.text)
settings.setValue("name-format", self.settingsDialog.group_screenshot.input_name.text)
settings.endGroup()
settings.endGroup()
def isConfigured(self):
self.loadSettings()
return not(not self.url_token or not self.url_address)
def getFilename(self):
self.loadSettings()
return ScreenCloud.formatFilename(self.name_format)
def upload(self, screenshot, name):
self.loadSettings()
q_ba = QByteArray()
q_buff = QBuffer(q_ba)
q_buff.open(QIODevice.WriteOnly)
screenshot.save(q_buff, ScreenCloud.getScreenshotFormat())
q_buff.close()
image = q_ba.toBase64().data()
data = urllib.parse.urlencode({'token': self.url_token, 'name': name, 'image': image.decode('utf-8')})
binary = data.encode('utf-8')
req = urllib.request.Request(self.url_address, binary)
req.add_header('User-Agent', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36')
try:
reply = urllib.request.urlopen(req)
response = reply.read().decode('utf-8')
data = json.loads(response)
error = data.get('error')
url = data.get('href')
if error:
raise Exception(error)
ScreenCloud.setUrl(url)
except urllib.error.HTTPError as e:
ScreenCloud.setError("Error while connecting to: " + self.url_address + "\nError:\n" + e.fp.read())
return False
except Exception as e:
try:
ScreenCloud.setError("Could not upload to: " + self.url_address + "\nError: {0}".format(str(e)))
except AttributeError:
ScreenCloud.setError("Unexpected error while uploading:\n" + traceback.format_exc())
return False
return True