root/branches/libffado-2.0/support/mixer-qt4/ffado_registration.py

Revision 1298, 6.3 kB (checked in by ppalmers, 13 years ago)

add Qt4 port of the mixer (only for audiofire and saffire ATM). needed since PyQt?3 doesn't support DBUS signals.

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