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')
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)
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)
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)
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()
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)
def restore_hidden(self,event): post_ga_event('application_click','restore_hidden') utils.restore_view() update_tree_view(self)
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
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
def OnCancel(self, event): post_ga_event('application_click','cancel_update') self.is_cancelled = True self.update_text('Cancelling, please wait...')
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()
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
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)
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')
def view_settings(self, event): post_ga_event('application_click','view_settings') SettingsDialog(None, client_id)
def on_about(self, event): post_ga_event('application_click','show_first_time_dialog') dlg = FirstTimeInfoDialog(None) dlg.ShowModal()
def on_show_log(self, event): post_ga_event('application_click','show_log') dia = LogDia(None,-1,'Applicationlog')