Example #1
0
def register_login(uid):
    try:
        response = exec_http(uid,'user_login')
        post_ga_event('assembly_backend','login',get_cm_param(response.code))
    except:
        post_ga_event('assembly_backend','login' ,get_cm_param(500))
        log_info('Unable to register login')
Example #2
0
def get_user_settings(uid):
    resp = exec_http(uid,'get_user_db')
    db = eval(resp.read())
    post_ga_event('assembly_backend','get_settings',get_cm_param(resp.code))
    mail = db['mail'] if db.has_key('mail') else ''
    notifications = True if (db.has_key('notifications') and string2bool(db['notifications']) is True) else False
    return UserDbSettings(mail,notifications)
Example #3
0
 def on_refresh_db(self, event):
     post_ga_event('application_click','refresh_db')
     try:
         utils.refresh_local_db()
         update_tree_view(self)
         wx.MessageBox('Refreshed db','Info', wx.OK | wx.ICON_INFORMATION)
     except FtpOverloadedException:
         log_info('Unable to refresh db due to overload')
         wx.MessageBox('Too many users right now, please try later', 'Info', wx.OK | wx.ICON_WARNING)
     except:
         log_info('Unable to refresh db')
         wx.MessageBox('Error during install %s' % sys.exc_info()[0], 'Info', wx.OK | wx.ICON_WARNING)
Example #4
0
    def remove_from_view(self, e):
        dlg = wx.MessageDialog(self,'Are you sure?', 'Remove %s from view' % item.name ,wx.OK|wx.CANCEL | wx.ICON_QUESTION)
        if dlg.ShowModal() == wx.ID_OK:
            post_ga_event('application_click','hide_%s' % item.name)
            utils.add_user_attribute('exclude_%s' % item.name,'true')
            update_tree_view(self)
            dlg.Destroy()
        else:
            dlg.Destroy()
            return

        if os.path.exists('%s/%s/' % (dir_name, item.folder)):
            dlg = wx.MessageDialog(self,'Are you sure?', 'Folder was already installed, delete contents on disk?',wx.OK|wx.CANCEL | wx.ICON_QUESTION)
            if dlg.ShowModal() == wx.ID_OK:
                log_info('Deleting current folder %s' % item.folder)
                Thread(target=delete_folder,args=(self,item)).start()
                utils.delete_db(dir_name,item)
Example #5
0
    def __init__(self, parent, uid):
        super(SettingsDialog, self).__init__(parent, title='Settings', size=(390, 180))
        self.uid = uid

        Thread(target=self.get_settings, args=()).start()

        panel = wx.Panel(self)
        vbox = wx.BoxSizer(wx.VERTICAL)
        hbox1 = wx.BoxSizer(wx.HORIZONTAL)
        st1 = wx.StaticText(panel, label='Mail address')
        hbox1.Add(st1, flag=wx.RIGHT, border=8)
        self.mail_field = wx.TextCtrl(panel)
        hbox1.Add(self.mail_field, proportion=1)
        vbox.Add(hbox1, flag=wx.EXPAND|wx.LEFT|wx.RIGHT|wx.TOP, border=10)
        vbox.Add((-1, 10))
        hbox4 = wx.BoxSizer(wx.HORIZONTAL)
        self.notifications = wx.CheckBox(panel, label='Notify me when new content is available')
        hbox4.Add(self.notifications, flag=wx.RIGHT, border=10)
        vbox.Add(hbox4, flag=wx.LEFT, border=10)
        vbox.Add((-1, 10))

        hbox41 = wx.BoxSizer(wx.HORIZONTAL)
        self.delete_after_unzip = wx.CheckBox(panel, label='Delete tmpfiles after install')

        if utils.get_boolean_user_setting(delete_files_after_install):
            self.delete_after_unzip.SetValue(True)

        hbox41.Add(self.delete_after_unzip, flag=wx.RIGHT, border=10)
        vbox.Add(hbox41, flag=wx.LEFT, border=10)
        vbox.Add((-1, 30))

        hbox5 = wx.BoxSizer(wx.HORIZONTAL)
        btn1 = wx.Button(panel, label='Ok', size=(70, 30))
        btn1.Bind(wx.EVT_BUTTON,self.saveandclose_dialog)
        hbox5.Add(btn1)
        btn2 = wx.Button(panel, label='Close', size=(70, 30))
        btn2.Bind(wx.EVT_BUTTON,self.close_dialog)

        hbox5.Add(btn2, flag=wx.LEFT|wx.BOTTOM, border=5)
        vbox.Add(hbox5, flag=wx.ALIGN_RIGHT|wx.RIGHT, border=10)
        panel.SetSizer(vbox)
        post_ga_event('application_click','settings_dialog')
        self.Centre()
        self.ShowModal()
Example #6
0
def install_item(self, current_item, dispose_dia = True):
    post_ga_event('install_item','artifact_%s' % current_item.name)
    folder = '%s/%s/' % (dir_name, current_item.folder)
    if not utils.check_if_already_updated_with_delta(dir_name, current_item.name, current_item.version) or not os.path.exists(folder):
        try:
            log_dia_info('Getting full entry %s' % current_item.name)
            retries = 0
            nof_retries = 3
            while retries < nof_retries:
                try:
                    utils.get_file(current_item.basedir,utils.get_storage_location(current_item.file),current_item.file,current_item.name)

                    if os.path.exists(folder):
                        log_dia_info('Deleting current folder %s (this may take a while, please be patient)' % folder)
                        utils.delete_folder('%s/%s/' % (dir_name, current_item.folder))

                    if was_dia_cancelled():
                        log_dia_info('Downloaded for %s was cancelled' % current_item.name)
                        if dispose_dia:
                            wx.CallAfter(dispose_dialog)
                        return

                    log_dia_info('Downloaded %s' % current_item.name)
                    log_dia_info('Extracting files %s' %dir_name)

                    dia_tick()
                    utils.extract_file(utils.get_storage_location(current_item.file), dir_name,current_item,True)
                    dia_tick()
                    break;

                except InvalidZipFileException:
                    post_ga_event('install_item_invalid_zip','artifact_%s' % current_item.name)
                    log_info('Invalid zifile, delete and retry')
                    utils.delete_file(utils.get_storage_location(current_item.file))
                    if retries == nof_retries-1:
                        raise

                retries+=1

            if utils.get_boolean_user_setting(delete_files_after_install):
                utils.delete_file(utils.get_storage_location(current_item.file))

            if was_dia_cancelled():
                if dispose_dia:
                    wx.CallAfter(dispose_dialog)
                return

            log_dia_info('Update db')
            utils.update_db(dir_name, current_item.name, current_item.version)
            current_item.not_installed = False

            log_dia_info('Done extracting full entry %s at location %s' % (current_item.name, dir_name))
            log_dia_info('Install done')

            if dispose_dia:
                wx.CallAfter(dispose_dialog)

        except InvalidZipFileException as e:
            utils.delete_folder('%s/%s/' % (dir_name, current_item.folder))
            log_dia_info('Install failed du to error during fetch or unzip')
            if dispose_dia:
                wx.CallAfter(dispose_dialog_fail,e.message)

        except FtpOverloadedException as e:
            log_dia_info('Too many users, please try agin in a while')
            if dispose_dia:
                wx.CallAfter(dispose_dialog_fail,'Too many users, please try later')

        except:
            utils.delete_folder('%s/%s/' % (dir_name, current_item.folder))
            log_dia_info('Install failed due to unknown error')
            if dispose_dia:
                wx.CallAfter(dispose_dialog_fail,'Unknown error %s:' % sys.exc_info()[0])
        finally:
            update_tree_view(self)
    else:
        if dispose_dia:
            wx.CallAfter(dispose_dialog)
Example #7
0
 def restore_hidden(self,event):
     post_ga_event('application_click','restore_hidden')
     utils.restore_view()
     update_tree_view(self)
Example #8
0
def set_notifications(uid, state):
    method = 'activate_notification' if state else 'deactivate_notification'
    response = exec_http(uid,method)
    post_ga_event('assembly_backend','set_notifications',get_cm_param(response.code))
    return response.code is 200
Example #9
0
def set_mail(uid, mail):
    response = exec_http(uid,'add_user_mail/%s' % mail)
    post_ga_event('assembly_backend','set_mail',get_cm_param(response.code))
    return response.code is 200
Example #10
0
 def OnCancel(self, event):
     post_ga_event('application_click','cancel_update')
     self.is_cancelled = True
     self.update_text('Cancelling, please wait...')
Example #11
0
 def update_and_install_all_to_latest(self, e):
     post_ga_event('application_click','update_and_install_all')
     launch_dia_thread(self)
     Thread(target=install_all, args=(self,)).start()
Example #12
0
    def OnInit(self):
        global client_id

        utils.assert_folders()
        utils.migrate_from_tmp()
        try:
            setup_log()
        except:
            wx.MessageBox('Another instance of Assembly is running', 'Unable to start',wx.OK | wx.ICON_ERROR)
            sys.exit(0)

        platform = utils.get_platform()
        auto_upgrade = utils.string2bool(platform['autoupgrade'])

        if len(sys.argv) > 1:
            utils.add_user_attribute('show_info_popup','True')
            utils.delete_folder_async('%s/upgrade' %os.getcwd())
            wx.MessageBox('Congratulations! Assembly64 was upgraded from version %s to %s.' %(sys.argv[1], version), 'Assembly64 upgraded!',wx.OK | wx.ICON_INFORMATION)

        try:
            utils.update_server_db()
            newer_available,force,available_version = utils.check_version(version)
            if newer_available and force:
                update_dia = UpdateDialog(None,"New version available", "New version available. Upgrade is vital!",auto_upgrade, True)
                update_dia.ShowModal()
                if update_dia.is_app_upgrade():
                    upgrade = UpgradeSplash()
                    upgrade.Show()
                    utils.do_upgrade(upgrade,version,platform)
                    os._exit(1)
            elif newer_available and not force:
                update_dia = UpdateDialog(None,"New version available", "New version available, but you can stay with this one.. For now!", auto_upgrade, False)
                update_dia.ShowModal()
                if update_dia.is_app_upgrade():
                    upgrade = UpgradeSplash()
                    upgrade.Show()
                    utils.do_upgrade(upgrade,version,platform)
                    os._exit(1)
        except FtpOverloadedException:
            wx.MessageBox('Too many users right now, please try later', 'Assembly Error',wx.OK | wx.ICON_WARNING)
            sys.exit(0)
        except ftplib.all_errors as a:
            wx.MessageBox('Unable to communicate with Assembly64 server.', 'Assembly Error',wx.OK | wx.ICON_WARNING)
            sys.exit(0)
        except:
            wx.MessageBox('Unable to communicate with assembly64 server.', 'Assembly Error',wx.OK | wx.ICON_WARNING)
            sys.exit(0)

        if not utils.has_attribute('uid'):
            client_id = str(uuid.uuid1())
            utils.add_user_attribute('uid',client_id)
            post_ga_event('application','startup_new_user')

        else:
            client_id = utils.get_user_attribute('uid')
            post_ga_event('application','startup_existing_user')

        if not utils.has_attribute('show_info_popup'):
            utils.add_user_attribute('show_info_popup','true')

        if utils.has_attribute(delete_files_after_install) is False:
            utils.add_user_attribute(delete_files_after_install,'true')

        thread = Thread(target = update_db,args = (10, ))
        thread.start()

        AssemblySplash().Show()
        return 1
Example #13
0
def update_item(self, item,dispose_dia = True):
    post_ga_event('update_item','artifact_%s' % item.name)
    try:
        if item.create_delta:
            for deltaitem in item.deltas:
                if not utils.check_if_already_updated_with_delta(dir_name, item.name, deltaitem.version):
                    log_dia_info('Updating file %s' % deltaitem.file)
                    retries = 0
                    nof_retries = 3
                    while retries < nof_retries:
                        utils.get_file(utils.resolve_delta_dir(item),utils.get_storage_location(deltaitem.file),deltaitem.file,item.name)
                        dia_tick()

                        if was_dia_cancelled():
                            log_dia_info('Cancelling...')
                            break

                        if item.dynamic_import:
                            utils.delete_folder(utils.user_file_cache_dyn)
                            utils.create_dir(utils.user_file_cache_dyn)
                            try:
                                if was_dia_cancelled():
                                    log_dia_info('Cancelling...')
                                    break

                                utils.extract_file(utils.get_storage_location(deltaitem.file), utils.user_file_cache_dyn,item,True)

                                if was_dia_cancelled():
                                    log_dia_info('Cancelling...')
                                    break

                                dynamic_import.move_in_place(utils.user_file_cache + 'dyn/%s/' % item.folder, '%s/%s/' % (dir_name, item.folder))

                                if was_dia_cancelled():
                                    log_dia_info('Cancelling...')
                                    update_tree_view(self)
                                    break

                                utils.update_db(dir_name, item.name, deltaitem.version)
                                utils.delete_folder(utils.user_file_cache + 'dyn/%s/' % item.folder)
                                item.needs_update = False
                                update_tree_view(self)
                                dia_tick()
                                break

                            except FtpOverloadedException:
                                post_ga_event('update_item_ftp_overload','artifact_%s' % deltaitem.file)
                                raise

                            except InvalidZipFileException as e:
                                post_ga_event('update_item_invalid_zip','artifact_%s' % deltaitem.file)
                                utils.delete_file(utils.get_storage_location(deltaitem.file))
                                if retries == nof_retries-1:
                                    raise

                        else:
                            log_info('Unpacking %s into %s' % (item.name, dir_name))
                            try:
                                if was_dia_cancelled():
                                    log_dia_info('Cancelling...')
                                    break
                                utils.extract_file(utils.get_storage_location(deltaitem.file), dir_name,item,False)
                                if was_dia_cancelled():
                                    log_dia_info('Cancelling...')
                                    update_tree_view(self)
                                    break
                                utils.update_db(dir_name, item.name, deltaitem.version)
                                target_folder = dir_name + '/' + item.folder
                                log_dia_info('Updated %s with deltafile %s at location %s' % (item.name,deltaitem.file,target_folder))
                                item.needs_update = False
                                update_tree_view(self)
                                dia_tick()
                                if utils.get_boolean_user_setting(delete_files_after_install):
                                    utils.delete_file(utils.get_storage_location(deltaitem.file))
                                break

                            except FtpOverloadedException:
                                post_ga_event('update_item_ftp_overload','artifact_%s' % deltaitem.file)
                                raise

                            except InvalidZipFileException:
                                post_ga_event('update_item_invalid_zip','artifact_%s' % deltaitem.file)
                                log_dia_info('Invalid deltazifile, delete and retry')
                                utils.delete_file(utils.get_storage_location(deltaitem.file))
                                if retries == nof_retries-1:
                                    raise

                        retries += 1
        if dispose_dia:
            wx.CallAfter(dispose_dialog)

    except FtpOverloadedException:
        if dispose_dia:
            wx.CallAfter(dispose_dialog_fail,'Too many users right now, please try again later')

    except InvalidZipFileException as e:
        if dispose_dia:
            wx.CallAfter(dispose_dialog_fail,e.message)
    except:
        if dispose_dia:
            wx.CallAfter(dispose_dialog_fail,'Unknown error %s:' % sys.exc_info()[0])
    finally:
        update_tree_view(self)
Example #14
0
 def on_delete_artifacts(self, event):
     Thread(target=utils.delete_folder,args=(utils.user_file_cache,)).start()
     post_ga_event('application_click','delete_artifacts')
     wx.MessageBox('Local cachefiles were removed', 'Remove cached files' , wx.OK | wx.ICON_INFORMATION)
     log_info('Deleted cached artifacts')
Example #15
0
 def view_settings(self, event):
     post_ga_event('application_click','view_settings')
     SettingsDialog(None, client_id)
Example #16
0
 def on_about(self, event):
     post_ga_event('application_click','show_first_time_dialog')
     dlg = FirstTimeInfoDialog(None)
     dlg.ShowModal()
Example #17
0
 def on_show_log(self, event):
     post_ga_event('application_click','show_log')
     dia = LogDia(None,-1,'Applicationlog')