Initial commit
This commit is contained in:
@@ -0,0 +1,157 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import locale
|
||||
import gettext
|
||||
import os
|
||||
import sys
|
||||
import json
|
||||
import gi
|
||||
import shutil
|
||||
gi.require_version("Gtk", "3.0")
|
||||
from gi.repository import Gtk, Gio, GdkPixbuf
|
||||
|
||||
class ManjaroHello(Gtk.Window):
|
||||
def __init__(self):
|
||||
self.preferences_path = "{}/.config/manjaro-hello.json".format(os.path.expanduser("~"))
|
||||
self.autostart_path = os.path.expanduser("{}/.config/autostart/manjaro-hello.desktop".format(os.path.expanduser("~")))
|
||||
self.icon_path = "manjaro-hello.png"
|
||||
|
||||
self.language = locale.getlocale()[0][:2]
|
||||
self.default_language = "en"
|
||||
self.app = "manjaro-hello"
|
||||
self.locale_dir = "locale"
|
||||
|
||||
self.preferences = self.get_preferences()
|
||||
if not self.preferences:
|
||||
self.preferences = {"autostart": os.path.exists(self.autostart_path)}
|
||||
self.save_preferences()
|
||||
|
||||
self.infos = self.get_infos()
|
||||
|
||||
# Init language
|
||||
locale.setlocale(locale.LC_ALL, "")
|
||||
locale.bindtextdomain(self.app, self.locale_dir)
|
||||
gettext.bindtextdomain(self.app, self.locale_dir)
|
||||
gettext.textdomain(self.app)
|
||||
|
||||
# Create window
|
||||
self.builder = Gtk.Builder()
|
||||
self.builder.set_translation_domain(self.app)
|
||||
self.builder.add_from_file("manjaro-hello.glade")
|
||||
self.builder.connect_signals(self)
|
||||
self.window = self.builder.get_object("window")
|
||||
|
||||
self.builder.get_object("headerbar").props.subtitle = self.infos["codename"] + " " + self.infos["release"] + " " + self.infos["arch"]
|
||||
|
||||
text_buffer = Gtk.TextBuffer()
|
||||
text_buffer.set_text(self.read_data("readme"), -1)
|
||||
self.builder.get_object("readmetext").set_buffer(text_buffer)
|
||||
|
||||
text_buffer = Gtk.TextBuffer()
|
||||
text_buffer.set_text(self.read_data("release"), -1)
|
||||
self.builder.get_object("releasetext").set_buffer(text_buffer)
|
||||
|
||||
text_buffer = Gtk.TextBuffer()
|
||||
text_buffer.set_text(self.read_data("involved"), -1)
|
||||
self.builder.get_object("involvedtext").set_buffer(text_buffer)
|
||||
|
||||
self.builder.get_object("autostart").set_active(self.preferences["autostart"])
|
||||
|
||||
self.window.show()
|
||||
|
||||
def get_lsb_information(self):
|
||||
lsb = {}
|
||||
try:
|
||||
with open("/etc/lsb-release") as lsb_file:
|
||||
for line in lsb_file:
|
||||
if "=" in line:
|
||||
var, arg = line.rstrip().split("=")
|
||||
if var.startswith("DISTRIB_"):
|
||||
var = var[8:]
|
||||
if arg.startswith("\"") and arg.endswith("\""):
|
||||
arg = arg[1:-1]
|
||||
if arg:
|
||||
lsb[var] = arg
|
||||
except (IOError, OSError) as msg:
|
||||
print(msg)
|
||||
|
||||
return lsb
|
||||
|
||||
def get_infos(self):
|
||||
lsb = self.get_lsb_information()
|
||||
infos = {}
|
||||
infos["codename"] = lsb.get("CODENAME", 0)
|
||||
infos["release"] = lsb.get("RELEASE", 0)
|
||||
infos["arch"] = "64-bit" if os.uname()[4] else "32-bit"
|
||||
infos["live"] = os.path.exists("/bootmnt/manjaro") or os.path.exists("/run/miso/bootmnt/manjaro")
|
||||
|
||||
return infos
|
||||
|
||||
def change_autostart(self, state):
|
||||
if state and not os.path.exists(self.autostart_path):
|
||||
try:
|
||||
shutil.copyfile("manjaro-hello.desktop", self.autostart_path)
|
||||
self.preferences["autostart"] = True
|
||||
except (IOError, OSError) as e:
|
||||
print(e)
|
||||
elif not state and os.path.exists(self.autostart_path):
|
||||
try:
|
||||
os.remove(self.autostart_path)
|
||||
self.preferences["autostart"] = False
|
||||
except (IOError, OSError) as e:
|
||||
print(e)
|
||||
self.save_preferences()
|
||||
|
||||
def save_preferences(self):
|
||||
try:
|
||||
with open(self.preferences_path, "w") as f:
|
||||
json.dump(self.preferences, f)
|
||||
except (IOError, OSError) as e:
|
||||
print(e)
|
||||
|
||||
def get_preferences(self):
|
||||
try:
|
||||
with open(self.preferences_path, "r") as f:
|
||||
return json.load(f)
|
||||
except (IOError, OSError) as e:
|
||||
return None
|
||||
|
||||
def read_data(self, name):
|
||||
filename = "data/{}/{}".format(self.language, name)
|
||||
if not os.path.exists(filename):
|
||||
filename = "data/{}/{}".format(self.default_language, name)
|
||||
|
||||
try:
|
||||
with open(filename, "r") as f:
|
||||
return f.read()
|
||||
except (IOError, OSError) as e:
|
||||
return None
|
||||
|
||||
# Handlers
|
||||
def on_about_clicked(self, btn):
|
||||
dialog = self.builder.get_object("aboutdialog")
|
||||
dialog.set_transient_for(self.window)
|
||||
dialog.run()
|
||||
dialog.hide()
|
||||
|
||||
def on_readme_clicked(self, btn):
|
||||
self.builder.get_object("stack").set_visible_child(self.builder.get_object("documentation"))
|
||||
self.builder.get_object("documentation").set_current_page(0)
|
||||
|
||||
def on_release_clicked(self, btn):
|
||||
self.builder.get_object("stack").set_visible_child(self.builder.get_object("documentation"))
|
||||
self.builder.get_object("documentation").set_current_page(1)
|
||||
|
||||
def on_involved_clicked(self, btn):
|
||||
self.builder.get_object("stack").set_visible_child(self.builder.get_object("project"))
|
||||
self.builder.get_object("project").set_current_page(0)
|
||||
|
||||
def on_autostart_switched(self, switch, _):
|
||||
autostart = True if switch.get_active() else False
|
||||
self.change_autostart(autostart)
|
||||
|
||||
def on_delete_window(self, *args):
|
||||
Gtk.main_quit(*args)
|
||||
|
||||
win = ManjaroHello()
|
||||
Gtk.main()
|
||||
Reference in New Issue
Block a user