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

Revision 1367, 6.4 kB (checked in by ppalmers, 12 years ago)

use the python logging framework for the mixer debug messages (QT4 only)

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 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()
Note: See TracBrowser for help on using the browser.