Skip to content

Commit 9a291d4

Browse files
authored
Add files via upload
1 parent 85019fa commit 9a291d4

4 files changed

Lines changed: 263 additions & 0 deletions

File tree

icon.png

1.75 KB
Loading

main.py

Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
import ScreenCloud
2+
import json
3+
import traceback
4+
import urllib.request, urllib.error, urllib.parse
5+
6+
from PythonQt.QtCore import QSettings, QByteArray, QBuffer, QIODevice, QFile
7+
from PythonQt.QtGui import QWidget, QDialog
8+
from PythonQt.QtUiTools import QUiLoader
9+
10+
class TokenUploader():
11+
12+
def __init__(self):
13+
14+
self.uil = QUiLoader()
15+
self.loadSettings()
16+
17+
def showSettingsUI(self, parentWidget):
18+
19+
self.parentWidget = parentWidget
20+
self.settingsDialog = self.uil.load(QFile(workingDir + "/settings.ui"), parentWidget)
21+
22+
self.settingsDialog.group_screenshot.input_name.connect("textChanged(QString)", self.nameFormatEdited)
23+
self.settingsDialog.connect("accepted()", self.saveSettings)
24+
self.loadSettings()
25+
26+
self.settingsDialog.group_url.input_token.text = self.url_token
27+
self.settingsDialog.group_url.input_address.text = self.url_address
28+
self.settingsDialog.group_screenshot.input_name.text = self.name_format
29+
30+
self.settingsDialog.open()
31+
32+
def nameFormatEdited(self, name_format):
33+
34+
self.settingsDialog.group_screenshot.label_example.setText(ScreenCloud.formatFilename(name_format))
35+
36+
def loadSettings(self):
37+
38+
settings = QSettings()
39+
40+
settings.beginGroup("uploaders")
41+
settings.beginGroup("tokenupload")
42+
43+
self.url_token = settings.value("url-token", "")
44+
self.url_address = settings.value("url-address", "")
45+
self.name_format = settings.value("name-format", "Screenshot (%Y-%m-%d %H-%M-%S)")
46+
47+
settings.endGroup()
48+
settings.endGroup()
49+
50+
def saveSettings(self):
51+
52+
settings = QSettings()
53+
54+
settings.beginGroup("uploaders")
55+
settings.beginGroup("tokenupload")
56+
57+
settings.setValue("url-token", self.settingsDialog.group_url.input_token.text)
58+
settings.setValue("url-address", self.settingsDialog.group_url.input_address.text)
59+
settings.setValue("name-format", self.settingsDialog.group_screenshot.input_name.text)
60+
61+
settings.endGroup()
62+
settings.endGroup()
63+
64+
def isConfigured(self):
65+
66+
self.loadSettings()
67+
return not(not self.url_token or not self.url_address)
68+
69+
def getFilename(self):
70+
71+
self.loadSettings()
72+
return ScreenCloud.formatFilename(self.name_format)
73+
74+
def upload(self, screenshot, name):
75+
76+
self.loadSettings()
77+
78+
q_ba = QByteArray()
79+
q_buff = QBuffer(q_ba)
80+
81+
q_buff.open(QIODevice.WriteOnly)
82+
screenshot.save(q_buff, ScreenCloud.getScreenshotFormat())
83+
q_buff.close()
84+
85+
image = q_ba.toBase64().data()
86+
data = urllib.parse.urlencode({'token': self.url_token, 'name': name, 'image': image.decode('utf-8')})
87+
binary = data.encode('utf-8')
88+
89+
try:
90+
91+
reply = urllib.request.urlopen(self.url_address, binary)
92+
93+
response = reply.read().decode('utf-8')
94+
data = json.loads(response)
95+
error = data.get('error')
96+
url = data.get('href')
97+
98+
if error:
99+
100+
raise Exception(error)
101+
102+
ScreenCloud.setUrl(url)
103+
104+
except urllib.error.HTTPError as e:
105+
106+
ScreenCloud.setError("Error while connecting to: " + self.url_address + "\nError:\n" + e.fp.read())
107+
return False
108+
109+
except Exception as e:
110+
111+
try:
112+
113+
ScreenCloud.setError("Could not upload to: " + self.url_address + "\nError: {0}".format(str(e)))
114+
115+
except AttributeError:
116+
117+
ScreenCloud.setError("Unexpected error while uploading:\n" + traceback.format_exc())
118+
119+
return False
120+
121+
return True

metadata.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<metadata>
2+
<name>Token Uploader</name>
3+
<shortname>tokenuploader</shortname>
4+
<className>TokenUploader</className>
5+
<icon>icon.png</icon>
6+
<version>1.0</version>
7+
</metadata>

settings.ui

Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<ui version="4.0">
3+
<class>Dialog</class>
4+
<widget class="QDialog" name="Dialog">
5+
<property name="geometry">
6+
<rect>
7+
<x>0</x>
8+
<y>0</y>
9+
<width>360</width>
10+
<height>250</height>
11+
</rect>
12+
</property>
13+
<property name="windowTitle">
14+
<string>URL Token Upload - Settings</string>
15+
</property>
16+
<layout class="QVBoxLayout" name="verticalLayout">
17+
<item>
18+
<widget class="QGroupBox" name="group_url">
19+
<property name="title">
20+
<string>Url</string>
21+
</property>
22+
<layout class="QVBoxLayout" name="verticalLayout_2">
23+
<item>
24+
<layout class="QFormLayout" name="formLayout">
25+
<item row="0" column="0">
26+
<widget class="QLabel" name="label_token">
27+
<property name="text">
28+
<string>Token:</string>
29+
</property>
30+
</widget>
31+
</item>
32+
<item row="0" column="1">
33+
<widget class="QLineEdit" name="input_token">
34+
<property name="text">
35+
<string />
36+
</property>
37+
</widget>
38+
</item>
39+
<item row="1" column="0">
40+
<widget class="QLabel" name="label_address">
41+
<property name="text">
42+
<string>Address:</string>
43+
</property>
44+
</widget>
45+
</item>
46+
<item row="1" column="1">
47+
<widget class="QLineEdit" name="input_address">
48+
<property name="placeholderText">
49+
<string>http://example.com/upload</string>
50+
</property>
51+
</widget>
52+
</item>
53+
</layout>
54+
</item>
55+
</layout>
56+
</widget>
57+
</item>
58+
<item>
59+
<widget class="QGroupBox" name="group_screenshot">
60+
<property name="title">
61+
<string>Screenshot</string>
62+
</property>
63+
<layout class="QVBoxLayout" name="verticalLayout_3">
64+
<item>
65+
<layout class="QFormLayout" name="formLayout_2">
66+
<item row="0" column="0">
67+
<widget class="QLabel" name="label_name">
68+
<property name="text">
69+
<string>Name:</string>
70+
</property>
71+
</widget>
72+
</item>
73+
<item row="0" column="1">
74+
<widget class="QLineEdit" name="input_name">
75+
<property name="text">
76+
<string />
77+
</property>
78+
</widget>
79+
</item>
80+
<item row="1" column="0">
81+
<widget class="QLabel" name="label_result">
82+
<property name="text">
83+
<string>Result:</string>
84+
</property>
85+
</widget>
86+
</item>
87+
<item row="1" column="1">
88+
<widget class="QLabel" name="label_example">
89+
<property name="text">
90+
<string />
91+
</property>
92+
</widget>
93+
</item>
94+
</layout>
95+
</item>
96+
</layout>
97+
</widget>
98+
</item>
99+
<item>
100+
<widget class="QDialogButtonBox" name="buttonBox">
101+
<property name="orientation">
102+
<enum>Qt::Horizontal</enum>
103+
</property>
104+
<property name="standardButtons">
105+
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Save</set>
106+
</property>
107+
</widget>
108+
</item>
109+
</layout>
110+
</widget>
111+
<tabstops>
112+
<tabstop>input_token</tabstop>
113+
<tabstop>input_address</tabstop>
114+
<tabstop>input_attribute</tabstop>
115+
<tabstop>input_name</tabstop>
116+
<tabstop>buttonBox</tabstop>
117+
</tabstops>
118+
<resources />
119+
<connections>
120+
<connection>
121+
<sender>buttonBox</sender>
122+
<signal>accepted()</signal>
123+
<receiver>Dialog</receiver>
124+
<slot>accept()</slot>
125+
<hints />
126+
</connection>
127+
<connection>
128+
<sender>buttonBox</sender>
129+
<signal>rejected()</signal>
130+
<receiver>Dialog</receiver>
131+
<slot>reject()</slot>
132+
<hints />
133+
</connection>
134+
</connections>
135+
</ui>

0 commit comments

Comments
 (0)