04-06-2025_large_update #35
							
								
								
									
										395
									
								
								wirepy.py
									
									
									
									
									
								
							
							
						
						
									
										395
									
								
								wirepy.py
									
									
									
									
									
								
							@@ -110,79 +110,6 @@ class FrameWidgets(ttk.Frame):
 | 
			
		||||
        self.exp_pic = tk.PhotoImage(file=r"/usr/share/icons/lx-icons/48/wg_export.png")
 | 
			
		||||
        self.warning_pic = tk.PhotoImage(file=r"/usr/share/icons/lx-icons/64/error.png")
 | 
			
		||||
 | 
			
		||||
        def update():
 | 
			
		||||
            """
 | 
			
		||||
            Set on or off in file
 | 
			
		||||
            """
 | 
			
		||||
            if set_update.get() == 1:
 | 
			
		||||
                with open(set_file, "r", encoding="utf-8") as set_f2:
 | 
			
		||||
                    lines2 = set_f2.readlines()
 | 
			
		||||
                    lines2[1] = "off\n"
 | 
			
		||||
                with open(set_file, "w", encoding="utf-8") as set_f2:
 | 
			
		||||
                    set_f2.writelines(lines2)
 | 
			
		||||
 | 
			
		||||
            if set_update.get() == 0:
 | 
			
		||||
                with open(set_file, "r", encoding="utf-8") as set_f2:
 | 
			
		||||
                    lines2 = set_f2.readlines()
 | 
			
		||||
                    lines2[1] = "on\n"
 | 
			
		||||
                with open(set_file, "w", encoding="utf-8") as set_f2:
 | 
			
		||||
                    set_f2.writelines(lines2)
 | 
			
		||||
 | 
			
		||||
        def theme_change_light():
 | 
			
		||||
            """
 | 
			
		||||
            Set a light theme
 | 
			
		||||
            """
 | 
			
		||||
            if self.tk.call("ttk::style", "theme", "use") == "water-dark":
 | 
			
		||||
                self.tk.call("set_theme", "light")
 | 
			
		||||
                with open(set_file, "r", encoding="utf-8") as theme_set2:
 | 
			
		||||
                    lines3 = theme_set2.readlines()
 | 
			
		||||
                    lines3[3] = "light\n"
 | 
			
		||||
                with open(set_file, "w", encoding="utf-8") as theme_set2:
 | 
			
		||||
                    theme_set2.writelines(lines3)
 | 
			
		||||
                self.color_label()
 | 
			
		||||
 | 
			
		||||
        def theme_change_dark():
 | 
			
		||||
            """
 | 
			
		||||
            Set a dark theme
 | 
			
		||||
            """
 | 
			
		||||
            if not self.tk.call("ttk::style", "theme", "use") == "water-dark":
 | 
			
		||||
                self.tk.call("set_theme", "dark")
 | 
			
		||||
                with open(set_file, "r", encoding="utf-8") as theme_set2:
 | 
			
		||||
                    lines4 = theme_set2.readlines()
 | 
			
		||||
                    lines4[3] = "dark\n"
 | 
			
		||||
                with open(set_file, "w", encoding="utf-8") as theme_set2:
 | 
			
		||||
                    theme_set2.writelines(lines4)
 | 
			
		||||
                self.color_label()
 | 
			
		||||
 | 
			
		||||
        def tooltip():
 | 
			
		||||
            """
 | 
			
		||||
            Set True or False in a file
 | 
			
		||||
            """
 | 
			
		||||
            if set_tip.get():
 | 
			
		||||
                with open(set_file, "r", encoding="utf-8") as set_f2:
 | 
			
		||||
                    lines2 = set_f2.readlines()
 | 
			
		||||
                    lines2[5] = "False\n"
 | 
			
		||||
                with open(set_file, "w", encoding="utf-8") as set_f2:
 | 
			
		||||
                    set_f2.writelines(lines2)
 | 
			
		||||
 | 
			
		||||
            else:
 | 
			
		||||
                with open(set_file, "r", encoding="utf-8") as set_f2:
 | 
			
		||||
                    lines2 = set_f2.readlines()
 | 
			
		||||
                    lines2[5] = "True\n"
 | 
			
		||||
                with open(set_file, "w", encoding="utf-8") as set_f2:
 | 
			
		||||
                    set_f2.writelines(lines2)
 | 
			
		||||
 | 
			
		||||
        def info():
 | 
			
		||||
            def link_btn():
 | 
			
		||||
                webbrowser.open("https://git.ilunix.de/punix/Wire-Py")
 | 
			
		||||
 | 
			
		||||
            msg_t = _("Wire-Py a simple Wireguard Gui for Linux systems.\n\n"
 | 
			
		||||
                    "Wire-Py is open source software written in Python.\n\n"
 | 
			
		||||
                    "Email: polunga40@unity-mail.de also likes for donation.\n\n"
 | 
			
		||||
                    "Use without warranty!\n")
 | 
			
		||||
 | 
			
		||||
            LxTools.msg_window(img_i, img_i, _("Info"), msg_t, _("Go to Wire-Py git"), link_btn)
 | 
			
		||||
 | 
			
		||||
        # Frame for Menu
 | 
			
		||||
        self.menu_frame = ttk.Frame(self)
 | 
			
		||||
        self.menu_frame.configure(relief="flat")
 | 
			
		||||
@@ -204,15 +131,14 @@ class FrameWidgets(ttk.Frame):
 | 
			
		||||
        set_tip = tk.BooleanVar()
 | 
			
		||||
        self.settings = tk.Menu(self, relief="flat")
 | 
			
		||||
        self.options_btn.configure(menu=self.settings, style="Toolbutton")
 | 
			
		||||
        self.settings.add_checkbutton(label=_("Disable Updates"), command=update, variable=set_update)
 | 
			
		||||
        self.settings.add_checkbutton(label=_("Disable Tooltips"), command=tooltip, variable=set_tip)
 | 
			
		||||
        self.settings.add_command(label=_("Light"), command=theme_change_light)
 | 
			
		||||
        self.settings.add_command(label=_("Dark"), command=theme_change_dark)
 | 
			
		||||
        self.settings.add_checkbutton(label=_("Disable Updates"), command=lambda: self.update(set_update.get()), variable=set_update)
 | 
			
		||||
        self.settings.add_checkbutton(label=_("Disable Tooltips"), command=lambda: self.tooltip(set_tip.get()), variable=set_tip)
 | 
			
		||||
        self.settings.add_command(label=_("Light"), command=self.theme_change_light)
 | 
			
		||||
        self.settings.add_command(label=_("Dark"), command=self.theme_change_dark)
 | 
			
		||||
 | 
			
		||||
        # About BTN Menu / Label
 | 
			
		||||
        self.about_btn = ttk.Button(
 | 
			
		||||
            self.menu_frame, text=_("About"), style="Toolbutton", command=info
 | 
			
		||||
        )
 | 
			
		||||
        self.menu_frame, text=_("About"), style="Toolbutton", command=self.info)
 | 
			
		||||
        self.about_btn.grid(column=2, columnspan=2, row=0)
 | 
			
		||||
        self.readme = tk.Menu(self)
 | 
			
		||||
 | 
			
		||||
@@ -306,23 +232,12 @@ class FrameWidgets(ttk.Frame):
 | 
			
		||||
        self.peer.config(font=("Ubuntu", 9))
 | 
			
		||||
        self.peer.grid(column=0, row=4, sticky="we", padx=130)
 | 
			
		||||
 | 
			
		||||
        def enable_check_box(_):
 | 
			
		||||
            """
 | 
			
		||||
            checkbox for enable autostart Tunnel
 | 
			
		||||
            """
 | 
			
		||||
            Create.files_for_autostart()
 | 
			
		||||
            if self.l_box.size() != 0:
 | 
			
		||||
                self.wg_autostart.configure(state="normal")
 | 
			
		||||
                self.lb_rename.config(state="normal")
 | 
			
		||||
                self.lb_rename.delete(0, tk.END)
 | 
			
		||||
                self.btn_rename.config(state="normal")
 | 
			
		||||
 | 
			
		||||
        # Listbox with Scrollbar
 | 
			
		||||
        self.l_box = tk.Listbox(self.lb_frame_btn_lbox, selectmode="single")
 | 
			
		||||
        self.l_box.config(relief="ridge", font=("Ubuntu", 12, "bold"))
 | 
			
		||||
        self.l_box.grid(column=1, rowspan=4, row=0, sticky="ns")
 | 
			
		||||
        self.l_box.event_add("<<ClickEvent>>", "<Button-1>")
 | 
			
		||||
        self.l_box.bind("<<ClickEvent>>", enable_check_box)
 | 
			
		||||
        self.l_box.bind("<<ClickEvent>>", self.enable_check_box)
 | 
			
		||||
        self.scrollbar = ttk.Scrollbar(self.lb_frame_btn_lbox, orient="vertical", command=self.l_box.yview)
 | 
			
		||||
        self.scrollbar.grid(column=1, rowspan=4, row=0, sticky="nse")
 | 
			
		||||
        self.l_box.configure(yscrollcommand=self.scrollbar.set)
 | 
			
		||||
@@ -333,7 +248,6 @@ class FrameWidgets(ttk.Frame):
 | 
			
		||||
            self.l_box.insert("end", tunnels[:-5])
 | 
			
		||||
            self.l_box.update()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        # Button Vpn
 | 
			
		||||
        if self.a != "":
 | 
			
		||||
            self.stop()
 | 
			
		||||
@@ -354,7 +268,156 @@ class FrameWidgets(ttk.Frame):
 | 
			
		||||
 | 
			
		||||
        Tooltip(self.btn_i, _("Click to import a Wireguard Tunnel"), tips)
 | 
			
		||||
 | 
			
		||||
        def delete():
 | 
			
		||||
        # Button Trash
 | 
			
		||||
        self.btn_tr = ttk.Button(self.lb_frame_btn_lbox, image=self.tr_pic, command=self.delete, padding=0,
 | 
			
		||||
                                 style="CButton.TButton")
 | 
			
		||||
        self.btn_tr.grid(column=0, row=2, padx=15, pady=8)
 | 
			
		||||
 | 
			
		||||
        if self.l_box.size() == 0:
 | 
			
		||||
            Tooltip(self.btn_tr, _("No tunnels to delete in the list"), tips)
 | 
			
		||||
        else:
 | 
			
		||||
            Tooltip(self.btn_tr, _("Click to delete a Wireguard Tunnel\nSelect from the list!"), tips)
 | 
			
		||||
 | 
			
		||||
        # Button Export
 | 
			
		||||
        self.btn_exp = ttk.Button(self.lb_frame_btn_lbox, image=self.exp_pic,
 | 
			
		||||
                                  command=lambda: Tunnel.export(img_w, img_i, img_w2, img_i2, sl, pfit), padding=0)
 | 
			
		||||
        self.btn_exp.grid(column=0, row=3, padx=15, pady=8)
 | 
			
		||||
 | 
			
		||||
        if self.l_box.size() == 0:
 | 
			
		||||
            Tooltip(self.btn_exp, _("No Tunnels in List for Export"), tips)
 | 
			
		||||
        else:
 | 
			
		||||
            Tooltip(self.btn_exp, _("Click to export all\nWireguard Tunnel to Zipfile"), tips)
 | 
			
		||||
 | 
			
		||||
        # Label Entry
 | 
			
		||||
        self.lb_rename = ttk.Entry(self.lb_frame4, width=20)
 | 
			
		||||
        self.lb_rename.grid(column=2, row=0, padx=8, pady=10, sticky="ne")
 | 
			
		||||
        self.lb_rename.insert(0, _("Max. 12 characters!"))
 | 
			
		||||
        self.lb_rename.config(state="disable")
 | 
			
		||||
 | 
			
		||||
        if self.l_box.size() != 0:
 | 
			
		||||
            Tooltip(self.lb_rename, _("To rename a tunnel, you need to\nselect a tunnel from the list"), tips)
 | 
			
		||||
        else:
 | 
			
		||||
            Tooltip(self.lb_rename, _("To rename a tunnel, at least one must be in the list"), tips)
 | 
			
		||||
 | 
			
		||||
        # Button Rename
 | 
			
		||||
        self.btn_rename = ttk.Button(self.lb_frame4, text=_("Rename"), state="disable", command=self.tl_rename, padding=4,
 | 
			
		||||
                                     style="RnButton.TButton")
 | 
			
		||||
        self.btn_rename.grid(column=3, row=0, padx=5, pady=10, sticky="ne")
 | 
			
		||||
 | 
			
		||||
        # Check Buttons
 | 
			
		||||
        self.selected_option = tk.IntVar()
 | 
			
		||||
        self.autoconnect_var = tk.StringVar()
 | 
			
		||||
        self.autoconnect_var.set(self.auto_con)
 | 
			
		||||
 | 
			
		||||
        # Frame for Labels, Entry and Button
 | 
			
		||||
        self.autoconnect = ttk.Label(self.lb_frame3, textvariable=self.autoconnect_var, width=15)
 | 
			
		||||
        self.autoconnect.config(font=("Ubuntu", 11))
 | 
			
		||||
        self.autoconnect.grid(column=1, row=0, sticky="e", pady=19)
 | 
			
		||||
        self.wg_autostart = ttk.Checkbutton(self.lb_frame3, text=_("Autoconnect on:"), variable=self.selected_option,
 | 
			
		||||
                                            command=self.box_set)
 | 
			
		||||
        self.wg_autostart.grid(column=0, row=0, pady=15, padx=15, sticky="nw")
 | 
			
		||||
 | 
			
		||||
        if self.l_box.size() >= 1 and len(self.l_box.curselection()) >= 1:
 | 
			
		||||
            Tooltip(self.wg_autostart, _("To use the autostart, enable this Checkbox"), tips)
 | 
			
		||||
 | 
			
		||||
        if self.l_box.size() == 0:
 | 
			
		||||
            Tooltip(self.wg_autostart, _("You must have at least one\ntunnel in the list,to use the autostart"), tips)
 | 
			
		||||
 | 
			
		||||
        else:
 | 
			
		||||
 | 
			
		||||
            Tooltip(self.wg_autostart, _("To use the autostart, a tunnel must be selected from the list"), tips)
 | 
			
		||||
 | 
			
		||||
        self.on_off()
 | 
			
		||||
 | 
			
		||||
    def info(self):
 | 
			
		||||
        def link_btn():
 | 
			
		||||
            webbrowser.open("https://git.ilunix.de/punix/Wire-Py")
 | 
			
		||||
 | 
			
		||||
        msg_t = _("Wire-Py a simple Wireguard Gui for Linux systems.\n\n"
 | 
			
		||||
                "Wire-Py is open source software written in Python.\n\n"
 | 
			
		||||
                "Email: polunga40@unity-mail.de also likes for donation.\n\n"
 | 
			
		||||
                "Use without warranty!\n")
 | 
			
		||||
 | 
			
		||||
        LxTools.msg_window(img_i, img_i, _("Info"), msg_t, _("Go to Wire-Py git"), link_btn)
 | 
			
		||||
 | 
			
		||||
    def theme_change_light(self):
 | 
			
		||||
        """
 | 
			
		||||
        Set a light theme
 | 
			
		||||
        """
 | 
			
		||||
        if self.tk.call("ttk::style", "theme", "use") == "water-dark":
 | 
			
		||||
            self.tk.call("set_theme", "light")
 | 
			
		||||
            with open(set_file, "r", encoding="utf-8") as theme_set2:
 | 
			
		||||
                lines3 = theme_set2.readlines()
 | 
			
		||||
                lines3[3] = "light\n"
 | 
			
		||||
            with open(set_file, "w", encoding="utf-8") as theme_set2:
 | 
			
		||||
                theme_set2.writelines(lines3)
 | 
			
		||||
            self.color_label()
 | 
			
		||||
 | 
			
		||||
    def theme_change_dark(self):
 | 
			
		||||
        """
 | 
			
		||||
        Set a dark theme
 | 
			
		||||
        """
 | 
			
		||||
        if not self.tk.call("ttk::style", "theme", "use") == "water-dark":
 | 
			
		||||
            self.tk.call("set_theme", "dark")
 | 
			
		||||
            with open(set_file, "r", encoding="utf-8") as theme_set2:
 | 
			
		||||
                lines4 = theme_set2.readlines()
 | 
			
		||||
                lines4[3] = "dark\n"
 | 
			
		||||
            with open(set_file, "w", encoding="utf-8") as theme_set2:
 | 
			
		||||
                theme_set2.writelines(lines4)
 | 
			
		||||
            self.color_label()
 | 
			
		||||
 | 
			
		||||
    def update(self, update_res):
 | 
			
		||||
        """
 | 
			
		||||
        write off or on in file
 | 
			
		||||
        Args:
 | 
			
		||||
            update_res (int): argument that is passed contains 0 or 1
 | 
			
		||||
        """
 | 
			
		||||
        if update_res == 1:
 | 
			
		||||
            with open(set_file, "r", encoding="utf-8") as set_f2:
 | 
			
		||||
                lines2 = set_f2.readlines()
 | 
			
		||||
                lines2[1] = "off\n"
 | 
			
		||||
            with open(set_file, "w", encoding="utf-8") as set_f2:
 | 
			
		||||
                set_f2.writelines(lines2) 
 | 
			
		||||
 | 
			
		||||
        else:
 | 
			
		||||
            with open(set_file, "r", encoding="utf-8") as set_f2:
 | 
			
		||||
                lines2 = set_f2.readlines()
 | 
			
		||||
                lines2[1] = "on\n"
 | 
			
		||||
            with open(set_file, "w", encoding="utf-8") as set_f2:
 | 
			
		||||
                set_f2.writelines(lines2)
 | 
			
		||||
       
 | 
			
		||||
    def tooltip(self, tip) -> None:
 | 
			
		||||
        """
 | 
			
		||||
        write True or False in a file
 | 
			
		||||
        Args:
 | 
			
		||||
            tip (bool): argument that is passed contains True or False
 | 
			
		||||
        """
 | 
			
		||||
        if tip:
 | 
			
		||||
            with open(set_file, "r", encoding="utf-8") as set_f2:
 | 
			
		||||
                lines2 = set_f2.readlines()
 | 
			
		||||
                lines2[5] = "False\n"
 | 
			
		||||
            with open(set_file, "w", encoding="utf-8") as set_f2:
 | 
			
		||||
                set_f2.writelines(lines2)
 | 
			
		||||
 | 
			
		||||
        else:
 | 
			
		||||
            with open(set_file, "r", encoding="utf-8") as set_f2:
 | 
			
		||||
                lines2 = set_f2.readlines()
 | 
			
		||||
                lines2[5] = "True\n"
 | 
			
		||||
            with open(set_file, "w", encoding="utf-8") as set_f2:
 | 
			
		||||
                set_f2.writelines(lines2)
 | 
			
		||||
 | 
			
		||||
    def enable_check_box(self, _):
 | 
			
		||||
        """
 | 
			
		||||
        checkbox for enable autostart Tunnel
 | 
			
		||||
        """
 | 
			
		||||
        Create.files_for_autostart()
 | 
			
		||||
        if self.l_box.size() != 0:
 | 
			
		||||
            self.wg_autostart.configure(state="normal")
 | 
			
		||||
            self.lb_rename.config(state="normal")
 | 
			
		||||
            self.lb_rename.delete(0, tk.END)
 | 
			
		||||
            self.btn_rename.config(state="normal")
 | 
			
		||||
                
 | 
			
		||||
    def delete(self):
 | 
			
		||||
        """
 | 
			
		||||
        delete Wireguard Tunnel
 | 
			
		||||
        """
 | 
			
		||||
@@ -420,38 +483,7 @@ class FrameWidgets(ttk.Frame):
 | 
			
		||||
 | 
			
		||||
                LxTools.msg_window(img_w, img_i2, sl, pfit)
 | 
			
		||||
 | 
			
		||||
        # Button Trash
 | 
			
		||||
        self.btn_tr = ttk.Button(self.lb_frame_btn_lbox, image=self.tr_pic, command=delete, padding=0,
 | 
			
		||||
                                 style="CButton.TButton")
 | 
			
		||||
        self.btn_tr.grid(column=0, row=2, padx=15, pady=8)
 | 
			
		||||
 | 
			
		||||
        if self.l_box.size() == 0:
 | 
			
		||||
            Tooltip(self.btn_tr, _("No tunnels to delete in the list"), tips)
 | 
			
		||||
        else:
 | 
			
		||||
            Tooltip(self.btn_tr, _("Click to delete a Wireguard Tunnel\nSelect from the list!"), tips)
 | 
			
		||||
 | 
			
		||||
        # Button Export
 | 
			
		||||
        self.btn_exp = ttk.Button(self.lb_frame_btn_lbox, image=self.exp_pic,
 | 
			
		||||
                                  command=lambda: Tunnel.export(img_w, img_i, img_w2, img_i2, sl, pfit), padding=0)
 | 
			
		||||
        self.btn_exp.grid(column=0, row=3, padx=15, pady=8)
 | 
			
		||||
 | 
			
		||||
        if self.l_box.size() == 0:
 | 
			
		||||
            Tooltip(self.btn_exp, _("No Tunnels in List for Export"), tips)
 | 
			
		||||
        else:
 | 
			
		||||
            Tooltip(self.btn_exp, _("Click to export all\nWireguard Tunnel to Zipfile"), tips)
 | 
			
		||||
 | 
			
		||||
        # Label Entry
 | 
			
		||||
        self.lb_rename = ttk.Entry(self.lb_frame4, width=20)
 | 
			
		||||
        self.lb_rename.grid(column=2, row=0, padx=8, pady=10, sticky="ne")
 | 
			
		||||
        self.lb_rename.insert(0, _("Max. 12 characters!"))
 | 
			
		||||
        self.lb_rename.config(state="disable")
 | 
			
		||||
 | 
			
		||||
        if self.l_box.size() != 0:
 | 
			
		||||
            Tooltip(self.lb_rename, _("To rename a tunnel, you need to\nselect a tunnel from the list"), tips)
 | 
			
		||||
        else:
 | 
			
		||||
            Tooltip(self.lb_rename, _("To rename a tunnel, at least one must be in the list"), tips)
 | 
			
		||||
 | 
			
		||||
        def tl_rename():
 | 
			
		||||
    def tl_rename(self) -> None:
 | 
			
		||||
 | 
			
		||||
        special_characters = ["\\", "/", "{", "}", " "]
 | 
			
		||||
 | 
			
		||||
@@ -503,35 +535,8 @@ class FrameWidgets(ttk.Frame):
 | 
			
		||||
 | 
			
		||||
                LxTools.msg_window(img_w, img_i2, rnp, pstl)
 | 
			
		||||
 | 
			
		||||
        # Button Rename
 | 
			
		||||
        self.btn_rename = ttk.Button(self.lb_frame4, text=_("Rename"), state="disable", command=tl_rename, padding=4,
 | 
			
		||||
                                     style="RnButton.TButton")
 | 
			
		||||
        self.btn_rename.grid(column=3, row=0, padx=5, pady=10, sticky="ne")
 | 
			
		||||
 | 
			
		||||
        # Check Buttons
 | 
			
		||||
        self.selected_option = tk.IntVar()
 | 
			
		||||
        self.autoconnect_var = tk.StringVar()
 | 
			
		||||
        self.autoconnect_var.set(self.auto_con)
 | 
			
		||||
 | 
			
		||||
        # Frame for Labels, Entry and Button
 | 
			
		||||
        self.autoconnect = ttk.Label(self.lb_frame3, textvariable=self.autoconnect_var, width=15)
 | 
			
		||||
        self.autoconnect.config(font=("Ubuntu", 11))
 | 
			
		||||
        self.autoconnect.grid(column=1, row=0, sticky="e", pady=19)
 | 
			
		||||
        self.wg_autostart = ttk.Checkbutton(self.lb_frame3, text=_("Autoconnect on:"), variable=self.selected_option,
 | 
			
		||||
                                            command=self.box_set)
 | 
			
		||||
        self.wg_autostart.grid(column=0, row=0, pady=15, padx=15, sticky="nw")
 | 
			
		||||
 | 
			
		||||
        if self.l_box.size() >= 1 and len(self.l_box.curselection()) >= 1:
 | 
			
		||||
            Tooltip(self.wg_autostart, _("To use the autostart, enable this Checkbox"), tips)
 | 
			
		||||
 | 
			
		||||
        if self.l_box.size() == 0:
 | 
			
		||||
            Tooltip(self.wg_autostart, _("You must have at least one\ntunnel in the list,to use the autostart"), tips)
 | 
			
		||||
 | 
			
		||||
        else:
 | 
			
		||||
 | 
			
		||||
            Tooltip(self.wg_autostart, _("To use the autostart, a tunnel must be selected from the list"), tips)
 | 
			
		||||
 | 
			
		||||
        self.on_off()
 | 
			
		||||
            except subprocess.CalledProcessError:
 | 
			
		||||
                pass
 | 
			
		||||
 | 
			
		||||
    def import_sl(self):
 | 
			
		||||
        """
 | 
			
		||||
@@ -771,7 +776,7 @@ class FrameWidgets(ttk.Frame):
 | 
			
		||||
        """
 | 
			
		||||
        Stop Button
 | 
			
		||||
        """
 | 
			
		||||
        self.btn_stst = ttk.Button(self.lb_frame_btn_lbox, image=self.wg_vpn_stop, command=self.wg_switch, padding=0)
 | 
			
		||||
        self.btn_stst = ttk.Button(self.lb_frame_btn_lbox, image=self.wg_vpn_stop, command=lambda: self.wg_switch("stop"), padding=0)
 | 
			
		||||
        self.btn_stst.grid(column=0, row=0, padx=5, pady=8)
 | 
			
		||||
 | 
			
		||||
        Tooltip(self.btn_stst, _("Click to stop selected Wireguard Tunnel"), tips)
 | 
			
		||||
@@ -780,7 +785,7 @@ class FrameWidgets(ttk.Frame):
 | 
			
		||||
        """
 | 
			
		||||
        Start Button
 | 
			
		||||
        """
 | 
			
		||||
        self.btn_stst = ttk.Button(self.lb_frame_btn_lbox, image=self.wg_vpn_start, command=self.wg_switch, padding=0)
 | 
			
		||||
        self.btn_stst = ttk.Button(self.lb_frame_btn_lbox, image=self.wg_vpn_start, command=lambda: self.wg_switch("start"), padding=0)
 | 
			
		||||
        self.btn_stst.grid(column=0, row=0, padx=5, pady=8)
 | 
			
		||||
 | 
			
		||||
        tl = Tunnel.list()
 | 
			
		||||
@@ -805,41 +810,22 @@ class FrameWidgets(ttk.Frame):
 | 
			
		||||
        self.lb_tunnel.config(font=("Ubuntu", 11, "bold"))
 | 
			
		||||
        self.lb_tunnel.grid(column=2, padx=10, row=1)
 | 
			
		||||
 | 
			
		||||
    def wg_switch(self):
 | 
			
		||||
    def wg_switch(self, event=None) -> None:
 | 
			
		||||
        """
 | 
			
		||||
        switch Tunnel method change from labels and buttons
 | 
			
		||||
        Deals with switching the VPN connection
 | 
			
		||||
        """
 | 
			
		||||
        self.a = Tunnel.active()
 | 
			
		||||
        try:
 | 
			
		||||
            if self.a == "":
 | 
			
		||||
 | 
			
		||||
                self.start()
 | 
			
		||||
                self.select_tunnel = self.l_box.curselection()
 | 
			
		||||
                select_tl = self.l_box.get(self.select_tunnel[0])
 | 
			
		||||
                check_call(["nmcli", "connection", "up", select_tl])
 | 
			
		||||
                self.handle_connection_state("start", select_tl)
 | 
			
		||||
 | 
			
		||||
            else:
 | 
			
		||||
                
 | 
			
		||||
                data = self.handle_tunnel_data(self.a)
 | 
			
		||||
                if data:
 | 
			
		||||
 | 
			
		||||
                # Button Start/Stop
 | 
			
		||||
                self.stop()
 | 
			
		||||
                self.a = Tunnel.active()
 | 
			
		||||
                self.str_var = tk.StringVar()
 | 
			
		||||
                self.str_var.set(self.a)
 | 
			
		||||
                self.color_label()
 | 
			
		||||
 | 
			
		||||
            elif self.a != "":
 | 
			
		||||
 | 
			
		||||
                # Button Start/Stop
 | 
			
		||||
                self.stop()
 | 
			
		||||
                check_call(["nmcli", "connection", "down", self.a])
 | 
			
		||||
 | 
			
		||||
                # Button Start/Stop
 | 
			
		||||
                self.start()
 | 
			
		||||
                self.a = Tunnel.active()
 | 
			
		||||
                self.str_var.set("")
 | 
			
		||||
                self.color_label()
 | 
			
		||||
 | 
			
		||||
                self.reset_fields()
 | 
			
		||||
                self.show_data()
 | 
			
		||||
                    self.handle_connection_state("stop")
 | 
			
		||||
 | 
			
		||||
        except IndexError:
 | 
			
		||||
 | 
			
		||||
@@ -851,6 +837,49 @@ class FrameWidgets(ttk.Frame):
 | 
			
		||||
 | 
			
		||||
                LxTools.msg_window(img_w, img_i2, sl, pfit)
 | 
			
		||||
 | 
			
		||||
    def handle_connection_state(self, action: str, tunnel_name: str = None) -> None:
 | 
			
		||||
        """
 | 
			
		||||
        Central management for connection states
 | 
			
		||||
 | 
			
		||||
        Args:
 | 
			
		||||
            action (str): "start", "stop" or "toggle"
 | 
			
		||||
            tunnel_name (str, optional): name of tunnel for start-option. defaults to None.
 | 
			
		||||
        """
 | 
			
		||||
        if action == "stop":
 | 
			
		||||
            if self.a:
 | 
			
		||||
                check_call(["nmcli", "connection", "down", self.a])
 | 
			
		||||
                self.update_connection_display()
 | 
			
		||||
                self.reset_fields()
 | 
			
		||||
                self.start()
 | 
			
		||||
 | 
			
		||||
        elif action == "start":
 | 
			
		||||
            if tunnel_name or self.a:
 | 
			
		||||
                target_tunnel = tunnel_name or self.a
 | 
			
		||||
                check_call(["nmcli", "connection", "up", target_tunnel])
 | 
			
		||||
                self.update_connection_display()
 | 
			
		||||
                data = self.handle_tunnel_data(self.a)
 | 
			
		||||
                self.init_and_report(data)
 | 
			
		||||
                self.show_data()
 | 
			
		||||
                self.color_label()
 | 
			
		||||
                self.stop()
 | 
			
		||||
 | 
			
		||||
        elif action == "toggle":
 | 
			
		||||
            if self.a:
 | 
			
		||||
                self.handle_connection_state("stop")
 | 
			
		||||
            else:
 | 
			
		||||
                self.handle_connection_state("start")
 | 
			
		||||
 | 
			
		||||
    def update_connection_display(self) -> None:
 | 
			
		||||
        """
 | 
			
		||||
        Updated the display after connection changes
 | 
			
		||||
        """
 | 
			
		||||
        self.a = Tunnel.active()
 | 
			
		||||
        if not hasattr(self, "str_var"):
 | 
			
		||||
            self.str_var = tk.StringVar()
 | 
			
		||||
        self.str_var.set(self.a)
 | 
			
		||||
        self.color_label()
 | 
			
		||||
        self.show_data()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
if __name__ == "__main__":
 | 
			
		||||
    window = Wirepy()
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user