Exemplo n.º 1
0
def run(cmdargs):
    """
    Run and monitor a command
    Args:
        cmdargs (list of string): command and args to run
    Returns:
       error code (integer)
    """
    os.environ["MONITOR_PID"] = str(os.getpid())
    subproc = subprocess.Popen(cmdargs, shell=False)

    if not monitor(subproc, MONITOR_TIMEOUT):
        return subproc.returncode

    kano_updater.utils.track_data_and_sync('updater-hanged-indefinitely',
                                           dict())
    if '--keep-uuid' not in cmdargs:
        kano_updater.utils.clear_tracking_uuid()

    if '--gui' in cmdargs:
        from kano.gtk3 import kano_dialog
        kdialog = kano_dialog.KanoDialog(
            _("Update error"),
            _("The updater seems to have got stuck. Press OK to reboot"))
        kdialog.run()
        os.system('systemctl reboot')

        # for test purposes:
        time.sleep(10)
        os._exit(kano_updater.return_codes.RC.HANGED_INDEFINITELY)

    return kano_updater.return_codes.RC.HANGED_INDEFINITELY
Exemplo n.º 2
0
def show_reboot_dialog():
    rd_title = _("Update successful!")
    rd_desc = _("Now we just need to do a quick reboot. See you in a minute!")
    reboot_dialog = kano_dialog.KanoDialog(rd_title, rd_desc)

    reboot_dialog.run()
    while Gtk.events_pending():
        Gtk.main_iteration()
Exemplo n.º 3
0
    def remove_account_dialog(self, widget=None, event=None):
        if not hasattr(event, 'keyval') or event.keyval == Gdk.KEY_Return:
            # Bring in message dialog box
            kdialog = kano_dialog.KanoDialog(
                _("Are you sure you want to delete the current user?"),
                _("You will lose all the data on this account!"),
                [{
                    'label': _("CANCEL"),
                    'color': 'red',
                    'return_value': False
                }, {
                    'label': _("OK"),
                    'color': 'green',
                    'return_value': True
                }],
                parent_window=self.win)
            do_delete_user = kdialog.run()
            if do_delete_user:
                self.disable_buttons()
                try:
                    delete_user()
                except UserError as e:
                    kdialog = kano_dialog.KanoDialog(_("Error deleting user"),
                                                     str(e),
                                                     parent_window=self.win)
                    return

                kdialog = kano_dialog.KanoDialog(
                    _("To finish removing this account, you need to reboot"),
                    _("Do you want to reboot?"), [{
                        'label': _("LATER"),
                        'color': 'grey',
                        'return_value': False
                    }, {
                        'label': _("REBOOT NOW"),
                        'color': 'orange',
                        'return_value': True
                    }],
                    parent_window=self.win)
                do_reboot_now = kdialog.run()
                if do_reboot_now:
                    os.system("sudo systemctl reboot")
Exemplo n.º 4
0
def update_failed(err):
    from kano.gtk3 import kano_dialog

    logger.error("Update failed: {}".format(err))

    msg = _("We had a problem with the Update. "
          "Make sure you are connected to the Internet, and give it another go.\n\n"
          "If you still have problems, we can help at http://help.kano.me")

    kdialog = kano_dialog.KanoDialog(_("Update error"), msg)
    kdialog.run()
Exemplo n.º 5
0
    def add_account(self, widget=None, event=None):
        if not hasattr(event, 'keyval') or event.keyval == Gdk.KEY_Return:
            kdialog = None

            try:
                # add new user command
                add_user()
            except UserError as e:
                kdialog = kano_dialog.KanoDialog(_("Error creating new user"),
                                                 str(e),
                                                 parent_window=self.win)
            else:
                kdialog = kano_dialog.KanoDialog(
                    _("Reboot the system"),
                    _("A new account will be created next time you reboot."),
                    parent_window=self.win)

                # Tell user to reboot to see changes
                common.need_reboot = True

            kdialog.run()
            self.disable_buttons()
Exemplo n.º 6
0
 def add_account_dialog(self):
     kdialog = kano_dialog.KanoDialog(
         _("Add an Account"),
         _("To add an account, you need to reboot. If you have any files open, you should cancel and save your files first. Add and reboot now?"
           ), [{
               "label": _("REBOOT NOW"),
               "return_value": True,
               "color": "orange"
           }, {
               "label": _("CANCEL"),
               "return_value": False,
               "color": "green"
           }])
     return kdialog.run()
Exemplo n.º 7
0
def root_check():
    from kano.gtk3 import kano_dialog

    user = os.environ['LOGNAME']
    if user != 'root':
        description = 'kano-updater must be executed with root privileges'
        logger.error(description)

        if is_gui():
            kdialog = kano_dialog.KanoDialog(
                _("Error!"),
                _("kano-updater must be executed with root privileges")
            )
            kdialog.run()
        sys.exit(description)
Exemplo n.º 8
0
def create_error_dialog(
        message1=_("Could not change password"), message2="", win=None):
    kdialog = kano_dialog.KanoDialog(message1,
                                     message2, [{
                                         'label': _("GO BACK"),
                                         'color': 'red',
                                         'return_value': False
                                     }, {
                                         'label': _("TRY AGAIN"),
                                         'color': 'green',
                                         'return_value': True
                                     }],
                                     parent_window=win)

    response = kdialog.run()
    return response
Exemplo n.º 9
0
    def add_account(self, widget=None, event=None):
        if not hasattr(event, 'keyval') or event.keyval == Gdk.KEY_Return:
            kdialog = None

            if not self.add_account_dialog():
                return

            try:
                # add new user command
                add_user()
            except UserError as e:
                kdialog = kano_dialog.KanoDialog(_("Error creating new user"),
                                                 str(e),
                                                 parent_window=self.win)
                kdialog.run()
                self.disable_buttons()
            else:
                os.system("sudo systemctl reboot")
Exemplo n.º 10
0
def run(cmdargs):
    """
    Run and monitor a command
    Args:
        cmdargs (list of string): command and args to run
    Returns:
       error code (integer)
    """
    if 'MONITOR_PID' in os.environ:
        os.execvp(cmdargs[0], cmdargs)

    os.environ["MONITOR_PID"] = str(os.getpid())
    subproc = subprocess.Popen(cmdargs, shell=False)

    if not monitor(subproc, MONITOR_TIMEOUT):
        return subproc.returncode

    logger.error(
        'Updater monitor timeout: The monitored process ({}) did not respond for {} seconds'
        .format(cmdargs, MONITOR_TIMEOUT))

    track_data_and_sync('updater-hanged-indefinitely', dict())

    send_crash_report(
        'Updater monitor timeout',
        'The monitored process ({}) did not respond for {} seconds'.format(
            cmdargs, MONITOR_TIMEOUT))

    if '--keep-uuid' not in cmdargs:
        clear_tracking_uuid()

    if '--gui' in cmdargs:
        from kano.gtk3 import kano_dialog
        kdialog = kano_dialog.KanoDialog(
            _("Update error"),
            _("The updater seems to have got stuck. Press OK to reboot"))
        kdialog.run()
        os.system('systemctl reboot')

        # for test purposes:
        time.sleep(10)
        os._exit(RC.HANGED_INDEFINITELY)

    return RC.HANGED_INDEFINITELY
Exemplo n.º 11
0
def show_results(msg_upgraded, msg_added, msg_removed, debian_err_packages,
                 appstate_after_nonclean, python_ok, python_err):

    # Create Gtk textiew with markdown
    text_view = Gtk.TextView()
    text_view.set_margin_top(10)
    text_view.set_margin_bottom(20)
    text_view.set_margin_left(20)
    text_view.set_margin_right(20)
    text_buffer = text_view.get_buffer()
    bold_tag = text_buffer.create_tag('bold', weight=Pango.Weight.BOLD)

    scrolled_window = ScrolledWindow()
    scrolled_window.apply_styling_to_widget()
    scrolled_window.add_with_viewport(text_view)
    scrolled_window.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC)
    scrolled_window.set_size_request(400, 200)

    result_dialog = kano_dialog.KanoDialog(_("Update result"),
                                           "",
                                           widget=scrolled_window,
                                           global_style=True)
    result_dialog.dialog.set_icon_name('kano-updater')
    result_dialog.dialog.set_title(_("Kano Updater"))

    if msg_upgraded:
        text = _("\nApps upgraded:\n")
        add_text_to_end(text_buffer, text, bold_tag)
        add_text_to_end(text_buffer, msg_upgraded)

    if msg_added:
        text = _("\nApps added:\n")
        add_text_to_end(text_buffer, text, bold_tag)
        add_text_to_end(text_buffer, msg_added)

    if msg_removed:
        text = _("\nApps removed:\n")
        add_text_to_end(text_buffer, text, bold_tag)
        add_text_to_end(text_buffer, msg_removed)

    if debian_err_packages:
        text = _("\nApps with errors:\n")
        add_text_to_end(text_buffer, text, bold_tag)
        msg_error = "{}\n".format('\n'.join(debian_err_packages))
        add_text_to_end(text_buffer, msg_error)

    if appstate_after_nonclean:
        text = _("\nApps with non-clean state:\n")
        add_text_to_end(text_buffer, text, bold_tag)

        non_clean_list = '\n'.join(appstate_after_nonclean.iterkeys())
        msg_non_clean_list = non_clean_list + "\n"
        add_text_to_end(text_buffer, msg_non_clean_list)

    if python_ok:
        text = _("\nPython modules upgraded:\n")
        add_text_to_end(text_buffer, text, bold_tag)

        python_modules = "{}\n".format('\n'.join(python_ok))
        add_text_to_end(text_buffer, python_modules)

    if python_err:
        text = _("\nPython modules with error:\n")
        add_text_to_end(text_buffer, text, bold_tag)

        err_list = '\n'.join(python_err)
        msg_python_err = err_list + "\n"
        add_text_to_end(text_buffer, msg_python_err)

    if not (msg_upgraded or msg_added or msg_removed or debian_err_packages
            or appstate_after_nonclean or python_ok or python_err):
        add_text_to_end(text_buffer, _("No updates needed this time."),
                        bold_tag)

    result_dialog.run()
    while Gtk.events_pending():
        Gtk.main_iteration()
Exemplo n.º 12
0
def reboot(title, description):
    from kano.gtk3 import kano_dialog
    kdialog = kano_dialog.KanoDialog(title, description)
    kdialog.run()
    run_cmd('systemctl reboot')
Exemplo n.º 13
0
def create_success_dialog(message1, message2, win):
    kdialog = kano_dialog.KanoDialog(message1, message2, parent_window=win)
    response = kdialog.run()
    return response