|
7 | 7 | import sys |
8 | 8 | import gc |
9 | 9 | import re |
| 10 | +import time |
10 | 11 | import logging |
11 | 12 | from logging.handlers import RotatingFileHandler |
12 | 13 | import optparse |
@@ -85,6 +86,67 @@ def make_sql_logger(level=logging.INFO): |
85 | 86 | sql_log.addHandler(handler) |
86 | 87 |
|
87 | 88 |
|
| 89 | +def show_survey(): |
| 90 | + # If run for the first time, open a browser tab with a survey |
| 91 | + settings = QSettings() |
| 92 | + show_survey = settings.value("startup/show-survey", True, type=bool) |
| 93 | + if show_survey: |
| 94 | + question = QMessageBox( |
| 95 | + QMessageBox.Question, |
| 96 | + 'Orange Survey', |
| 97 | + 'We would like to know more about how our software is used.\n\n' |
| 98 | + 'Would you care to fill our short 1-minute survey?', |
| 99 | + QMessageBox.Yes | QMessageBox.No) |
| 100 | + question.setDefaultButton(QMessageBox.Yes) |
| 101 | + later = question.addButton('Ask again later', QMessageBox.NoRole) |
| 102 | + question.setEscapeButton(later) |
| 103 | + |
| 104 | + def handle_response(result): |
| 105 | + if result == QMessageBox.Yes: |
| 106 | + success = QDesktopServices.openUrl( |
| 107 | + QUrl("https://orange.biolab.si/survey/short.html")); |
| 108 | + settings.setValue("startup/show-survey", not success) |
| 109 | + else: |
| 110 | + settings.setValue("startup/show-survey", result != QMessageBox.No) |
| 111 | + |
| 112 | + question.finished.connect(handle_response) |
| 113 | + question.show() |
| 114 | + return question |
| 115 | + |
| 116 | + |
| 117 | +def check_for_updates(): |
| 118 | + settings = QSettings() |
| 119 | + check_updates = settings.value('startup/check-updates', True, type=bool) |
| 120 | + last_check_time = settings.value('startup/last-update-check-time', 0, type=int) |
| 121 | + ONE_DAY = 86400 |
| 122 | + if check_updates and time.time() - last_check_time > ONE_DAY: |
| 123 | + settings.setValue('startup/last-update-check-time', int(time.time())) |
| 124 | + from urllib.request import urlopen |
| 125 | + from distutils.version import LooseVersion |
| 126 | + from Orange.version import version as current |
| 127 | + try: |
| 128 | + latest = urlopen('https://orange.biolab.si/version', timeout=2).read().decode() |
| 129 | + except OSError: |
| 130 | + log.exception('Failed to check for updates') |
| 131 | + else: |
| 132 | + if LooseVersion(latest) > LooseVersion(current): |
| 133 | + question = QMessageBox( |
| 134 | + QMessageBox.Information, |
| 135 | + 'Orange Update Available', |
| 136 | + 'A newer version of Orange is available.<br><br>' |
| 137 | + '<b>Current version:</b> {}<br>' |
| 138 | + '<b>Latest version:</b> {}'.format(current, latest), |
| 139 | + textFormat=Qt.RichText, |
| 140 | + accepted=lambda: QDesktopServices.openUrl( |
| 141 | + QUrl("https://orange.biolab.si/download/"))) |
| 142 | + question.setDefaultButton( |
| 143 | + question.addButton('Download Now', question.AcceptRole)) |
| 144 | + question.setEscapeButton( |
| 145 | + question.addButton('Remind Later', question.RejectRole)) |
| 146 | + question.show() |
| 147 | + return question |
| 148 | + |
| 149 | + |
88 | 150 | def main(argv=None): |
89 | 151 | if argv is None: |
90 | 152 | argv = sys.argv |
@@ -328,29 +390,9 @@ def show_message(message): |
328 | 390 | open_requests[-1]) |
329 | 391 | canvas_window.load_scheme(open_requests[-1].toLocalFile()) |
330 | 392 |
|
331 | | - # If run for the first time, open a browser tab with a survey |
332 | | - show_survey = settings.value("startup/show-survey", True, type=bool) |
333 | | - if show_survey: |
334 | | - question = QMessageBox( |
335 | | - QMessageBox.Question, |
336 | | - 'Orange Survey', |
337 | | - 'We would like to know more about how our software is used.\n\n' |
338 | | - 'Would you care to fill our short 1-minute survey?', |
339 | | - QMessageBox.Yes | QMessageBox.No) |
340 | | - question.setDefaultButton(QMessageBox.Yes) |
341 | | - later = question.addButton('Ask again later', QMessageBox.NoRole) |
342 | | - question.setEscapeButton(later) |
343 | | - |
344 | | - def handle_response(result): |
345 | | - if result == QMessageBox.Yes: |
346 | | - success = QDesktopServices.openUrl( |
347 | | - QUrl("http://orange.biolab.si/survey/short.html")); |
348 | | - settings.setValue("startup/show-survey", not success) |
349 | | - else: |
350 | | - settings.setValue("startup/show-survey", result != QMessageBox.No) |
351 | | - |
352 | | - question.finished.connect(handle_response) |
353 | | - question.show() |
| 393 | + # local references prevent destruction |
| 394 | + _ = show_survey() |
| 395 | + __ = check_for_updates() |
354 | 396 |
|
355 | 397 | # Tee stdout and stderr into Output dock |
356 | 398 | log_view = canvas_window.log_view() |
|
0 commit comments