1 |
import urllib |
---|
2 |
import ConfigParser, os |
---|
3 |
|
---|
4 |
from ffadomixer_config import REGISTER_URL, INI_FILE_PATH, FFADO_CONFIG_DIR |
---|
5 |
from PyQt4.QtGui import QMessageBox |
---|
6 |
from PyQt4.QtCore import QByteArray |
---|
7 |
|
---|
8 |
from ffado_regdialog import * |
---|
9 |
|
---|
10 |
import logging |
---|
11 |
log = logging.getLogger('registration') |
---|
12 |
|
---|
13 |
class ffado_registration: |
---|
14 |
def __init__(self, ffado_version, |
---|
15 |
guid, |
---|
16 |
vendor_id, |
---|
17 |
model_id, |
---|
18 |
vendor_string, |
---|
19 |
model_string): |
---|
20 |
# only use the section before the SVN mark |
---|
21 |
# we don't need to keep track of all SVN version changes |
---|
22 |
self.ffado_version = ffado_version.split('-')[0] |
---|
23 |
self.guid = guid |
---|
24 |
self.vendor_id = vendor_id |
---|
25 |
self.model_id = model_id |
---|
26 |
self.vendor_string = vendor_string |
---|
27 |
self.model_string = model_string |
---|
28 |
|
---|
29 |
#check if config file path exists, if not, create it |
---|
30 |
config_path = os.path.expanduser(FFADO_CONFIG_DIR) |
---|
31 |
if not os.path.exists(config_path): |
---|
32 |
os.makedirs(config_path) |
---|
33 |
|
---|
34 |
# parse the ini file |
---|
35 |
self.config_filename = os.path.expanduser(INI_FILE_PATH) |
---|
36 |
self.parser = ConfigParser.SafeConfigParser() |
---|
37 |
self.parser.read(self.config_filename) |
---|
38 |
self.section_name = "%s:%X" % (self.ffado_version, self.guid) |
---|
39 |
self.email = "(optional)" |
---|
40 |
if self.parser.has_section("history") \ |
---|
41 |
and self.parser.has_option("history", "email"): |
---|
42 |
self.email = self.parser.get("history", "email") |
---|
43 |
|
---|
44 |
def register_ffado_usage(self): |
---|
45 |
post_vals = {} |
---|
46 |
post_vals['guid'] = self.guid |
---|
47 |
post_vals['vendor_id'] = self.vendor_id |
---|
48 |
post_vals['model_id'] = self.model_id |
---|
49 |
post_vals['vendor_string'] = self.vendor_string |
---|
50 |
post_vals['model_string'] = self.model_string |
---|
51 |
post_vals['ffado_version'] = self.ffado_version |
---|
52 |
post_vals['email'] = self.email |
---|
53 |
|
---|
54 |
try: |
---|
55 |
response = urllib.urlopen(REGISTER_URL, |
---|
56 |
urllib.urlencode(post_vals)) |
---|
57 |
except: |
---|
58 |
log.error("failed, network error") |
---|
59 |
return (-1, "Network Error") |
---|
60 |
|
---|
61 |
lines = response.readlines() |
---|
62 |
|
---|
63 |
ok = False |
---|
64 |
errline = "Bad response from server" |
---|
65 |
for i in range(len(lines)): |
---|
66 |
if lines[i][0:10] == "RESULT: OK": |
---|
67 |
ok = True |
---|
68 |
elif lines[i][0:12] == "RESULT: FAIL": |
---|
69 |
ok = False |
---|
70 |
if len(lines)>i+1: |
---|
71 |
errline = lines[i+1] |
---|
72 |
if not ok: |
---|
73 |
log.info("registration failed %s" % errline) |
---|
74 |
return (-2, errline) |
---|
75 |
else: |
---|
76 |
return (0, "") |
---|
77 |
|
---|
78 |
def check_for(self, what): |
---|
79 |
if not self.parser.has_section(self.section_name): |
---|
80 |
return False |
---|
81 |
if not self.parser.has_option(self.section_name, what): |
---|
82 |
return False |
---|
83 |
return self.parser.getboolean(self.section_name, what) |
---|
84 |
|
---|
85 |
def check_if_already_registered(self): |
---|
86 |
return self.check_for("registered") |
---|
87 |
|
---|
88 |
def check_for_ignore(self): |
---|
89 |
return self.check_for("ignore") |
---|
90 |
|
---|
91 |
def mark(self, what, value): |
---|
92 |
if not self.parser.has_section(self.section_name): |
---|
93 |
self.parser.add_section(self.section_name) |
---|
94 |
self.parser.set(self.section_name, what, str(value)) |
---|
95 |
|
---|
96 |
def mark_version_registered(self): |
---|
97 |
self.mark("registered", True) |
---|
98 |
|
---|
99 |
def mark_ignore_version(self): |
---|
100 |
self.mark("ignore", True) |
---|
101 |
|
---|
102 |
def remember_email(self, email): |
---|
103 |
if not self.parser.has_section("history"): |
---|
104 |
self.parser.add_section("history") |
---|
105 |
self.parser.set("history", "email", str(email)) |
---|
106 |
|
---|
107 |
def check_for_registration(self): |
---|
108 |
|
---|
109 |
if self.check_for_ignore(): |
---|
110 |
log.debug("user requested to ignore registration") |
---|
111 |
else: |
---|
112 |
if self.check_if_already_registered(): |
---|
113 |
log.debug("version/GUID combo already registered") |
---|
114 |
else: |
---|
115 |
log.debug("show dialog...") |
---|
116 |
|
---|
117 |
dlg = ffadoRegDialog(self.vendor_string, "0x%X" % self.vendor_id, |
---|
118 |
self.model_string, "0x%X" % self.model_id, |
---|
119 |
"0x%016X" % self.guid, self.ffado_version, |
---|
120 |
self.email) |
---|
121 |
dlg.exec_() |
---|
122 |
|
---|
123 |
if dlg.choice == "neversend": |
---|
124 |
self.mark_ignore_version() |
---|
125 |
elif dlg.choice == "send": |
---|
126 |
asciiData = dlg.getEmail().toAscii() |
---|
127 |
self.email = asciiData.data() |
---|
128 |
self.remember_email(self.email) |
---|
129 |
|
---|
130 |
retval = self.register_ffado_usage() |
---|
131 |
msg = QMessageBox() |
---|
132 |
if retval[0] == 0: |
---|
133 |
log.debug("registration successful") |
---|
134 |
devinfomsg = "<p>Device: %s %s<br> Vendor/Model Id: %X/%X<br>Device GUID: %016X<br>FFADO Version: %s<br>E-Mail: %s</p>" % \ |
---|
135 |
(self.vendor_string, self.model_string, self.vendor_id, self.model_id, self.guid, self.ffado_version, self.email) |
---|
136 |
tmp = msg.question( msg, "Registration Successful", |
---|
137 |
"<qt><b>Thank you.</b>" + |
---|
138 |
"<p>The registration of the following information was successful:</p>" + |
---|
139 |
devinfomsg + |
---|
140 |
"</p>For this device you won't be asked to register again until you upgrade to a new version of FFADO.</p>", |
---|
141 |
QMessageBox.Ok ) |
---|
142 |
self.mark_version_registered() |
---|
143 |
else: |
---|
144 |
log.error("error: " + retval[1]) |
---|
145 |
tmp = msg.question( msg, "Registration Failed", |
---|
146 |
"<qt><b>The registration at ffado.org failed.</b>" + |
---|
147 |
"<p>Error message:</p><p>" + retval[1] + |
---|
148 |
"</p><p>Try again next time?</p></qt>", |
---|
149 |
QMessageBox.Yes, QMessageBox.No ) |
---|
150 |
if tmp == 4: |
---|
151 |
self.mark_ignore_version() |
---|
152 |
elif dlg.choice == "nosend": |
---|
153 |
pass |
---|
154 |
# write the updated config |
---|
155 |
f = open(self.config_filename, "w+") |
---|
156 |
self.parser.write(f) |
---|
157 |
f.close() |
---|