def start_main(self,window,ctx,path_to_extension,win): if self.debug: log(inspect.stack) try: ctx = uno.getComponentContext() smgr = ctx.ServiceManager desktop = smgr.createInstanceWithContext( "com.sun.star.frame.Desktop",ctx) frame = desktop.Frames.getByIndex(0) if desktop.ActiveFrame != None: frame = desktop.ActiveFrame try: if settings_orga['organon_farben']['design_office'] and g.geladen == 'neu': g.geladen = 'alt' listener = Listener_To_Restart_Component() if 'OpenOffice' in frame.Title : listener.win = window window.addWindowListener(listener) if 'LibreOffice' in frame.Title: eventb = ctx.getByName("/singletons/com.sun.star.frame.theGlobalEventBroadcaster") listener.eventb= eventb eventb.addDocumentEventListener(listener) return except Exception as e: log(inspect.stack,tb()) dialog = window debug = settings_orga['log_config']['output_console'] import menu_start args = (pd, dialog, ctx, path_to_extension, win, dict_sb, debug, log, class_Log, KONST, settings_orga) Menu_Start = menu_start.Menu_Start(args) Menu_Start.erzeuge_Startmenu() except Exception as e: log(inspect.stack,tb())
def start_main(self, window, ctx, path_to_extension, win): if self.debug: log(inspect.stack) try: ctx = uno.getComponentContext() smgr = ctx.ServiceManager desktop = smgr.createInstanceWithContext( "com.sun.star.frame.Desktop", ctx) frame = desktop.Frames.getByIndex(0) if desktop.ActiveFrame != None: frame = desktop.ActiveFrame try: if settings_orga['organon_farben'][ 'design_office'] and g.geladen == 'neu': g.geladen = 'alt' listener = Listener_To_Restart_Component() if 'OpenOffice' in frame.Title: listener.win = window window.addWindowListener(listener) if 'LibreOffice' in frame.Title: eventb = ctx.getByName( "/singletons/com.sun.star.frame.theGlobalEventBroadcaster" ) listener.eventb = eventb eventb.addDocumentEventListener(listener) return except Exception as e: log(inspect.stack, tb()) dialog = window debug = settings_orga['log_config']['output_console'] import menu_start args = (pd, dialog, ctx, path_to_extension, win, dict_sb, debug, log, class_Log, KONST, settings_orga) Menu_Start = menu_start.Menu_Start(args) Menu_Start.erzeuge_Startmenu() except Exception as e: log(inspect.stack, tb())
def createUIElement(self,url,args): cmd = url.split('/')[-1] try: xParentWindow = None xFrame = None xUIElement = None for arg in args: if arg.Name == "Frame": xFrame = arg.Value elif arg.Name == "ParentWindow": xParentWindow = arg.Value elif arg.Name == "Sidebar": sidebar = arg.Value elif arg.Name == "Theme": theme = arg.Value xUIElement = XUIPanel(self.ctx, xFrame, xParentWindow, url, theme) # getting the real panel window # for setting the content xUIElement.getRealInterface() panelWin = xUIElement.Window # panelWin has to be set visible panelWin.Visible = True conts = dict_sb['controls'] if cmd in dict_sb['sichtbare']: conts.update({cmd:(xUIElement,sidebar,xParentWindow)}) dict_sb.update({'controls':conts}) if dict_sb['erzeuge_sb_layout'] != None: erzeuge_sb_layout = dict_sb['erzeuge_sb_layout'] dict_sb['sb_closed'] = False erzeuge_sb_layout(cmd,'factory') return xUIElement else: if cmd in conts: del(conts[cmd]) return None except Exception as e: #print('createUIElement '+ str(e)) tb()
def lade_Modul_Language(self): if debug: log(inspect.stack) try: enum = self.desktop.Components.createEnumeration() comps = [] while enum.hasMoreElements(): comps.append(enum.nextElement()) language = comps[0].CharLocale.Language config_provider = self.ctx.ServiceManager.createInstanceWithContext( "com.sun.star.configuration.ConfigurationProvider", self.ctx) prop = uno.createUnoStruct("com.sun.star.beans.PropertyValue") prop.Name = "nodepath" prop.Value = "org.openoffice.Setup/L10N" try: config_access = config_provider.createInstanceWithArguments( "com.sun.star.configuration.ConfigurationUpdateAccess", (prop, )) locale = config_access.getByName('ooLocale') loc = locale[0:2] language = loc except: log(inspect.stack, tb()) language = 'en' self.language = language import lang_en try: exec('import lang_' + language) except Exception as e: pass #log(inspect.stack,tb()) if 'lang_' + language in vars(): lang = vars()['lang_' + language] else: lang = lang_en return lang except Exception as e: log(inspect.stack, tb())
def erzeuge_dialog_index(self): if self.mb.debug: log(inspect.stack) try: listener = Speicherordner_Button_Listener(self.mb, self) controls, max_breite = self.erzeuge_dialog_index_elemente(listener) ctrls, max_hoehe = self.mb.class_Fenster.erzeuge_fensterinhalt( controls) # Hauptfenster erzeugen posSize = None, None, max_breite, max_hoehe fenster, fenster_cont = self.mb.class_Fenster.erzeuge_Dialog_Container( posSize) #fenster_cont.Model.Text = LANG.EXPORT # Controls in Hauptfenster eintragen for name, c in sorted(ctrls.items()): fenster_cont.addControl(name, c) listener.oWindow = fenster listener.controls = ctrls except: log(inspect.stack, tb())
def erzeuge_Menu(self): if debug: log(inspect.stack) try: import menu_bar args = ( pd, self.dialog, self.ctx, self.path_to_extension, self.win, self.dict_sb, debug, self, log, class_Log, self.settings_orga, ) import time class_Log.timer_start = time.clock() self.module_mb = menu_bar self.Menu_Bar = menu_bar.Menu_Bar(args) self.Menu_Bar.erzeuge_Menu(self.Menu_Bar.prj_tab) except: log(inspect.stack, tb())
def get_zuletzt_geladene_Projekte(self): if debug: log(inspect.stack) try: projekte = self.settings_orga['zuletzt_geladene_Projekte'] # Fuer projekte erstellt vor v0.9.9.8b if isinstance(projekte, dict): list_proj = list(projekte) projekte = [[p, projekte[p]] for p in list_proj] inexistent = [p for p in projekte if not os.path.exists(p[1])] for i in inexistent: index = projekte.index(i) del (projekte[index]) self.settings_orga['zuletzt_geladene_Projekte'] = projekte return projekte except Exception as e: print(e) try: if debug: log(inspect.stack, tb()) except: pass return []
def get_zuletzt_geladene_Projekte(self): if debug: log(inspect.stack) try: projekte = self.settings_orga['zuletzt_geladene_Projekte'] # Fuer projekte erstellt vor v0.9.9.8b if isinstance(projekte, dict): list_proj = list(projekte) projekte = [[p,projekte[p]] for p in list_proj] inexistent = [p for p in projekte if not os.path.exists(p[1])] for i in inexistent: index = projekte.index(i) del(projekte[index]) self.settings_orga['zuletzt_geladene_Projekte'] = projekte return projekte except Exception as e: print(e) try: if debug: log(inspect.stack,tb()) except: pass return []
def erzeuge_Menu(self): if debug: log(inspect.stack) try: import menu_bar args = (pd, self.dialog, self.ctx, self.path_to_extension, self.win, self.dict_sb, debug, self, log, class_Log, self.settings_orga, ) import time class_Log.timer_start = time.clock() self.module_mb = menu_bar self.Menu_Bar = menu_bar.Menu_Bar(args) self.Menu_Bar.erzeuge_Menu(self.Menu_Bar.prj_tab) except: log(inspect.stack,tb())
def set_konst(): try: sett = settings_orga # ORGANON DESIGN KONST.FARBE_HF_HINTERGRUND = sett['organon_farben']['hf_hintergrund'] KONST.FARBE_MENU_HINTERGRUND = sett['organon_farben']['menu_hintergrund'] KONST.FARBE_MENU_SCHRIFT = sett['organon_farben']['menu_schrift'] KONST.FARBE_SCHRIFT_ORDNER = sett['organon_farben']['schrift_ordner'] KONST.FARBE_SCHRIFT_DATEI = sett['organon_farben']['schrift_datei'] KONST.FARBE_AUSGEWAEHLTE_ZEILE = sett['organon_farben']['ausgewaehlte_zeile'] KONST.FARBE_EDITIERTE_ZEILE = sett['organon_farben']['editierte_zeile'] KONST.FARBE_GEZOGENE_ZEILE = sett['organon_farben']['gezogene_zeile'] KONST.FARBE_GLIEDERUNG = sett['organon_farben']['gliederung'] KONST.FARBE_TRENNER_HINTERGRUND = sett['organon_farben']['trenner_farbe_hintergrund'] KONST.FARBE_TRENNER_SCHRIFT = sett['organon_farben']['trenner_farbe_schrift'] KONST.FARBE_TABS_HINTERGRUND = sett['organon_farben']['tabs_hintergrund'] KONST.FARBE_TABS_SCHRIFT = sett['organon_farben']['tabs_schrift'] KONST.FARBE_TABS_SEL_HINTERGRUND= sett['organon_farben']['tabs_sel_hintergrund'] KONST.FARBE_TABS_SEL_SCHRIFT = sett['organon_farben']['tabs_sel_schrift'] KONST.FARBE_TABS_TRENNER = sett['organon_farben']['tabs_trenner'] KONST.FARBE_LINIEN = sett['organon_farben']['linien'] KONST.FARBE_DEAKTIVIERT = sett['organon_farben']['deaktiviert'] except Exception as e: log(inspect.stack,tb())
def set_konst(): try: sett = settings_orga # ORGANON DESIGN KONST.FARBE_HF_HINTERGRUND = sett['organon_farben']['hf_hintergrund'] KONST.FARBE_MENU_HINTERGRUND = sett['organon_farben']['menu_hintergrund'] KONST.FARBE_MENU_SCHRIFT = sett['organon_farben']['menu_schrift'] KONST.FARBE_SCHRIFT_ORDNER = sett['organon_farben']['schrift_ordner'] KONST.FARBE_SCHRIFT_DATEI = sett['organon_farben']['schrift_datei'] KONST.FARBE_AUSGEWAEHLTE_ZEILE = sett['organon_farben']['ausgewaehlte_zeile'] KONST.FARBE_EDITIERTE_ZEILE = sett['organon_farben']['editierte_zeile'] KONST.FARBE_GEZOGENE_ZEILE = sett['organon_farben']['gezogene_zeile'] KONST.FARBE_GLIEDERUNG = sett['organon_farben']['gliederung'] KONST.FARBE_TRENNER_HINTERGRUND = sett['organon_farben']['trenner_farbe_hintergrund'] KONST.FARBE_TRENNER_SCHRIFT = sett['organon_farben']['trenner_farbe_schrift'] # KONST.FARBE_ORGANON_FENSTER except Exception as e: print(tb())
def documentEventOccured(self,ev): ctx = uno.getComponentContext() smgr = ctx.ServiceManager toolkit = smgr.createInstanceWithContext("com.sun.star.awt.Toolkit", ctx) desktop = smgr.createInstanceWithContext( "com.sun.star.frame.Desktop",ctx) if ev.EventName == 'OnLayoutFinished': self.eventb.removeDocumentEventListener(self.listener) try: # um den Listener nur einmal anzusprechen if g.geladen == 'neu': g.geladen = 'alt' if desktop.Name == '': desktop.Name = 'gestartet' from threading import Thread def sleeper(desktop1): import time #time.sleep(2) URL="private:factory/swriter" desktop1.ActiveFrame.loadComponentFromURL(URL,'_top','',()) t = Thread(target=sleeper,args=(desktop,)) t.start() except Exception as e: log(inspect.stack,tb())
def suche(self): # Fuer eine Fehlersuche, die bei jedem Methodenaufruf gestartet wird try: ctx = uno.getComponentContext() smgr = ctx.ServiceManager desktop = smgr.createInstanceWithContext( "com.sun.star.frame.Desktop",ctx) doc = desktop.getCurrentComponent() secs = doc.TextSections el_names = secs.ElementNames for n in el_names: if 'Bereich' in n: pd() except Exception as e: print(tb()) #pd() return e return None
def print_error(self, err, func_vars, obj, src): traceback.tb = ultratb.VerboseTB(tb_offset=1) traceback.tb() enhancer = Enhancer(err, func_vars, obj, src) help_txt = enhancer.get_enhancement() if self.helpful and help_txt: display( Markdown( "<div class='alert alert-block alert-info'><img class='pull-left obligator' src='obligator-64.png' alt='�' /><h2 style='color:blue'>Maybe this can help? </h2></div>" )) print(self.format_return_text(help_txt)) return help_txt else: return None
def createInstanceWithArgumentsAndContext(self, args, ctx): try: CWHandler = ContainerWindowHandler(ctx) self.CWHandler = CWHandler win,tabs = create_window(ctx,self) window = self.CWHandler.window2 window.Model.BackgroundColor = KONST.FARBE_HF_HINTERGRUND start_main(window,ctx,tabs,path_to_extension,win,self) return win except Exception as e: print('Factory '+e) tb()
def erstelle_fussnote(self,fn): if self.mb.debug: log(inspect.stack) try: text = fn.Text paras = [] fussnote = [] enum = text.createEnumeration() while enum.hasMoreElements(): paras.append(enum.nextElement()) for par in paras: enum2 = par.createEnumeration() portions = [] while enum2.hasMoreElements(): portions.append(enum2.nextElement()) # auf leeren Paragraph testen if len(portions) == 1: if portions[0].String == '': fussnote.append(u'<br>') for portion in portions: open = 0 # kursiv if portion.CharPosture.value == 'ITALIC': fussnote.append(u'<span style="font-style: italic;">') open += 1 # fett if portion.CharWeight == 150: fussnote.append(u'<span style="font-weight: bold;">') open += 1 try: if portion.String != '': fussnote.append(portion.String) except: #print("FEHLER: ",portion.String) pass fussnote.append(u'</span>' * open) if par != paras[-1]: fussnote.append(self.leerzeile) return u''.join(fussnote) except: log(inspect.stack,tb())
def lade_Modul_Language(self): if debug: log(inspect.stack) try: enum = self.desktop.Components.createEnumeration() comps = [] while enum.hasMoreElements(): comps.append(enum.nextElement()) language = comps[0].CharLocale.Language config_provider = self.ctx.ServiceManager.createInstanceWithContext("com.sun.star.configuration.ConfigurationProvider",self.ctx) prop = uno.createUnoStruct("com.sun.star.beans.PropertyValue") prop.Name = "nodepath" prop.Value = "org.openoffice.Setup/L10N" try: config_access = config_provider.createInstanceWithArguments("com.sun.star.configuration.ConfigurationUpdateAccess", (prop,)) locale = config_access.getByName('ooLocale') loc = locale[0:2] language = loc except: log(inspect.stack,tb()) language = 'en' self.language = language import lang_en try: exec('import lang_' + language) except Exception as e: pass #log(inspect.stack,tb()) if 'lang_' + language in vars(): lang = vars()['lang_' + language] else: lang = lang_en return lang except Exception as e: log(inspect.stack,tb())
def print_error(err, name): from IPython.core.display import display, Markdown traceback.tb = ultratb.VerboseTB(tb_offset=1) traceback.tb() help_txt = get_help(err) if helpful and help_txt: display( Markdown( "<div class='alert alert-block alert-info'><img class='pull-left obligator' src='obligator-64.png' alt='�' /><h2 style='color:blue'>Maybe this can help? </h2></div>" )) print(help_txt) b = make_feedback_button(err, name) if b != None: display(b) return help_txt else: return None
def erstelle_fussnote(self, fn): if self.mb.debug: log(inspect.stack) try: text = fn.Text paras = [] fussnote = [] enum = text.createEnumeration() while enum.hasMoreElements(): paras.append(enum.nextElement()) for par in paras: enum2 = par.createEnumeration() portions = [] while enum2.hasMoreElements(): portions.append(enum2.nextElement()) # auf leeren Paragraph testen if len(portions) == 1: if portions[0].String == '': fussnote.append(u'<br>') for portion in portions: open = 0 # kursiv if portion.CharPosture.value == 'ITALIC': fussnote.append(u'<span style="font-style: italic;">') open += 1 # fett if portion.CharWeight == 150: fussnote.append(u'<span style="font-weight: bold;">') open += 1 try: if portion.String != '': fussnote.append(portion.String) except: #print("FEHLER: ",portion.String) pass fussnote.append(u'</span>' * open) if par != paras[-1]: fussnote.append(self.leerzeile) return u''.join(fussnote) except: log(inspect.stack, tb())
def speicher(self, inhalt, mode, pfad): if self.mb.debug: log(inspect.stack) try: if not os.path.exists(os.path.dirname(pfad)): os.makedirs(os.path.dirname(pfad)) with codecs_open(pfad, mode, "utf-8") as file: file.write(inhalt) except: log(inspect.stack, tb())
def speicher(self,inhalt,mode,pfad): if self.mb.debug: log(inspect.stack) try: if not os.path.exists(os.path.dirname(pfad)): os.makedirs(os.path.dirname(pfad)) with codecs_open( pfad, mode,"utf-8") as file: file.write(inhalt) except: log(inspect.stack,tb())
def createControl(self,ctx,type,x,y,width,height,names,values): try: smgr = ctx.getServiceManager() ctrl = smgr.createInstanceWithContext("com.sun.star.awt.UnoControl%s" % type,ctx) ctrl_model = smgr.createInstanceWithContext("com.sun.star.awt.UnoControl%sModel" % type,ctx) ctrl_model.setPropertyValues(names,values) ctrl.setModel(ctrl_model) ctrl.setPosSize(x,y,width,height,15) return (ctrl, ctrl_model) except: log(inspect.stack,tb())
def helfer(self): try: pass except Exception as e: print(tb()) return e
def setze_hoehe_und_scrollbalken(self,y,y_desk,fenster,fenster_cont,control_innen): if self.mb.debug: log(inspect.stack) if y < y_desk-20: fenster.setPosSize(0,0,0,y + 20,8) fenster_cont.setPosSize(0,0,0,y + 20,8) else: try: PosSize = 0,0,0,y_desk control = self.mb.erzeuge_Scrollbar(fenster_cont,PosSize,control_innen) except: log(inspect.stack,tb())
def erstelle_fussnote(self,fn): if self.mb.debug: log(inspect.stack) try: text = fn.Text paras = [] fussnote = [] enum = text.createEnumeration() while enum.hasMoreElements(): paras.append(enum.nextElement()) for par in paras: enum2 = par.createEnumeration() portions = [] while enum2.hasMoreElements(): portions.append(enum2.nextElement()) # auf leeren Paragraph testen if len(portions) == 1: if portions[0].String == '': fussnote.append('\\bigskip') for portion in portions: open = 0 # kursiv if portion.CharPosture.value == 'ITALIC': fussnote.append('\\emph{') open += 1 # fett if portion.CharWeight == 150: fussnote.append('\\textbf{') open += 1 fussnote.append(portion.String) fussnote.append('}' * open) if par != paras[-1]: fussnote.append(self.leerzeile) return fussnote except: log(inspect.stack,tb())
def createControl(self, ctx, type, x, y, width, height, names, values): try: smgr = ctx.getServiceManager() ctrl = smgr.createInstanceWithContext( "com.sun.star.awt.UnoControl%s" % type, ctx) ctrl_model = smgr.createInstanceWithContext( "com.sun.star.awt.UnoControl%sModel" % type, ctx) ctrl_model.setPropertyValues(names, values) ctrl.setModel(ctrl_model) ctrl.setPosSize(x, y, width, height, 15) return (ctrl, ctrl_model) except: log(inspect.stack, tb())
def greek2latex(self,dict_eintraege,path,quelldatei,pfad_translation): if self.mb.debug: log(inspect.stack) self.dir_path = path text_translation = self.oeffne_text(pfad_translation) try: self.erstelle_html_uebersetzung(text_translation) self.ooo.close(False) self.erstelle_quelltext_html(quelldatei) self.erstelle_nav(dict_eintraege) self.erstelle_index_html() except: log(inspect.stack,tb())
def setze_hoehe_und_scrollbalken(self, y, y_desk, fenster, fenster_cont, control_innen): if self.mb.debug: log(inspect.stack) if y < y_desk - 20: fenster.setPosSize(0, 0, 0, y + 20, 8) fenster_cont.setPosSize(0, 0, 0, y + 20, 8) else: try: PosSize = 0, 0, 0, y_desk control = self.mb.erzeuge_Scrollbar(fenster_cont, PosSize, control_innen) except: log(inspect.stack, tb())
def greek2latex(self, dict_eintraege, path, quelldatei, pfad_translation): if self.mb.debug: log(inspect.stack) self.dir_path = path text_translation = self.oeffne_text(pfad_translation) try: self.erstelle_html_uebersetzung(text_translation) self.ooo.close(False) self.erstelle_quelltext_html(quelldatei) self.erstelle_nav(dict_eintraege) self.erstelle_index_html() except: log(inspect.stack, tb())
def createInstanceWithArgumentsAndContext(self, args, ctx): if self.debug: log(inspect.stack) try: self.pypath_erweitern() posSize = 0,0,0,0 win,cont = erzeuge_Dialog_Container(posSize) self.start_main(cont,ctx,path_to_extension,win) return win except Exception as e: print(str(e)) log(inspect.stack,tb())
def createInstanceWithArgumentsAndContext(self, args, ctx): if self.debug: log(inspect.stack) try: self.pypath_erweitern() posSize = 0, 0, 0, 0 win, cont = erzeuge_Dialog_Container(posSize) self.start_main(cont, ctx, path_to_extension, win) return win except Exception as e: print(str(e)) log(inspect.stack, tb())
def windowOpened(self,ev): ctx = uno.getComponentContext() smgr = ctx.ServiceManager toolkit = smgr.createInstanceWithContext("com.sun.star.awt.Toolkit", ctx) desktop = smgr.createInstanceWithContext( "com.sun.star.frame.Desktop",ctx) try: # um den Listener nur einmal anzusprechen if g.geladen == 'neu': g.geladen = 'alt' URL="private:factory/swriter" self.frame.loadComponentFromURL(URL,'_top',0,()) except Exception as e: log(inspect.stack,tb())
def schreibe_logfile_kopfzeile(self): try: path = join(self.location_debug_file,'organon_log.txt') text = '################\r\n' \ '\r\n' \ 'Organon opened\r\n' \ '\r\n'\ '################\r\n' with open(path , "a") as file: file.write(text) except: print(tb())
def schreibe_logfile_kopfzeile(self): try: path = join(self.location_debug_file, 'organon_log.txt') text = '################\r\n' \ '\r\n' \ 'Organon opened\r\n' \ '\r\n'\ '################\r\n' with open(path, "a") as file: file.write(text) except: print(tb())
def actionPerformed(self,ev): if self.mb.debug: log(inspect.stack) try: if ev.ActionCommand == 'text1': self.filepicker('text1') elif ev.ActionCommand == 'text2': self.filepicker('text2') elif ev.ActionCommand == 'speicherordner': self.folderpicker() elif ev.ActionCommand == 'search': args = self.suchbefehle_erstellen() (pfad1,pfad2, speicherordner, ) = args if self.pruefe_pfad(pfad1,'Source'): text1,name1 = self.oeffne_text(pfad1) else: return if self.pruefe_pfad(pfad2,'Translation'): pass else: return if not os.path.exists(speicherordner): ntext = LANG.KEIN_SPEICHERORT self.nachricht(ntext) return args = text1,pfad1,speicherordner,pfad2 s = Liste_Erstellen(args,self.mb) s.run() except: log(inspect.stack,tb())
def format_argues(self,argues): try: a = [] for arg in argues: if arg in ('self','ev'): continue inhalt = str(argues[arg]) if 'pyuno object' in inhalt: inhalt = 'pyuno object' a.append((arg,inhalt)) a = str(a)[1:-1] return a except: print(tb()) return 'Fehler'
def format_argues(self, argues): try: a = [] for arg in argues: if arg in ('self', 'ev'): continue inhalt = str(argues[arg]) if 'pyuno object' in inhalt: inhalt = 'pyuno object' a.append((arg, inhalt)) a = str(a)[1:-1] return a except: print(tb()) return 'Fehler'
def sl_erzeugen(): def sleeper(fkt,fkt2,dict_sb,orga_sb): import time while orga_sb == None: time.sleep(.1) orga_sb,seitenleiste = fkt() fkt2(orga_sb,dict_sb) def resume(orga_sb,dict_sb): orga_sb.setState(True) import time time.sleep(.2) dict_sb['setze_sidebar_design']() dict_sb['sb_closed'] = False dict_sb['orga_sb'] = orga_sb try: dict_sb = self.ms.dict_sb orga_sb,seitenleiste = get_seitenleiste() if seitenleiste and not orga_sb: # LO dict_sb['seitenleiste'] = seitenleiste from threading import Thread t = Thread(target=sleeper,args=(get_seitenleiste,resume,dict_sb,orga_sb)) t.start() elif seitenleiste and orga_sb: # OO orga_sb.setState(True) dict_sb['setze_sidebar_design']() dict_sb['sb_closed'] = False dict_sb['seitenleiste'] = seitenleiste dict_sb['orga_sb'] = orga_sb except: log(inspect.stack,tb())
def sl_erzeugen(): def sleeper(fkt, fkt2, dict_sb, orga_sb): import time while orga_sb == None: time.sleep(.1) orga_sb, seitenleiste = fkt() fkt2(orga_sb, dict_sb) def resume(orga_sb, dict_sb): orga_sb.setState(True) import time time.sleep(.2) dict_sb['setze_sidebar_design']() dict_sb['sb_closed'] = False dict_sb['orga_sb'] = orga_sb try: dict_sb = self.ms.dict_sb orga_sb, seitenleiste = get_seitenleiste() if seitenleiste and not orga_sb: # LO dict_sb['seitenleiste'] = seitenleiste from threading import Thread t = Thread(target=sleeper, args=(get_seitenleiste, resume, dict_sb, orga_sb)) t.start() elif seitenleiste and orga_sb: # OO orga_sb.setState(True) dict_sb['setze_sidebar_design']() dict_sb['sb_closed'] = False dict_sb['seitenleiste'] = seitenleiste dict_sb['orga_sb'] = orga_sb except: log(inspect.stack, tb())
def merge(self, a, b, path=None): ''' This method is an adjusted version from: http://stackoverflow.com/questions/7204805/python-dictionaries-of-dictionaries-merge merges b into a ''' if path is None: path = [] try: for key in b: if key in a: if key == 'zuletzt_geladene_Projekte': a[key] = b[key] elif isinstance(a[key], dict) and isinstance(b[key], dict): if key in self.designs: self._treat_design(a, b, key, path) elif key == 'designs': self.designs, self.fehlende = self._update_designs( a, b) self.merge(a[key], b[key], path + [str(key)]) else: self.merge(a[key], b[key], path + [str(key)]) elif a[key] == b[key]: pass # same leaf value elif isinstance(a[key], list) and isinstance(b[key], list): for idx, val in enumerate(b[key]): a[key][idx] = self.merge( a[key][idx], b[key][idx], path + [str(key), str(idx)]) else: # ueberschreiben der defaults mit alten Werten a[key] = b[key] else: # hier werden nur in b vorhandene keys gesetzt # daher werden auch alte designs mit eigenem Namen ignoriert # nur vorhandene shortcuts werden in den dict eingetragen. Daher # existiert in a kein key von b und muss hier gesetzt werden. if 'shortcuts' in path: a[key] = b[key] return a except Exception as e: print(tb()) return None
def pypath_erweitern(self): if self.debug: log(inspect.stack) try: #ctx = uno.getComponentContext() #smgr = ctx.ServiceManager #desktop = smgr.createInstanceWithContext( "com.sun.star.frame.Desktop",ctx) #frame = desktop.Frames.getByIndex(0) path_to_current = __file__.decode("utf-8") pyPath = path_to_current.split('factory.py')[0] sys.path.append(pyPath) pyPath_lang = pyPath.replace('py', 'languages') sys.path.append(pyPath_lang) except Exception as e: log(inspect.stack, tb())
def pypath_erweitern(self): if self.debug: log(inspect.stack) try: #ctx = uno.getComponentContext() #smgr = ctx.ServiceManager #desktop = smgr.createInstanceWithContext( "com.sun.star.frame.Desktop",ctx) #frame = desktop.Frames.getByIndex(0) path_to_current = __file__.decode("utf-8") pyPath = path_to_current.split('factory.py')[0] sys.path.append(pyPath) pyPath_lang = pyPath.replace('py','languages') sys.path.append(pyPath_lang) except Exception as e: log(inspect.stack,tb())
def mousePressed(self, ev): if debug: log(inspect.stack) try: projekt_pfad = ev.Source.Model.HelpText # Das Editfeld ueberdeckt kurzzeitig das Startmenu fuer eine bessere Anzeige control, model = self.menu.createControl(self.menu.ctx, "Edit", 0, 0, 1500, 1500, (), ()) model.BackgroundColor = KONST.FARBE_HF_HINTERGRUND self.menu.cont.addControl('wer', control) self.menu.erzeuge_Menu() self.menu.Menu_Bar.class_Projekt.lade_Projekt(False, projekt_pfad) self.menu.cont.dispose() except: log(inspect.stack, tb())
def mousePressed(self, ev): if debug: log(inspect.stack) try: projekt_pfad = ev.Source.Model.HelpText # Das Editfeld ueberdeckt kurzzeitig das Startmenu fuer eine bessere Anzeige control, model = self.menu.createControl(self.menu.ctx,"Edit",0,0,1500,1500,(),() ) model.BackgroundColor = KONST.FARBE_HF_HINTERGRUND self.menu.cont.addControl('wer',control) self.menu.erzeuge_Menu() self.menu.Menu_Bar.class_Projekt.lade_Projekt(False,projekt_pfad) self.menu.cont.dispose() except: log(inspect.stack,tb())
def start_main(window,ctx,tabs,path_to_extension,win,factory): try: ctx = uno.getComponentContext() smgr = ctx.ServiceManager desktop = smgr.createInstanceWithContext( "com.sun.star.frame.Desktop",ctx) frame = desktop.Frames.getByIndex(0) if desktop.ActiveFrame != None: frame = desktop.ActiveFrame if settings_orga['organon_farben']['design_office']: if 'OpenOffice' in frame.Title: # in OO muss die Componente neu gestartet werden, damit das # Lineal eingefaerbt wird. listener = Top_Window_Listener(frame) frame.ContainerWindow.addTopWindowListener(listener) dialog = window debug = settings_orga['log_config']['output_console'] import menu_start args = (pd, dialog, ctx, tabs, path_to_extension, win, dict_sb, debug, factory, log, class_Log, KONST, settings_orga) Menu_Start = menu_start.Menu_Start(args) Menu_Start.erzeuge_Startmenu() except Exception as e: print(e) log(inspect.stack,tb())
def wurde_als_template_geoeffnet(self): if debug: log(inspect.stack) try: enum = self.desktop.Components.createEnumeration() comps = [] while enum.hasMoreElements(): comps.append(enum.nextElement()) # Wenn ein neues Dokument geoeffnet wird, gibt es bei der Initialisierung # noch kein Fenster, aber die Komponente wird schon aufgefuehrt. doc = comps[0] # Pruefen, ob doc von Organon erzeugt wurde ok = False for a in doc.Args: if a.Name == 'DocumentTitle': if a.Value.split(';')[0] == 'opened by Organon': ok = True projekt_pfad = a.Value.split(';')[1] break if not ok: return False self.cont.dispose() self.erzeuge_Menu() prop2 = uno.createUnoStruct("com.sun.star.beans.PropertyValue") prop2.Name = 'Overwrite' prop2.Value = True doc.storeAsURL(projekt_pfad, (prop2, )) sys_pfad = uno.fileUrlToSystemPath(projekt_pfad) orga_name = os.path.basename(sys_pfad).split('.')[0] + '.organon' sys_pfad1 = sys_pfad.split(orga_name)[0] pfad = os.path.join(sys_pfad1, orga_name, orga_name) self.Menu_Bar.class_Projekt.lade_Projekt(False, pfad) except: log(inspect.stack, tb())
def speicher(self,inhalt,mode,pfad = None): if self.mb.debug: log(inspect.stack) try: if pfad == None: pfad = os.path.join(self.path,self.dateiname+'.tex') if not os.path.exists(os.path.dirname(pfad)): os.makedirs(os.path.dirname(pfad)) content = ''.join(inhalt) with codecs_open( pfad, mode,"utf-8") as file: file.write(content) except: log(inspect.stack,tb())
def merge(self,a, b, path=None): ''' This method is an adjusted version from: http://stackoverflow.com/questions/7204805/python-dictionaries-of-dictionaries-merge merges b into a ''' if path is None: path = [] try: for key in b: if key in a: if key == 'zuletzt_geladene_Projekte': a[key] = b[key] elif isinstance(a[key], dict) and isinstance(b[key], dict): if key in self.designs: self._treat_design(a, b, key, path) elif key == 'designs': self.designs,self.fehlende = self._update_designs(a,b) self.merge(a[key], b[key], path + [str(key)]) else: self.merge(a[key], b[key], path + [str(key)]) elif a[key] == b[key]: pass # same leaf value elif isinstance(a[key], list) and isinstance(b[key], list): for idx, val in enumerate(b[key]): a[key][idx] = self.merge(a[key][idx], b[key][idx], path + [str(key), str(idx)]) else: # ueberschreiben der defaults mit alten Werten a[key] = b[key] else: # hier werden nur in b vorhandene keys gesetzt # daher werden auch alte designs mit eigenem Namen ignoriert # nur vorhandene shortcuts werden in den dict eingetragen. Daher # existiert in a kein key von b und muss hier gesetzt werden. if 'shortcuts' in path: a[key] = b[key] return a except Exception as e: print(tb()) return None
def wurde_als_template_geoeffnet(self): if debug: log(inspect.stack) try: enum = self.desktop.Components.createEnumeration() comps = [] while enum.hasMoreElements(): comps.append(enum.nextElement()) # Wenn ein neues Dokument geoeffnet wird, gibt es bei der Initialisierung # noch kein Fenster, aber die Komponente wird schon aufgefuehrt. doc = comps[0] # Pruefen, ob doc von Organon erzeugt wurde ok = False for a in doc.Args: if a.Name == 'DocumentTitle': if a.Value.split(';')[0] == 'opened by Organon': ok = True projekt_pfad = a.Value.split(';')[1] break if not ok: return False self.cont.dispose() self.erzeuge_Menu() prop2 = uno.createUnoStruct("com.sun.star.beans.PropertyValue") prop2.Name = 'Overwrite' prop2.Value = True doc.storeAsURL(projekt_pfad,(prop2,)) sys_pfad = uno.fileUrlToSystemPath(projekt_pfad) orga_name = os.path.basename(sys_pfad).split('.')[0] + '.organon' sys_pfad1 = sys_pfad.split(orga_name)[0] pfad = os.path.join(sys_pfad1,orga_name,orga_name) self.Menu_Bar.class_Projekt.lade_Projekt(False,pfad) except: log(inspect.stack,tb())
def lade_Komponente_neu(self): if debug: log(inspect.stack) ctx = uno.getComponentContext() smgr = ctx.ServiceManager desktop = smgr.createInstanceWithContext( "com.sun.star.frame.Desktop",ctx) try: from threading import Thread def sleeper(desktop1): URL="private:factory/swriter" desktop1.ActiveFrame.loadComponentFromURL(URL,'_top','',()) t = Thread(target=sleeper,args=(desktop,)) t.start() except Exception as e: log(inspect.stack,tb())
def verbotene_buchstaben_auswechseln(self,content): if self.mb.debug: log(inspect.stack) try: ausgewechselte = [] content = ''.join(content) for b in verbotene_Buchstaben: anz = content.count(b) if anz > 0: if verbotene_Buchstaben[b] == '': tausch = 'XXX %s XXX'%anz else: tausch = verbotene_Buchstaben[b] content = content.replace(b,tausch) mitteil = b , str(anz) , b.encode("unicode_escape"),tausch ausgewechselte.append(mitteil) pfad_a = os.path.join(self.path,'exchanged_letters.txt') a2 = 10 b = 15 c = 20 with codecs_open( pfad_a, 'w',"utf-8") as file: top = 'Symbol'.ljust(a2) + u'Amount'.ljust(b) + 'Unicode Number'.ljust(c)+ 'exchanged with:' + '\r\n' file.write(top) for aus in ausgewechselte: symbol = aus[0].ljust(a2) + aus[1].ljust(b) + aus[2].ljust(c) + aus[3].ljust(c) + '\r\n' with codecs_open( pfad_a, 'a',"utf-8") as file: file.write(symbol) return content except: log(inspect.stack,tb())
def actionPerformed(self, ev): if self.mb.debug: log(inspect.stack) try: if ev.ActionCommand == 'text1': self.filepicker('text1') elif ev.ActionCommand == 'text2': self.filepicker('text2') elif ev.ActionCommand == 'speicherordner': self.folderpicker() elif ev.ActionCommand == 'search': args = self.suchbefehle_erstellen() ( pfad1, pfad2, speicherordner, ) = args if self.pruefe_pfad(pfad1, 'Source'): text1, name1 = self.oeffne_text(pfad1) else: return if self.pruefe_pfad(pfad2, 'Translation'): pass else: return if not os.path.exists(speicherordner): ntext = LANG.KEIN_SPEICHERORT Popup(self.mb, 'warning').text = ntext return args = text1, pfad1, speicherordner, pfad2 s = Liste_Erstellen(args, self.mb) s.run() except: log(inspect.stack, tb())
def lade_Komponente_neu(self): if debug: log(inspect.stack) ctx = uno.getComponentContext() smgr = ctx.ServiceManager desktop = smgr.createInstanceWithContext("com.sun.star.frame.Desktop", ctx) try: from threading import Thread def sleeper(desktop1): URL = "private:factory/swriter" desktop1.ActiveFrame.loadComponentFromURL(URL, '_top', '', ()) t = Thread(target=sleeper, args=(desktop, )) t.start() except Exception as e: log(inspect.stack, tb())
def format_argues(self,argues): try: a = [] for arg in argues: if arg in ('self','ev'): continue try: inhalt = str(argues[arg]) except Exception as e: inhalt = 'Fehler: ' + str(e) + '\r\n' if 'pyuno object' in inhalt: inhalt = 'pyuno object' a.append((arg,inhalt)) a = a[1:-1] return a except: print(tb()) return 'Fehler'
def suche(self): # Fuer eine Fehlersuche, die bei jedem Methodenaufruf gestartet wird try: ctx = uno.getComponentContext() smgr = ctx.ServiceManager desktop = smgr.createInstanceWithContext( "com.sun.star.frame.Desktop",ctx) doc = desktop.getCurrentComponent() secs = doc.TextSections el_names = secs.ElementNames for n in el_names: if 'Bereich' in n: pd() except Exception as e: print(tb()) return e return None
def actionPerformed(self, ev): if debug: log(inspect.stack) try: if ev.ActionCommand == 'neues_projekt': self.menu.cont.dispose() self.menu.erzeuge_Menu() self.menu.Menu_Bar.class_Projekt.dialog_neues_projekt_anlegen() elif ev.ActionCommand == 'projekt_laden': self.menu.cont.dispose() self.menu.erzeuge_Menu() self.menu.Menu_Bar.class_Projekt.lade_Projekt() elif ev.ActionCommand == 'anleitung_laden': pfad = self.get_Org_description_path() self.menu.cont.dispose() self.menu.erzeuge_Menu() self.menu.Menu_Bar.class_Projekt.lade_Projekt(False, pfad) self.menu.Menu_Bar.anleitung_geladen = True except: log(inspect.stack, tb())
def set_konst(): try: sett = settings_orga # ORGANON DESIGN KONST.FARBE_HF_HINTERGRUND = sett['organon_farben']['hf_hintergrund'] KONST.FARBE_MENU_HINTERGRUND = sett['organon_farben'][ 'menu_hintergrund'] KONST.FARBE_MENU_SCHRIFT = sett['organon_farben']['menu_schrift'] KONST.FARBE_SCHRIFT_ORDNER = sett['organon_farben']['schrift_ordner'] KONST.FARBE_SCHRIFT_DATEI = sett['organon_farben']['schrift_datei'] KONST.FARBE_AUSGEWAEHLTE_ZEILE = sett['organon_farben'][ 'ausgewaehlte_zeile'] KONST.FARBE_EDITIERTE_ZEILE = sett['organon_farben']['editierte_zeile'] KONST.FARBE_GEZOGENE_ZEILE = sett['organon_farben']['gezogene_zeile'] KONST.FARBE_GLIEDERUNG = sett['organon_farben']['gliederung'] KONST.FARBE_TRENNER_HINTERGRUND = sett['organon_farben'][ 'trenner_farbe_hintergrund'] KONST.FARBE_TRENNER_SCHRIFT = sett['organon_farben'][ 'trenner_farbe_schrift'] KONST.FARBE_TABS_HINTERGRUND = sett['organon_farben'][ 'tabs_hintergrund'] KONST.FARBE_TABS_SCHRIFT = sett['organon_farben']['tabs_schrift'] KONST.FARBE_TABS_SEL_HINTERGRUND = sett['organon_farben'][ 'tabs_sel_hintergrund'] KONST.FARBE_TABS_SEL_SCHRIFT = sett['organon_farben'][ 'tabs_sel_schrift'] KONST.FARBE_TABS_TRENNER = sett['organon_farben']['tabs_trenner'] KONST.FARBE_LINIEN = sett['organon_farben']['linien'] KONST.FARBE_DEAKTIVIERT = sett['organon_farben']['deaktiviert'] except Exception as e: log(inspect.stack, tb())
def set_app_style(): if debug: log(inspect.stack) try: ctx = uno.getComponentContext() smgr = ctx.ServiceManager toolkit = smgr.createInstanceWithContext("com.sun.star.awt.Toolkit", ctx) desktop = smgr.createInstanceWithContext("com.sun.star.frame.Desktop", ctx) frame = desktop.Frames.getByIndex(0) comp = frame.ComponentWindow rot = 16275544 hf = KONST.FARBE_HF_HINTERGRUND menu = KONST.FARBE_MENU_HINTERGRUND schrift = KONST.FARBE_SCHRIFT_DATEI menu_schrift = KONST.FARBE_MENU_SCHRIFT selected = KONST.FARBE_AUSGEWAEHLTE_ZEILE ordner = KONST.FARBE_SCHRIFT_ORDNER sett = settings_orga['organon_farben']['office'] def get_farbe(value): if isinstance(value, int): return value else: return settings_orga['organon_farben'][value] # Kann button_schrift evt. herausgenommen werden? button_schrift = get_farbe(sett['button_schrift']) statusleiste_schrift = get_farbe(sett['statusleiste_schrift']) statusleiste_hintergrund = get_farbe(sett['statusleiste_hintergrund']) felder_hintergrund = get_farbe(sett['felder_hintergrund']) felder_schrift = get_farbe(sett['felder_schrift']) # Sidebar sidebar_eigene_fenster_hintergrund = get_farbe( sett['sidebar']['eigene_fenster_hintergrund']) sidebar_selected_hintergrund = get_farbe( sett['sidebar']['selected_hintergrund']) sidebar_selected_schrift = get_farbe( sett['sidebar']['selected_schrift']) sidebar_schrift = get_farbe(sett['sidebar']['schrift']) trenner_licht = get_farbe(sett['trenner_licht']) trenner_schatten = get_farbe(sett['trenner_schatten']) # Lineal OO_anfasser_trenner = get_farbe(sett['OO_anfasser_trenner']) OO_lineal_tab_zwischenraum = get_farbe( sett['OO_lineal_tab_zwischenraum']) OO_schrift_lineal_sb_liste = get_farbe( sett['OO_schrift_lineal_sb_liste']) LO_anfasser_text = get_farbe(sett['LO_anfasser_text']) LO_tabsumrandung = get_farbe(sett['LO_tabsumrandung']) LO_lineal_bg_innen = get_farbe(sett['LO_lineal_bg_innen']) LO_tab_fuellung = get_farbe(sett['LO_tab_fuellung']) LO_tab_trenner = get_farbe(sett['LO_tab_trenner']) LO = ('LibreOffice' in frame.Title) STYLES = { # Allgemein 'ButtonRolloverTextColor': button_schrift, # button rollover 'FieldColor': felder_hintergrund, # Hintergrund Eingabefelder 'FieldTextColor': felder_schrift, # Schrift Eingabefelder 'RadioCheckTextColor': statusleiste_schrift, #k.A. # Trenner 'LightColor': trenner_licht, # Fenster Trenner 'ShadowColor': trenner_schatten, # Fenster Trenner # OO Lineal + Trenner 'DarkShadowColor': ( LO_anfasser_text if LO # LO Anfasser + Lineal Text else OO_anfasser_trenner ), # OO Anfasser + Document Fenster Trenner 'WindowTextColor': ( schrift if LO # Felder (Navi) Schriftfarbe Sidebar else OO_schrift_lineal_sb_liste ), # Felder (Navi) Schriftfarbe Sidebar + OO Lineal Schriftfarbe # Sidebar 'LabelTextColor': sidebar_schrift, # Schriftfarbe Sidebar + allg Dialog 'DialogColor': sidebar_eigene_fenster_hintergrund, # Hintergrund Sidebar Dialog 'FaceColor': ( hf if LO # LO Formatvorlagen Treeview Verbinder else hf), # OO Hintergrund Organon + Lineal + Dropdowns 'WindowColor': ( hf if LO # LO Dialog Hintergrund else OO_lineal_tab_zwischenraum), # OO Lineal Tabzwischenraum 'HighlightColor': sidebar_selected_hintergrund, # Sidebar selected Hintergrund 'HighlightTextColor': sidebar_selected_schrift, # Sidebar selected Schrift # 'ActiveBorderColor' : rot,#k.A. # 'ActiveColor' : rot,#k.A. # 'ActiveTabColor' : rot,#k.A. # 'ActiveTextColor' : rot,#k.A. # 'ButtonTextColor' : rot,# button Textfarbe / LO Statuszeile Textfarbe # 'CheckedColor' : rot,#k.A. # 'DeactiveColor' : deaktiviert, # 'DeactiveBorderColor' : deaktiviert,#k.A. # 'DeactiveTextColor' : deaktiviert,#k.A. # 'DialogTextColor' : rot,#k.A. # 'DisableColor' : rot, # 'FieldRolloverTextColor' : rot,#k.A. # 'GroupTextColor' : rot,#k.A. # 'HelpColor' : rot,#k.A. # 'HelpTextColor' : rot,#k.A. # 'InactiveTabColor' : rot,#k.A. # 'InfoTextColor' : rot,#k.A. # 'MenuBarColor' : rot,#k.A. # 'MenuBarTextColor' : rot,#k.A. # 'MenuBorderColor' : rot,#k.A. # 'MenuColor' : rot,#k.A. # 'MenuHighlightColor' : rot,#k.A. # 'MenuHighlightTextColor' : rot,#k.A. # 'MenuTextColor' : rot,#k.A. # 'MonoColor' : rot, #k.A. # 'WorkspaceColor' : rot, #k.A. #erzeugen Fehler: #'FaceGradientColor' : 502, #'SeparatorColor' : 502, } def stilaenderung(win, ignore=[]): for s in STYLES: if s in ignore: pass else: try: val = STYLES[s] setattr(win.StyleSettings, s, val) except Exception as e: pass win.setBackground( statusleiste_hintergrund) # Hintergrund Statuszeile win.setForeground(statusleiste_schrift) # Schrift Statuszeile top_wins = [] for i in range(toolkit.TopWindowCount): top_wins.append(toolkit.getTopWindow(i)) # folgende Properties wuerden die Eigenschaften # der Office Menubar und aller Buttons setzen ignore = [ 'ButtonTextColor', 'LightColor', 'MenuBarTextColor', 'MenuBorderColor', 'ShadowColor' ] for t in top_wins: stilaenderung(t, ignore) # Hier wird in OO auch das Lineal gesetzt # Es kann nicht einzeln angesprochen werden layoutmgr = frame.LayoutManager statusbar = layoutmgr.getElement( "private:resource/statusbar/statusbar") try: stilaenderung(statusbar.RealInterface) except: pass STYLES_LINEAL = { 'ShadowColor': LO_tabsumrandung, # Tabsumrandung 'WindowColor': LO_lineal_bg_innen, #Lineal: Hintergrund innen 'WorkspaceColor': LO_tab_fuellung, # Tabhalter Fuellung 'DialogColor': LO_tab_trenner, #Lineal Seitenraender } for t in comp.Windows: try: # Bordercolor stilaenderung(t) try: for j in t.Windows: # Lineal nur in LO for s in STYLES_LINEAL: val = STYLES_LINEAL[s] try: setattr(j.StyleSettings, s, val) except: pass #j.setBackground(rot) # Lineal Leiste Hintergrund in LO except Exception as e: pass except Exception as e: log(inspect.stack, tb()) except Exception as e: log(inspect.stack, tb())
def createUIElement(self, url, args): cmd = url.split('/')[-1] try: xParentWindow = None xFrame = None xUIElement = None for arg in args: if arg.Name == "Frame": xFrame = arg.Value elif arg.Name == "ParentWindow": xParentWindow = arg.Value elif arg.Name == "Sidebar": sidebar = arg.Value elif arg.Name == "Theme": theme = arg.Value xUIElement = XUIPanel(self.ctx, xFrame, xParentWindow, url, theme) # getting the real panel window # for setting the content xUIElement.getRealInterface() panelWin = xUIElement.Window # panelWin has to be set visible panelWin.Visible = True conts = dict_sb['controls'] if cmd not in conts: conts.update({cmd: (xUIElement, sidebar, xParentWindow, args)}) dict_sb.update({'controls': conts}) else: cont = dict_sb['controls'][cmd][0] cont.dispose() conts.update({cmd: (xUIElement, sidebar, xParentWindow, args)}) dict_sb.update({'controls': conts}) if dict_sb['erzeuge_sb_layout'] != None: dict_sb['sb_closed'] = False if cmd == 'organon_sidebar': dict_sb['sb_closed'] = False dict_sb['erzeuge_sb_layout']() else: dict_sb['sb_closed'] = True dict_sb['erzeuge_sb_search_layout']() else: pos_y = 10 height = 50 width = 282 panelWin = xUIElement.Window text = u'No Project loaded' prop_names = ('Label', ) prop_values = (text, ) control, model = self.createControl(self.ctx, "FixedText", 10, pos_y, width, height, prop_names, prop_values) panelWin.addControl('Synopsis', control) return xUIElement except Exception as e: log(inspect.stack, tb())
def main(): # enable TDLib logging td_json_client_execute( None, "{\"@type\":\"setLogVerbosityLevel\", \"new_verbosity_level\":3}") client = td_json_client_create() #td_json_client_send(client, "{\"@type\":\"setProxy\", \"@extra\":1, \"proxy\":{\"@type\":\"proxySocks5\", \"server\":\"" LOCAL_SOCKS5_HOSTNAME_STR "\", \"port\":" LOCAL_SOCKS5_PORT_STR ", \"username\":\"" LOCAL_SOCKS5_USERNAME_STR "\", \"password\":\"" LOCAL_SOCKS5_PASSWORD_STR "\"}}") #error { code = 400, message = "Failed to parse JSON object as TDLib request: Unknown class "setProxy"" } td_json_client_send( client, "{\"@type\":\"addProxy\", \"@extra\":1, \"server\":\"%s\", \"port\":%s, \"enable\":true, \"type\":{\"@type\":\"proxyTypeSocks5\", \"username\":\"%s\", \"password\":\"%s\"}}" % ( local_vars.LOCAL_SOCKS5_HOSTNAME_STR, local_vars.LOCAL_SOCKS5_PORT_STR, local_vars.LOCAL_SOCKS5_USERNAME_STR, local_vars.LOCAL_SOCKS5_PASSWORD_STR, )) test_incorrect_queries = False if test_incorrect_queries: td_json_client_execute( None, "{\"@type\":\"setLogVerbosityLevel\", \"new_verbosity_level\":3}") td_json_client_execute(None, "") td_json_client_execute(None, "test") td_json_client_execute(None, "\"test\"") td_json_client_execute(None, "{\"@type\":\"test\", \"@extra\":1}") td_json_client_send(client, "{\"@type\":\"getFileMimeType\"}") td_json_client_send(client, "{\"@type\":\"getFileMimeType\", \"@extra\":1}") td_json_client_send( client, "{\"@type\":\"getFileMimeType\", \"@extra\":null}") td_json_client_send(client, "{\"@type\":\"test\"}") td_json_client_send(client, "[]") td_json_client_send(client, "{\"@type\":\"test\", \"@extra\":1}") td_json_client_send( client, "{\"@type\":\"sendMessage\", \"chat_id\":true, \"@extra\":1}") td_json_client_send(client, "test") WAIT_TIMEOUT = 1.0 # seconds while True: result = td_json_client_receive(client, WAIT_TIMEOUT) if result: #if (result is UpdateAuthorizationState with authorizationStateClosed) { # break #} print("result: '%s'" % cooljson(result)) res_type = result["@type"] if res_type == "updateAuthorizationState": authorization_state = result["authorization_state"] auth_type = authorization_state["@type"] if auth_type == "authorizationStateWaitTdlibParameters": sendTdlibParameters(client) continue if auth_type == "authorizationStateWaitEncryptionKey": sendDbEncryptionKey(client) continue if auth_type == "authorizationStateWaitPhoneNumber": sendBotHashAuth(client) continue if auth_type == "authorizationStateReady": print("\n\n\n\n\nLOGGED_IN\n\n\n\n\n") td_json_client_send( client, "{\"@type\":\"sendMessage\", \"chat_id\":%s, \"@extra\":3, \"input_message_content\":{\"@type\":\"inputMessageText\", \"text\":{\"@type\":\"formattedText\",\"text\":\"td flood test py bot logged in\"}}}" % local_vars.LOCAL_CHAT_ID_STR) continue print("unknown auth state update, exiting.") break """ { "@type": "updateNewMessage", "message": { "@type": "message", "author_signature": "", "can_be_deleted_for_all_users": false, "can_be_deleted_only_for_self": false, "can_be_edited": false, "can_be_forwarded": true, "chat_id": 123, "contains_unread_mention": false, "content": { "@type": "messageText", "text": { "@type": "formattedText", "entities": [], "text": "some ping" } }, "date": 1580340018, "edit_date": 0, "id": 2513436672, "is_channel_post": false, "is_outgoing": false, "media_album_id": "0", "reply_to_message_id": 0, "restriction_reason": "", "sender_user_id": 123, "ttl": 0, "ttl_expires_in": 0.0, "via_bot_user_id": 0, "views": 0 } } """ msg_text = None if res_type == "updateNewMessage": msg = result["message"] if not msg[ "is_outgoing"]: # and not "messageSendingStatePending" in result: sender_user_id = msg["sender_user_id"] if int(local_vars.LOCAL_BOT_USER_ID_STR) != int( sender_user_id): #skip messages from self reply_with_text = True if "content" in msg: content = msg["content"] content_at_type = content["@type"] if "text" in content: content_text = content["text"] if "text" in content_text: msg_text = content_text["text"] reply_text = "A message received with text `\"%s\"`" % msg_text else: reply_text = "Some message received with no `text` field in `content.text`, `content.text`=`\"%s\"`" % json.dumps( content_text) else: try: reply_with_text = False if content_at_type == "messageAnimation": input_message_content = compose_input_message_content_for_messageAnimation( result, msg, content) else: if content_at_type == "messageSticker": input_message_content = compose_input_message_content_for_messageSticker( result, msg, content) else: reply_with_text = True reply_text = "Some message received with no `text` field in `content`, and it's neither `messageSticker` nor `messageAnimation`." except Exception as ex: reply_with_text = True reply_text = "Exception while `Failed to format a reply to incoming `messageAnimation` or `messageSticker``: %s" % str( ex) print(reply_text) from traceback import print_exc as tb tb() ###1 else: reply_text = "Some message received with no `content` field in `message`" if reply_with_text: input_message_content = { "@type": "inputMessageText", "text": { "@type": "formattedText", "text": reply_text } } reply = { "@type": "sendMessage", "chat_id": local_vars.LOCAL_CHAT_ID_STR, "@extra": 3, "input_message_content": input_message_content, } td_json_client_send(client, json.dumps(reply)) continue if res_type == "updateMessageSendFailed": try: code = int(result["error_code"]) error_message = result["error_message"] prefix = "FLOOD_WAIT_" """ for (auto prefix : {Slice("FLOOD_WAIT_"), Slice("SLOWMODE_WAIT_"), Slice("2FA_CONFIRM_WAIT_"), Slice("TAKEOUT_INIT_DELAY_")}) { if (begins_with(msg, prefix)) { timeout = clamp(to_integer<int>(msg.substr(prefix.size())), 1, 14 * 24 * 60 * 60); break; } } """ if code == 429 and error_message.startswith( prefix ): # todo also implement the above C++ code here seconds = clamp(int(error_message[len(prefix):]), 1, 14 * 24 * 60 * 60) print( "updateMessageSendFailed: 429 %s, sleeping %s sec." % ( error_message, str(seconds), )) sleep(seconds) timewait_sec = seconds else: timewait_sec = float( result["message"]["sending_state"]["retry_after"]) print( "updateMessageSendFailed: %s %s, sleeping %s sec." % (str(code), error_message, str(timewait_sec))) sleep(timewait_sec) if result["message"]["sending_state"]["can_retry"]: msg_text = result["message"]["content"]["text"]["text"] retry_sendmsg_request = { "@type": "sendMessage", "chat_id": result["message"]["chat_id"], "@extra": 4, "input_message_content": { "@type": "inputMessageText", "text": { "@type": "formattedText", "text": """[overslept after sleeping %s seconds; redelivery after error %s %s]; failed msg text: %s""" % (str(timewait_sec), str(code), error_message, msg_text) } } } td_json_client_send(client, json.dumps(retry_sendmsg_request)) except Exception as ex: print("Exception:", ex, "sleeping infinity") while True: sleep(10 * 3600) #one hour """ updateMessageSendFailed { message = message { id = 2592079874 sender_user_id = 680736482 chat_id = -1001289380798 sending_state = messageSendingStateFailed { error_code = 429 error_message = "Too Many Requests: retry after 4" can_retry = true retry_after = 3.999928 } scheduling_state = null is_outgoing = true can_be_edited = false can_be_forwarded = true can_be_deleted_only_for_self = true can_be_deleted_for_all_users = false is_channel_post = false contains_unread_mention = false date = 1580341008 edit_date = 0 forward_info = null reply_to_message_id = 0 ttl = 0 ttl_expires_in = 0.000000 via_bot_user_id = 0 author_signature = "" views = 0 media_album_id = 0 restriction_reason = "" content = messageText { text = formattedText { text = "some message received with text 'ы'" entities = vector[0] { } } web_page = null } reply_markup = null } old_message_id = 2592079873 error_code = 429 error_message = "Too Many Requests: retry after 4" } // after hypn-dirty-fix at NetQueryDispatcher.cpp : { "@type": "updateMessageSendFailed", "error_code": 429, "error_message": "FLOOD_WAIT_4", "message": { "@type": "message", "author_signature": "", "can_be_deleted_for_all_users": false, "can_be_deleted_only_for_self": true, "can_be_edited": false, "can_be_forwarded": true, "chat_id": 123, "contains_unread_mention": false, "content": { "@type": "messageText", "text": { "@type": "formattedText", "entities": [], "text": "td flood test py bot logged in" } }, "date": 1580350693, "edit_date": 0, "id": 3711959570, "is_channel_post": false, "is_outgoing": true, "media_album_id": "0", "reply_to_message_id": 0, "restriction_reason": "", "sender_user_id": 123, "sending_state": { "@type": "messageSendingStateFailed", "can_retry": true, "error_code": 429, "error_message": "FLOOD_WAIT_4", "retry_after": 0.0 }, "ttl": 0, "ttl_expires_in": 0.0, "via_bot_user_id": 0, "views": 0 }, "old_message_id": 3711959569 } """ td_json_client_destroy(client)