root/trunk/libffado/support/mixer/ffado_registration.py

Revision 1060, 6.0 kB (checked in by ppalmers, 16 years ago)

- implement (basic) user feedback (fixes #77)
- fix some small issues in the mixer code

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