diff options
| -rw-r--r-- | bitbake/lib/bb/event.py | 16 | ||||
| -rwxr-xr-x | bitbake/lib/bb/ui/crumbs/builder.py | 47 | ||||
| -rw-r--r-- | bitbake/lib/bb/ui/crumbs/hig.py | 258 | ||||
| -rw-r--r-- | bitbake/lib/bb/ui/crumbs/hobeventhandler.py | 23 |
4 files changed, 273 insertions, 71 deletions
diff --git a/bitbake/lib/bb/event.py b/bitbake/lib/bb/event.py index 1889d09e1d..e41455d273 100644 --- a/bitbake/lib/bb/event.py +++ b/bitbake/lib/bb/event.py | |||
| @@ -566,3 +566,19 @@ class SanityCheckFailed(Event): | |||
| 566 | Event.__init__(self) | 566 | Event.__init__(self) |
| 567 | self._msg = msg | 567 | self._msg = msg |
| 568 | self._network_error = network_error | 568 | self._network_error = network_error |
| 569 | |||
| 570 | class NetworkTest(Event): | ||
| 571 | """ | ||
| 572 | Event to start network test | ||
| 573 | """ | ||
| 574 | |||
| 575 | class NetworkTestPassed(Event): | ||
| 576 | """ | ||
| 577 | Event to indicate network test has passed | ||
| 578 | """ | ||
| 579 | |||
| 580 | class NetworkTestFailed(Event): | ||
| 581 | """ | ||
| 582 | Event to indicate network test has failed | ||
| 583 | """ | ||
| 584 | |||
diff --git a/bitbake/lib/bb/ui/crumbs/builder.py b/bitbake/lib/bb/ui/crumbs/builder.py index 6ddc5b67fb..44e2aa51fb 100755 --- a/bitbake/lib/bb/ui/crumbs/builder.py +++ b/bitbake/lib/bb/ui/crumbs/builder.py | |||
| @@ -51,10 +51,10 @@ class Configuration: | |||
| 51 | 51 | ||
| 52 | @classmethod | 52 | @classmethod |
| 53 | def parse_proxy_string(cls, proxy): | 53 | def parse_proxy_string(cls, proxy): |
| 54 | pattern = "^\s*((http|https|ftp|git|cvs)://)?((\S+):(\S+)@)?(\S+):(\d+)/?" | 54 | pattern = "^\s*((http|https|ftp|git|cvs)://)?((\S+):(\S+)@)?([^\s:]+)(:(\d+))?/?" |
| 55 | match = re.search(pattern, proxy) | 55 | match = re.search(pattern, proxy) |
| 56 | if match: | 56 | if match: |
| 57 | return match.group(2), match.group(4), match.group(5), match.group(6), match.group(7) | 57 | return match.group(2), match.group(4), match.group(5), match.group(6), match.group(8) |
| 58 | else: | 58 | else: |
| 59 | return None, None, None, "", "" | 59 | return None, None, None, "", "" |
| 60 | 60 | ||
| @@ -82,10 +82,10 @@ class Configuration: | |||
| 82 | 82 | ||
| 83 | @classmethod | 83 | @classmethod |
| 84 | def make_proxy_string(cls, prot, user, passwd, host, port, default_prot=""): | 84 | def make_proxy_string(cls, prot, user, passwd, host, port, default_prot=""): |
| 85 | if host == None or host == "" or port == None or port == "": | 85 | if host == None or host == "":# or port == None or port == "": |
| 86 | return "" | 86 | return "" |
| 87 | 87 | ||
| 88 | return Configuration.make_host_string(prot, user, passwd, host, default_prot) + ":" + Configuration.make_port_string(port) | 88 | return Configuration.make_host_string(prot, user, passwd, host, default_prot) + (":" + Configuration.make_port_string(port) if port else "") |
| 89 | 89 | ||
| 90 | def __init__(self): | 90 | def __init__(self): |
| 91 | self.curr_mach = "" | 91 | self.curr_mach = "" |
| @@ -746,6 +746,20 @@ class Builder(gtk.Window): | |||
| 746 | self.previous_step = self.current_step | 746 | self.previous_step = self.current_step |
| 747 | self.current_step = next_step | 747 | self.current_step = next_step |
| 748 | 748 | ||
| 749 | def set_user_config_proxies(self): | ||
| 750 | if self.configuration.enable_proxy == True: | ||
| 751 | self.handler.set_http_proxy(self.configuration.combine_proxy("http")) | ||
| 752 | self.handler.set_https_proxy(self.configuration.combine_proxy("https")) | ||
| 753 | self.handler.set_ftp_proxy(self.configuration.combine_proxy("ftp")) | ||
| 754 | self.handler.set_git_proxy(self.configuration.combine_host_only("git"), self.configuration.combine_port_only("git")) | ||
| 755 | self.handler.set_cvs_proxy(self.configuration.combine_host_only("cvs"), self.configuration.combine_port_only("cvs")) | ||
| 756 | elif self.configuration.enable_proxy == False: | ||
| 757 | self.handler.set_http_proxy("") | ||
| 758 | self.handler.set_https_proxy("") | ||
| 759 | self.handler.set_ftp_proxy("") | ||
| 760 | self.handler.set_git_proxy("", "") | ||
| 761 | self.handler.set_cvs_proxy("", "") | ||
| 762 | |||
| 749 | def set_user_config(self): | 763 | def set_user_config(self): |
| 750 | self.handler.init_cooker() | 764 | self.handler.init_cooker() |
| 751 | # set bb layers | 765 | # set bb layers |
| @@ -767,19 +781,7 @@ class Builder(gtk.Window): | |||
| 767 | self.handler.set_extra_config(self.configuration.extra_setting) | 781 | self.handler.set_extra_config(self.configuration.extra_setting) |
| 768 | self.handler.set_extra_inherit("packageinfo") | 782 | self.handler.set_extra_inherit("packageinfo") |
| 769 | self.handler.set_extra_inherit("image_types") | 783 | self.handler.set_extra_inherit("image_types") |
| 770 | # set proxies | 784 | self.set_user_config_proxies() |
| 771 | if self.configuration.enable_proxy == True: | ||
| 772 | self.handler.set_http_proxy(self.configuration.combine_proxy("http")) | ||
| 773 | self.handler.set_https_proxy(self.configuration.combine_proxy("https")) | ||
| 774 | self.handler.set_ftp_proxy(self.configuration.combine_proxy("ftp")) | ||
| 775 | self.handler.set_git_proxy(self.configuration.combine_host_only("git"), self.configuration.combine_port_only("git")) | ||
| 776 | self.handler.set_cvs_proxy(self.configuration.combine_host_only("cvs"), self.configuration.combine_port_only("cvs")) | ||
| 777 | elif self.configuration.enable_proxy == False: | ||
| 778 | self.handler.set_http_proxy("") | ||
| 779 | self.handler.set_https_proxy("") | ||
| 780 | self.handler.set_ftp_proxy("") | ||
| 781 | self.handler.set_git_proxy("", "") | ||
| 782 | self.handler.set_cvs_proxy("", "") | ||
| 783 | 785 | ||
| 784 | def update_recipe_model(self, selected_image, selected_recipes): | 786 | def update_recipe_model(self, selected_image, selected_recipes): |
| 785 | self.recipe_model.set_selected_image(selected_image) | 787 | self.recipe_model.set_selected_image(selected_image) |
| @@ -1310,7 +1312,8 @@ class Builder(gtk.Window): | |||
| 1310 | parent = self, | 1312 | parent = self, |
| 1311 | flags = gtk.DIALOG_MODAL | 1313 | flags = gtk.DIALOG_MODAL |
| 1312 | | gtk.DIALOG_DESTROY_WITH_PARENT | 1314 | | gtk.DIALOG_DESTROY_WITH_PARENT |
| 1313 | | gtk.DIALOG_NO_SEPARATOR) | 1315 | | gtk.DIALOG_NO_SEPARATOR, |
| 1316 | handler = self.handler) | ||
| 1314 | button = dialog.add_button("Cancel", gtk.RESPONSE_NO) | 1317 | button = dialog.add_button("Cancel", gtk.RESPONSE_NO) |
| 1315 | HobAltButton.style_button(button) | 1318 | HobAltButton.style_button(button) |
| 1316 | button = dialog.add_button("Save", gtk.RESPONSE_YES) | 1319 | button = dialog.add_button("Save", gtk.RESPONSE_YES) |
| @@ -1323,6 +1326,14 @@ class Builder(gtk.Window): | |||
| 1323 | self.configuration = dialog.configuration | 1326 | self.configuration = dialog.configuration |
| 1324 | self.save_defaults() # remember settings | 1327 | self.save_defaults() # remember settings |
| 1325 | settings_changed = dialog.settings_changed | 1328 | settings_changed = dialog.settings_changed |
| 1329 | if dialog.proxy_settings_changed: | ||
| 1330 | self.set_user_config_proxies() | ||
| 1331 | elif dialog.proxy_test_ran: | ||
| 1332 | # The user might have modified the proxies in the "Proxy" | ||
| 1333 | # tab, which in turn made the proxy settings modify in bb. | ||
| 1334 | # If "Cancel" was pressed, restore the previous proxy | ||
| 1335 | # settings inside bb. | ||
| 1336 | self.set_user_config_proxies() | ||
| 1326 | dialog.destroy() | 1337 | dialog.destroy() |
| 1327 | return response == gtk.RESPONSE_YES, settings_changed | 1338 | return response == gtk.RESPONSE_YES, settings_changed |
| 1328 | 1339 | ||
diff --git a/bitbake/lib/bb/ui/crumbs/hig.py b/bitbake/lib/bb/ui/crumbs/hig.py index ccd9f39a00..b3aea92fa8 100644 --- a/bitbake/lib/bb/ui/crumbs/hig.py +++ b/bitbake/lib/bb/ui/crumbs/hig.py | |||
| @@ -319,9 +319,16 @@ class SimpleSettingsDialog (CrumbsDialog, SettingsUIHelper): | |||
| 319 | PROXIES_PAGE_ID, | 319 | PROXIES_PAGE_ID, |
| 320 | OTHERS_PAGE_ID) = range(4) | 320 | OTHERS_PAGE_ID) = range(4) |
| 321 | 321 | ||
| 322 | (TEST_NETWORK_NONE, | ||
| 323 | TEST_NETWORK_INITIAL, | ||
| 324 | TEST_NETWORK_RUNNING, | ||
| 325 | TEST_NETWORK_PASSED, | ||
| 326 | TEST_NETWORK_FAILED, | ||
| 327 | TEST_NETWORK_CANCELED) = range(6) | ||
| 328 | |||
| 322 | def __init__(self, title, configuration, all_image_types, | 329 | def __init__(self, title, configuration, all_image_types, |
| 323 | all_package_formats, all_distros, all_sdk_machines, | 330 | all_package_formats, all_distros, all_sdk_machines, |
| 324 | max_threads, parent, flags, buttons=None): | 331 | max_threads, parent, flags, handler, buttons=None): |
| 325 | super(SimpleSettingsDialog, self).__init__(title, parent, flags, buttons) | 332 | super(SimpleSettingsDialog, self).__init__(title, parent, flags, buttons) |
| 326 | 333 | ||
| 327 | # class members from other objects | 334 | # class members from other objects |
| @@ -348,7 +355,11 @@ class SimpleSettingsDialog (CrumbsDialog, SettingsUIHelper): | |||
| 348 | self.image_types_checkbuttons = {} | 355 | self.image_types_checkbuttons = {} |
| 349 | 356 | ||
| 350 | self.md5 = self.config_md5() | 357 | self.md5 = self.config_md5() |
| 358 | self.proxy_md5 = self.config_proxy_md5() | ||
| 351 | self.settings_changed = False | 359 | self.settings_changed = False |
| 360 | self.proxy_settings_changed = False | ||
| 361 | self.handler = handler | ||
| 362 | self.proxy_test_ran = False | ||
| 352 | 363 | ||
| 353 | # create visual elements on the dialog | 364 | # create visual elements on the dialog |
| 354 | self.create_visual_elements() | 365 | self.create_visual_elements() |
| @@ -357,12 +368,15 @@ class SimpleSettingsDialog (CrumbsDialog, SettingsUIHelper): | |||
| 357 | def _get_sorted_value(self, var): | 368 | def _get_sorted_value(self, var): |
| 358 | return " ".join(sorted(str(var).split())) + "\n" | 369 | return " ".join(sorted(str(var).split())) + "\n" |
| 359 | 370 | ||
| 360 | def config_md5(self): | 371 | def config_proxy_md5(self): |
| 361 | data = "" | 372 | data = ("ENABLE_PROXY: " + self._get_sorted_value(self.configuration.enable_proxy)) |
| 362 | data += ("ENABLE_PROXY: " + self._get_sorted_value(self.configuration.enable_proxy)) | ||
| 363 | if self.configuration.enable_proxy: | 373 | if self.configuration.enable_proxy: |
| 364 | for protocol in self.configuration.proxies.keys(): | 374 | for protocol in self.configuration.proxies.keys(): |
| 365 | data += (protocol + ": " + self._get_sorted_value(self.configuration.combine_proxy(protocol))) | 375 | data += (protocol + ": " + self._get_sorted_value(self.configuration.combine_proxy(protocol))) |
| 376 | return hashlib.md5(data).hexdigest() | ||
| 377 | |||
| 378 | def config_md5(self): | ||
| 379 | data = "" | ||
| 366 | for key in self.configuration.extra_setting.keys(): | 380 | for key in self.configuration.extra_setting.keys(): |
| 367 | data += (key + ": " + self._get_sorted_value(self.configuration.extra_setting[key])) | 381 | data += (key + ": " + self._get_sorted_value(self.configuration.extra_setting[key])) |
| 368 | return hashlib.md5(data).hexdigest() | 382 | return hashlib.md5(data).hexdigest() |
| @@ -383,28 +397,25 @@ class SimpleSettingsDialog (CrumbsDialog, SettingsUIHelper): | |||
| 383 | self.refresh_proxy_components() | 397 | self.refresh_proxy_components() |
| 384 | dialog.destroy() | 398 | dialog.destroy() |
| 385 | 399 | ||
| 386 | def gen_proxy_entry_widget(self, protocol, parent, need_button=True): | 400 | def gen_proxy_entry_widget(self, protocol, parent, need_button=True, line=0): |
| 387 | hbox = gtk.HBox(False, 12) | ||
| 388 | |||
| 389 | label = gtk.Label(protocol.upper() + " proxy") | 401 | label = gtk.Label(protocol.upper() + " proxy") |
| 390 | hbox.pack_start(label, expand=True, fill=False, padding=24) | 402 | self.proxy_table.attach(label, 0, 1, line, line+1, xpadding=24) |
| 391 | 403 | ||
| 392 | proxy_entry = gtk.Entry() | 404 | proxy_entry = gtk.Entry() |
| 393 | proxy_entry.set_size_request(300, -1) | 405 | proxy_entry.set_size_request(300, -1) |
| 394 | hbox.pack_start(proxy_entry, expand=False, fill=False) | 406 | self.proxy_table.attach(proxy_entry, 1, 2, line, line+1, ypadding=4) |
| 395 | 407 | ||
| 396 | hbox.pack_start(gtk.Label(":"), expand=False, fill=False) | 408 | self.proxy_table.attach(gtk.Label(":"), 2, 3, line, line+1, xpadding=12, ypadding=4) |
| 397 | 409 | ||
| 398 | port_entry = gtk.Entry() | 410 | port_entry = gtk.Entry() |
| 399 | port_entry.set_size_request(60, -1) | 411 | port_entry.set_size_request(60, -1) |
| 400 | hbox.pack_start(port_entry, expand=False, fill=False) | 412 | self.proxy_table.attach(port_entry, 3, 4, line, line+1, ypadding=4) |
| 401 | 413 | ||
| 402 | details_button = HobAltButton("Details") | 414 | details_button = HobAltButton("Details") |
| 403 | details_button.connect("clicked", self.details_cb, parent, protocol) | 415 | details_button.connect("clicked", self.details_cb, parent, protocol) |
| 404 | hbox.pack_start(details_button, expand=False, fill=False) | 416 | self.proxy_table.attach(details_button, 4, 5, line, line+1, xpadding=4, yoptions=gtk.EXPAND) |
| 405 | 417 | ||
| 406 | hbox.show_all() | 418 | return proxy_entry, port_entry, details_button |
| 407 | return hbox, proxy_entry, port_entry, details_button | ||
| 408 | 419 | ||
| 409 | def refresh_proxy_components(self): | 420 | def refresh_proxy_components(self): |
| 410 | self.same_checkbox.set_sensitive(self.configuration.enable_proxy) | 421 | self.same_checkbox.set_sensitive(self.configuration.enable_proxy) |
| @@ -449,18 +460,53 @@ class SimpleSettingsDialog (CrumbsDialog, SettingsUIHelper): | |||
| 449 | self.cvs_proxy_port.set_sensitive(self.configuration.enable_proxy and (not self.configuration.same_proxy)) | 460 | self.cvs_proxy_port.set_sensitive(self.configuration.enable_proxy and (not self.configuration.same_proxy)) |
| 450 | self.cvs_proxy_details.set_sensitive(self.configuration.enable_proxy and (not self.configuration.same_proxy)) | 461 | self.cvs_proxy_details.set_sensitive(self.configuration.enable_proxy and (not self.configuration.same_proxy)) |
| 451 | 462 | ||
| 463 | if self.configuration.same_proxy: | ||
| 464 | if self.http_proxy.get_text(): | ||
| 465 | [w.set_text(self.http_proxy.get_text()) for w in self.same_proxy_addresses] | ||
| 466 | if self.http_proxy_port.get_text(): | ||
| 467 | [w.set_text(self.http_proxy_port.get_text()) for w in self.same_proxy_ports] | ||
| 468 | |||
| 452 | def proxy_checkbox_toggled_cb(self, button): | 469 | def proxy_checkbox_toggled_cb(self, button): |
| 453 | self.configuration.enable_proxy = self.proxy_checkbox.get_active() | 470 | self.configuration.enable_proxy = self.proxy_checkbox.get_active() |
| 454 | if not self.configuration.enable_proxy: | 471 | if not self.configuration.enable_proxy: |
| 455 | self.configuration.same_proxy = False | 472 | self.configuration.same_proxy = False |
| 456 | self.same_checkbox.set_active(self.configuration.same_proxy) | 473 | self.same_checkbox.set_active(self.configuration.same_proxy) |
| 474 | self.save_proxy_data() | ||
| 457 | self.refresh_proxy_components() | 475 | self.refresh_proxy_components() |
| 458 | 476 | ||
| 459 | def same_checkbox_toggled_cb(self, button): | 477 | def same_checkbox_toggled_cb(self, button): |
| 460 | self.configuration.same_proxy = self.same_checkbox.get_active() | 478 | self.configuration.same_proxy = self.same_checkbox.get_active() |
| 479 | self.save_proxy_data() | ||
| 461 | self.refresh_proxy_components() | 480 | self.refresh_proxy_components() |
| 462 | 481 | ||
| 463 | def response_cb(self, dialog, response_id): | 482 | def save_proxy_data(self): |
| 483 | self.configuration.split_proxy("http", self.http_proxy.get_text() + ":" + self.http_proxy_port.get_text()) | ||
| 484 | if self.configuration.same_proxy: | ||
| 485 | self.configuration.split_proxy("https", self.http_proxy.get_text() + ":" + self.http_proxy_port.get_text()) | ||
| 486 | self.configuration.split_proxy("ftp", self.http_proxy.get_text() + ":" + self.http_proxy_port.get_text()) | ||
| 487 | self.configuration.split_proxy("git", self.http_proxy.get_text() + ":" + self.http_proxy_port.get_text()) | ||
| 488 | self.configuration.split_proxy("cvs", self.http_proxy.get_text() + ":" + self.http_proxy_port.get_text()) | ||
| 489 | else: | ||
| 490 | self.configuration.split_proxy("https", self.https_proxy.get_text() + ":" + self.https_proxy_port.get_text()) | ||
| 491 | self.configuration.split_proxy("ftp", self.ftp_proxy.get_text() + ":" + self.ftp_proxy_port.get_text()) | ||
| 492 | self.configuration.split_proxy("git", self.git_proxy.get_text() + ":" + self.git_proxy_port.get_text()) | ||
| 493 | self.configuration.split_proxy("cvs", self.cvs_proxy.get_text() + ":" + self.cvs_proxy_port.get_text()) | ||
| 494 | |||
| 495 | def response_cb(self, dialog, response_id): | ||
| 496 | if response_id == gtk.RESPONSE_YES: | ||
| 497 | # Check that all proxy entries have a corresponding port | ||
| 498 | for proxy, port in zip(self.all_proxy_addresses, self.all_proxy_ports): | ||
| 499 | if proxy.get_text() and not port.get_text(): | ||
| 500 | lbl = "<b>Enter all port numbers</b>\n\n" | ||
| 501 | msg = "Proxy servers require a port number. Please make sure you have entered a port number for each proxy server." | ||
| 502 | dialog = CrumbsMessageDialog(self, lbl, gtk.STOCK_DIALOG_WARNING, msg) | ||
| 503 | button = dialog.add_button("Close", gtk.RESPONSE_OK) | ||
| 504 | HobButton.style_button(button) | ||
| 505 | response = dialog.run() | ||
| 506 | dialog.destroy() | ||
| 507 | self.emit_stop_by_name("response") | ||
| 508 | return | ||
| 509 | |||
| 464 | self.configuration.dldir = self.dldir_text.get_text() | 510 | self.configuration.dldir = self.dldir_text.get_text() |
| 465 | self.configuration.sstatedir = self.sstatedir_text.get_text() | 511 | self.configuration.sstatedir = self.sstatedir_text.get_text() |
| 466 | self.configuration.sstatemirror = "" | 512 | self.configuration.sstatemirror = "" |
| @@ -473,19 +519,7 @@ class SimpleSettingsDialog (CrumbsDialog, SettingsUIHelper): | |||
| 473 | self.configuration.sstatemirror += smirror | 519 | self.configuration.sstatemirror += smirror |
| 474 | self.configuration.bbthread = self.bb_spinner.get_value_as_int() | 520 | self.configuration.bbthread = self.bb_spinner.get_value_as_int() |
| 475 | self.configuration.pmake = self.pmake_spinner.get_value_as_int() | 521 | self.configuration.pmake = self.pmake_spinner.get_value_as_int() |
| 476 | 522 | self.save_proxy_data() | |
| 477 | self.configuration.split_proxy("http", self.http_proxy.get_text() + ":" + self.http_proxy_port.get_text()) | ||
| 478 | if self.configuration.same_proxy: | ||
| 479 | self.configuration.split_proxy("https", self.http_proxy.get_text() + ":" + self.http_proxy_port.get_text()) | ||
| 480 | self.configuration.split_proxy("ftp", self.http_proxy.get_text() + ":" + self.http_proxy_port.get_text()) | ||
| 481 | self.configuration.split_proxy("git", self.http_proxy.get_text() + ":" + self.http_proxy_port.get_text()) | ||
| 482 | self.configuration.split_proxy("cvs", self.http_proxy.get_text() + ":" + self.http_proxy_port.get_text()) | ||
| 483 | else: | ||
| 484 | self.configuration.split_proxy("https", self.https_proxy.get_text() + ":" + self.https_proxy_port.get_text()) | ||
| 485 | self.configuration.split_proxy("ftp", self.ftp_proxy.get_text() + ":" + self.ftp_proxy_port.get_text()) | ||
| 486 | self.configuration.split_proxy("git", self.git_proxy.get_text() + ":" + self.git_proxy_port.get_text()) | ||
| 487 | self.configuration.split_proxy("cvs", self.cvs_proxy.get_text() + ":" + self.cvs_proxy_port.get_text()) | ||
| 488 | |||
| 489 | self.configuration.extra_setting = {} | 523 | self.configuration.extra_setting = {} |
| 490 | it = self.setting_store.get_iter_first() | 524 | it = self.setting_store.get_iter_first() |
| 491 | while it: | 525 | while it: |
| @@ -496,6 +530,7 @@ class SimpleSettingsDialog (CrumbsDialog, SettingsUIHelper): | |||
| 496 | 530 | ||
| 497 | md5 = self.config_md5() | 531 | md5 = self.config_md5() |
| 498 | self.settings_changed = (self.md5 != md5) | 532 | self.settings_changed = (self.md5 != md5) |
| 533 | self.proxy_settings_changed = (self.proxy_md5 != self.config_proxy_md5()) | ||
| 499 | 534 | ||
| 500 | def create_build_environment_page(self): | 535 | def create_build_environment_page(self): |
| 501 | advanced_vbox = gtk.VBox(False, 6) | 536 | advanced_vbox = gtk.VBox(False, 6) |
| @@ -608,10 +643,91 @@ class SimpleSettingsDialog (CrumbsDialog, SettingsUIHelper): | |||
| 608 | self.show_all() | 643 | self.show_all() |
| 609 | self.nb.set_current_page(page_num) | 644 | self.nb.set_current_page(page_num) |
| 610 | 645 | ||
| 646 | def test_proxy_ended(self, passed): | ||
| 647 | self.proxy_test_running = False | ||
| 648 | self.set_test_proxy_state(self.TEST_NETWORK_PASSED if passed else self.TEST_NETWORK_FAILED) | ||
| 649 | self.set_sensitive(True) | ||
| 650 | self.refresh_proxy_components() | ||
| 611 | 651 | ||
| 612 | def create_proxy_page(self): | 652 | def timer_func(self): |
| 653 | self.test_proxy_progress.pulse() | ||
| 654 | return self.proxy_test_running | ||
| 655 | |||
| 656 | def test_network_button_cb(self, b): | ||
| 657 | self.set_test_proxy_state(self.TEST_NETWORK_RUNNING) | ||
| 658 | self.set_sensitive(False) | ||
| 659 | self.save_proxy_data() | ||
| 660 | if self.configuration.enable_proxy == True: | ||
| 661 | self.handler.set_http_proxy(self.configuration.combine_proxy("http")) | ||
| 662 | self.handler.set_https_proxy(self.configuration.combine_proxy("https")) | ||
| 663 | self.handler.set_ftp_proxy(self.configuration.combine_proxy("ftp")) | ||
| 664 | self.handler.set_git_proxy(self.configuration.combine_host_only("git"), self.configuration.combine_port_only("git")) | ||
| 665 | self.handler.set_cvs_proxy(self.configuration.combine_host_only("cvs"), self.configuration.combine_port_only("cvs")) | ||
| 666 | elif self.configuration.enable_proxy == False: | ||
| 667 | self.handler.set_http_proxy("") | ||
| 668 | self.handler.set_https_proxy("") | ||
| 669 | self.handler.set_ftp_proxy("") | ||
| 670 | self.handler.set_git_proxy("", "") | ||
| 671 | self.handler.set_cvs_proxy("", "") | ||
| 672 | self.proxy_test_ran = True | ||
| 673 | self.proxy_test_running = True | ||
| 674 | gobject.timeout_add(100, self.timer_func) | ||
| 675 | self.handler.trigger_network_test() | ||
| 676 | |||
| 677 | def test_proxy_focus_event(self, w, direction): | ||
| 678 | if self.test_proxy_state in [self.TEST_NETWORK_PASSED, self.TEST_NETWORK_FAILED]: | ||
| 679 | self.set_test_proxy_state(self.TEST_NETWORK_INITIAL) | ||
| 680 | return False | ||
| 681 | |||
| 682 | def http_proxy_changed(self, e): | ||
| 683 | if not self.configuration.same_proxy: | ||
| 684 | return | ||
| 685 | if e == self.http_proxy: | ||
| 686 | [w.set_text(self.http_proxy.get_text()) for w in self.same_proxy_addresses] | ||
| 687 | else: | ||
| 688 | [w.set_text(self.http_proxy_port.get_text()) for w in self.same_proxy_ports] | ||
| 689 | |||
| 690 | def proxy_address_focus_out_event(self, w, direction): | ||
| 691 | text = w.get_text() | ||
| 692 | if not text: | ||
| 693 | return False | ||
| 694 | if text.find("//") == -1: | ||
| 695 | w.set_text("http://" + text) | ||
| 696 | return False | ||
| 697 | |||
| 698 | def set_test_proxy_state(self, state): | ||
| 699 | if self.test_proxy_state == state: | ||
| 700 | return | ||
| 701 | [self.proxy_table.remove(w) for w in self.test_gui_elements] | ||
| 702 | if state == self.TEST_NETWORK_INITIAL: | ||
| 703 | self.proxy_table.attach(self.test_network_button, 1, 2, 5, 6) | ||
| 704 | self.test_network_button.show() | ||
| 705 | elif state == self.TEST_NETWORK_RUNNING: | ||
| 706 | self.test_proxy_progress.set_rcstyle("running") | ||
| 707 | self.test_proxy_progress.set_text("Testing network configuration") | ||
| 708 | self.proxy_table.attach(self.test_proxy_progress, 0, 5, 5, 6, xpadding=4) | ||
| 709 | self.test_proxy_progress.show() | ||
| 710 | else: # passed or failed | ||
| 711 | self.dummy_progress.update(1.0) | ||
| 712 | if state == self.TEST_NETWORK_PASSED: | ||
| 713 | self.dummy_progress.set_text("Your network is properly configured") | ||
| 714 | self.dummy_progress.set_rcstyle("running") | ||
| 715 | else: | ||
| 716 | self.dummy_progress.set_text("Network test failed") | ||
| 717 | self.dummy_progress.set_rcstyle("fail") | ||
| 718 | self.proxy_table.attach(self.dummy_progress, 0, 4, 5, 6) | ||
| 719 | self.proxy_table.attach(self.retest_network_button, 4, 5, 5, 6, xpadding=4) | ||
| 720 | self.dummy_progress.show() | ||
| 721 | self.retest_network_button.show() | ||
| 722 | self.test_proxy_state = state | ||
| 723 | |||
| 724 | def create_network_page(self): | ||
| 613 | advanced_vbox = gtk.VBox(False, 6) | 725 | advanced_vbox = gtk.VBox(False, 6) |
| 614 | advanced_vbox.set_border_width(6) | 726 | advanced_vbox.set_border_width(6) |
| 727 | self.same_proxy_addresses = [] | ||
| 728 | self.same_proxy_ports = [] | ||
| 729 | self.all_proxy_ports = [] | ||
| 730 | self.all_proxy_addresses = [] | ||
| 615 | 731 | ||
| 616 | sub_vbox = gtk.VBox(False, 6) | 732 | sub_vbox = gtk.VBox(False, 6) |
| 617 | advanced_vbox.pack_start(sub_vbox, expand=False, fill=False) | 733 | advanced_vbox.pack_start(sub_vbox, expand=False, fill=False) |
| @@ -623,42 +739,77 @@ class SimpleSettingsDialog (CrumbsDialog, SettingsUIHelper): | |||
| 623 | hbox.pack_start(info, expand=False, fill=False) | 739 | hbox.pack_start(info, expand=False, fill=False) |
| 624 | sub_vbox.pack_start(hbox, expand=False, fill=False) | 740 | sub_vbox.pack_start(hbox, expand=False, fill=False) |
| 625 | 741 | ||
| 626 | self.direct_checkbox = gtk.RadioButton(None, "Direct internet connection") | 742 | proxy_test_focus = [] |
| 743 | self.direct_checkbox = gtk.RadioButton(None, "Direct network connection") | ||
| 744 | proxy_test_focus.append(self.direct_checkbox) | ||
| 627 | self.direct_checkbox.set_tooltip_text("Check this box to use a direct internet connection with no proxy") | 745 | self.direct_checkbox.set_tooltip_text("Check this box to use a direct internet connection with no proxy") |
| 628 | self.direct_checkbox.set_active(not self.configuration.enable_proxy) | 746 | self.direct_checkbox.set_active(not self.configuration.enable_proxy) |
| 629 | sub_vbox.pack_start(self.direct_checkbox, expand=False, fill=False) | 747 | sub_vbox.pack_start(self.direct_checkbox, expand=False, fill=False) |
| 630 | 748 | ||
| 631 | self.proxy_checkbox = gtk.RadioButton(self.direct_checkbox, "Manual proxy configuration") | 749 | self.proxy_checkbox = gtk.RadioButton(self.direct_checkbox, "Manual proxy configuration") |
| 750 | proxy_test_focus.append(self.proxy_checkbox) | ||
| 632 | self.proxy_checkbox.set_tooltip_text("Check this box to manually set up a specific proxy") | 751 | self.proxy_checkbox.set_tooltip_text("Check this box to manually set up a specific proxy") |
| 633 | self.proxy_checkbox.set_active(self.configuration.enable_proxy) | 752 | self.proxy_checkbox.set_active(self.configuration.enable_proxy) |
| 634 | sub_vbox.pack_start(self.proxy_checkbox, expand=False, fill=False) | 753 | sub_vbox.pack_start(self.proxy_checkbox, expand=False, fill=False) |
| 635 | 754 | ||
| 636 | self.same_checkbox = gtk.CheckButton("Use the same proxy for all protocols") | 755 | self.same_checkbox = gtk.CheckButton("Use the HTTP proxy for all protocols") |
| 756 | proxy_test_focus.append(self.same_checkbox) | ||
| 637 | self.same_checkbox.set_tooltip_text("Check this box to use the HTTP proxy for all five proxies") | 757 | self.same_checkbox.set_tooltip_text("Check this box to use the HTTP proxy for all five proxies") |
| 638 | self.same_checkbox.set_active(self.configuration.same_proxy) | 758 | self.same_checkbox.set_active(self.configuration.same_proxy) |
| 639 | hbox = gtk.HBox(False, 12) | 759 | hbox = gtk.HBox(False, 12) |
| 640 | hbox.pack_start(self.same_checkbox, expand=False, fill=False, padding=24) | 760 | hbox.pack_start(self.same_checkbox, expand=False, fill=False, padding=24) |
| 641 | sub_vbox.pack_start(hbox, expand=False, fill=False) | 761 | sub_vbox.pack_start(hbox, expand=False, fill=False) |
| 642 | 762 | ||
| 643 | proxy_widget, self.http_proxy, self.http_proxy_port, self.http_proxy_details = self.gen_proxy_entry_widget( | 763 | self.proxy_table = gtk.Table(6, 5, False) |
| 644 | "http", self, True) | 764 | self.http_proxy, self.http_proxy_port, self.http_proxy_details = self.gen_proxy_entry_widget( |
| 645 | sub_vbox.pack_start(proxy_widget, expand=False, fill=False) | 765 | "http", self, True, 0) |
| 646 | 766 | proxy_test_focus +=[self.http_proxy, self.http_proxy_port] | |
| 647 | proxy_widget, self.https_proxy, self.https_proxy_port, self.https_proxy_details = self.gen_proxy_entry_widget( | 767 | self.http_proxy.connect("changed", self.http_proxy_changed) |
| 648 | "https", self, True) | 768 | self.http_proxy_port.connect("changed", self.http_proxy_changed) |
| 649 | sub_vbox.pack_start(proxy_widget, expand=False, fill=False) | 769 | |
| 650 | 770 | self.https_proxy, self.https_proxy_port, self.https_proxy_details = self.gen_proxy_entry_widget( | |
| 651 | proxy_widget, self.ftp_proxy, self.ftp_proxy_port, self.ftp_proxy_details = self.gen_proxy_entry_widget( | 771 | "https", self, True, 1) |
| 652 | "ftp", self, True) | 772 | proxy_test_focus += [self.https_proxy, self.https_proxy_port] |
| 653 | sub_vbox.pack_start(proxy_widget, expand=False, fill=False) | 773 | self.same_proxy_addresses.append(self.https_proxy) |
| 654 | 774 | self.same_proxy_ports.append(self.https_proxy_port) | |
| 655 | proxy_widget, self.git_proxy, self.git_proxy_port, self.git_proxy_details = self.gen_proxy_entry_widget( | 775 | |
| 656 | "git", self, True) | 776 | self.ftp_proxy, self.ftp_proxy_port, self.ftp_proxy_details = self.gen_proxy_entry_widget( |
| 657 | sub_vbox.pack_start(proxy_widget, expand=False, fill=False) | 777 | "ftp", self, True, 2) |
| 658 | 778 | proxy_test_focus += [self.ftp_proxy, self.ftp_proxy_port] | |
| 659 | proxy_widget, self.cvs_proxy, self.cvs_proxy_port, self.cvs_proxy_details = self.gen_proxy_entry_widget( | 779 | self.same_proxy_addresses.append(self.ftp_proxy) |
| 660 | "cvs", self, True) | 780 | self.same_proxy_ports.append(self.ftp_proxy_port) |
| 661 | sub_vbox.pack_start(proxy_widget, expand=False, fill=False) | 781 | |
| 782 | self.git_proxy, self.git_proxy_port, self.git_proxy_details = self.gen_proxy_entry_widget( | ||
| 783 | "git", self, True, 3) | ||
| 784 | proxy_test_focus += [self.git_proxy, self.git_proxy_port] | ||
| 785 | self.same_proxy_addresses.append(self.git_proxy) | ||
| 786 | self.same_proxy_ports.append(self.git_proxy_port) | ||
| 787 | |||
| 788 | self.cvs_proxy, self.cvs_proxy_port, self.cvs_proxy_details = self.gen_proxy_entry_widget( | ||
| 789 | "cvs", self, True, 4) | ||
| 790 | proxy_test_focus += [self.cvs_proxy, self.cvs_proxy_port] | ||
| 791 | self.same_proxy_addresses.append(self.cvs_proxy) | ||
| 792 | self.same_proxy_ports.append(self.cvs_proxy_port) | ||
| 793 | self.all_proxy_ports = self.same_proxy_ports + [self.http_proxy_port] | ||
| 794 | self.all_proxy_addresses = self.same_proxy_addresses + [self.http_proxy] | ||
| 795 | sub_vbox.pack_start(self.proxy_table, expand=False, fill=False) | ||
| 796 | self.proxy_table.show_all() | ||
| 797 | |||
| 798 | # Create the graphical elements for the network test feature, but don't display them yet | ||
| 799 | self.test_network_button = HobAltButton("Test network configuration") | ||
| 800 | self.test_network_button.connect("clicked", self.test_network_button_cb) | ||
| 801 | self.test_proxy_progress = HobProgressBar() | ||
| 802 | self.dummy_progress = HobProgressBar() | ||
| 803 | self.retest_network_button = HobAltButton("Retest") | ||
| 804 | self.retest_network_button.connect("clicked", self.test_network_button_cb) | ||
| 805 | self.test_gui_elements = [self.test_network_button, self.test_proxy_progress, self.dummy_progress, self.retest_network_button] | ||
| 806 | # Initialize the network tester | ||
| 807 | self.test_proxy_state = self.TEST_NETWORK_NONE | ||
| 808 | self.set_test_proxy_state(self.TEST_NETWORK_INITIAL) | ||
| 809 | self.proxy_test_passed_id = self.handler.connect("network-passed", lambda h:self.test_proxy_ended(True)) | ||
| 810 | self.proxy_test_failed_id = self.handler.connect("network-failed", lambda h:self.test_proxy_ended(False)) | ||
| 811 | [w.connect("focus-in-event", self.test_proxy_focus_event) for w in proxy_test_focus] | ||
| 812 | [w.connect("focus-out-event", self.proxy_address_focus_out_event) for w in self.all_proxy_addresses] | ||
| 662 | 813 | ||
| 663 | self.direct_checkbox.connect("toggled", self.proxy_checkbox_toggled_cb) | 814 | self.direct_checkbox.connect("toggled", self.proxy_checkbox_toggled_cb) |
| 664 | self.proxy_checkbox.connect("toggled", self.proxy_checkbox_toggled_cb) | 815 | self.proxy_checkbox.connect("toggled", self.proxy_checkbox_toggled_cb) |
| @@ -840,7 +991,7 @@ class SimpleSettingsDialog (CrumbsDialog, SettingsUIHelper): | |||
| 840 | self.nb.set_show_tabs(True) | 991 | self.nb.set_show_tabs(True) |
| 841 | self.nb.append_page(self.create_build_environment_page(), gtk.Label("Build environment")) | 992 | self.nb.append_page(self.create_build_environment_page(), gtk.Label("Build environment")) |
| 842 | self.nb.append_page(self.create_shared_state_page(), gtk.Label("Shared state")) | 993 | self.nb.append_page(self.create_shared_state_page(), gtk.Label("Shared state")) |
| 843 | self.nb.append_page(self.create_proxy_page(), gtk.Label("Proxies")) | 994 | self.nb.append_page(self.create_network_page(), gtk.Label("Network")) |
| 844 | self.nb.append_page(self.create_others_page(), gtk.Label("Others")) | 995 | self.nb.append_page(self.create_others_page(), gtk.Label("Others")) |
| 845 | self.nb.set_current_page(0) | 996 | self.nb.set_current_page(0) |
| 846 | self.vbox.pack_start(self.nb, expand=True, fill=True) | 997 | self.vbox.pack_start(self.nb, expand=True, fill=True) |
| @@ -848,6 +999,11 @@ class SimpleSettingsDialog (CrumbsDialog, SettingsUIHelper): | |||
| 848 | 999 | ||
| 849 | self.show_all() | 1000 | self.show_all() |
| 850 | 1001 | ||
| 1002 | def destroy(self): | ||
| 1003 | self.handler.disconnect(self.proxy_test_passed_id) | ||
| 1004 | self.handler.disconnect(self.proxy_test_failed_id) | ||
| 1005 | super(SimpleSettingsDialog, self).destroy() | ||
| 1006 | |||
| 851 | 1007 | ||
| 852 | # | 1008 | # |
| 853 | # AdvancedSettings Dialog | 1009 | # AdvancedSettings Dialog |
diff --git a/bitbake/lib/bb/ui/crumbs/hobeventhandler.py b/bitbake/lib/bb/ui/crumbs/hobeventhandler.py index 5d038f45ca..7d3af6c725 100644 --- a/bitbake/lib/bb/ui/crumbs/hobeventhandler.py +++ b/bitbake/lib/bb/ui/crumbs/hobeventhandler.py | |||
| @@ -65,10 +65,17 @@ class HobHandler(gobject.GObject): | |||
| 65 | "package-populated" : (gobject.SIGNAL_RUN_LAST, | 65 | "package-populated" : (gobject.SIGNAL_RUN_LAST, |
| 66 | gobject.TYPE_NONE, | 66 | gobject.TYPE_NONE, |
| 67 | ()), | 67 | ()), |
| 68 | "network-passed" : (gobject.SIGNAL_RUN_LAST, | ||
| 69 | gobject.TYPE_NONE, | ||
| 70 | ()), | ||
| 71 | "network-failed" : (gobject.SIGNAL_RUN_LAST, | ||
| 72 | gobject.TYPE_NONE, | ||
| 73 | ()), | ||
| 68 | } | 74 | } |
| 69 | 75 | ||
| 70 | (GENERATE_CONFIGURATION, GENERATE_RECIPES, GENERATE_PACKAGES, GENERATE_IMAGE, POPULATE_PACKAGEINFO, SANITY_CHECK) = range(6) | 76 | (GENERATE_CONFIGURATION, GENERATE_RECIPES, GENERATE_PACKAGES, GENERATE_IMAGE, POPULATE_PACKAGEINFO, SANITY_CHECK, NETWORK_TEST) = range(7) |
| 71 | (SUB_PATH_LAYERS, SUB_FILES_DISTRO, SUB_FILES_MACH, SUB_FILES_SDKMACH, SUB_MATCH_CLASS, SUB_PARSE_CONFIG, SUB_SANITY_CHECK, SUB_GNERATE_TGTS, SUB_GENERATE_PKGINFO, SUB_BUILD_RECIPES, SUB_BUILD_IMAGE) = range(11) | 77 | (SUB_PATH_LAYERS, SUB_FILES_DISTRO, SUB_FILES_MACH, SUB_FILES_SDKMACH, SUB_MATCH_CLASS, SUB_PARSE_CONFIG, SUB_SANITY_CHECK, |
| 78 | SUB_GNERATE_TGTS, SUB_GENERATE_PKGINFO, SUB_BUILD_RECIPES, SUB_BUILD_IMAGE, SUB_NETWORK_TEST) = range(12) | ||
| 72 | 79 | ||
| 73 | def __init__(self, server, recipe_model, package_model): | 80 | def __init__(self, server, recipe_model, package_model): |
| 74 | super(HobHandler, self).__init__() | 81 | super(HobHandler, self).__init__() |
| @@ -146,6 +153,8 @@ class HobHandler(gobject.GObject): | |||
| 146 | self.runCommand(["triggerEvent", "bb.event.RequestPackageInfo()"]) | 153 | self.runCommand(["triggerEvent", "bb.event.RequestPackageInfo()"]) |
| 147 | elif next_command == self.SUB_SANITY_CHECK: | 154 | elif next_command == self.SUB_SANITY_CHECK: |
| 148 | self.runCommand(["triggerEvent", "bb.event.SanityCheck()"]) | 155 | self.runCommand(["triggerEvent", "bb.event.SanityCheck()"]) |
| 156 | elif next_command == self.SUB_NETWORK_TEST: | ||
| 157 | self.runCommand(["triggerEvent", "bb.event.NetworkTest()"]) | ||
| 149 | elif next_command == self.SUB_BUILD_RECIPES: | 158 | elif next_command == self.SUB_BUILD_RECIPES: |
| 150 | self.clear_busy() | 159 | self.clear_busy() |
| 151 | self.building = True | 160 | self.building = True |
| @@ -254,6 +263,12 @@ class HobHandler(gobject.GObject): | |||
| 254 | message["total"] = event.total | 263 | message["total"] = event.total |
| 255 | message["title"] = "Parsing recipes: " | 264 | message["title"] = "Parsing recipes: " |
| 256 | self.emit("parsing-completed", message) | 265 | self.emit("parsing-completed", message) |
| 266 | elif isinstance(event, bb.event.NetworkTestFailed): | ||
| 267 | self.emit("network-failed") | ||
| 268 | self.run_next_command() | ||
| 269 | elif isinstance(event, bb.event.NetworkTestPassed): | ||
| 270 | self.emit("network-passed") | ||
| 271 | self.run_next_command() | ||
| 257 | 272 | ||
| 258 | if self.error_msg and not self.commands_async: | 273 | if self.error_msg and not self.commands_async: |
| 259 | self.display_error() | 274 | self.display_error() |
| @@ -348,6 +363,10 @@ class HobHandler(gobject.GObject): | |||
| 348 | self.commands_async.append(self.SUB_SANITY_CHECK) | 363 | self.commands_async.append(self.SUB_SANITY_CHECK) |
| 349 | self.run_next_command(self.SANITY_CHECK) | 364 | self.run_next_command(self.SANITY_CHECK) |
| 350 | 365 | ||
| 366 | def trigger_network_test(self): | ||
| 367 | self.commands_async.append(self.SUB_NETWORK_TEST) | ||
| 368 | self.run_next_command(self.NETWORK_TEST) | ||
| 369 | |||
| 351 | def generate_configuration(self): | 370 | def generate_configuration(self): |
| 352 | self.commands_async.append(self.SUB_PARSE_CONFIG) | 371 | self.commands_async.append(self.SUB_PARSE_CONFIG) |
| 353 | self.commands_async.append(self.SUB_PATH_LAYERS) | 372 | self.commands_async.append(self.SUB_PATH_LAYERS) |
