From db0f473e39f3bb7da30200048085e6740c59c565 Mon Sep 17 00:00:00 2001 From: Nakajima Date: Mon, 8 Apr 2019 22:23:40 +0900 Subject: [PATCH] change directory structure --- src/.Interfaces.py.swp | Bin 0 -> 12288 bytes src/.Items.py.swp | Bin 0 -> 24576 bytes src/.serene-setup-wizard.swp | Bin 0 -> 12288 bytes src/Interfaces.py | 77 +++++++ src/Items.py | 489 +++++++++++++++++++++++++++++++++++++++++++ src/serene-setup-wizard | 84 ++++++++ 6 files changed, 650 insertions(+) create mode 100644 src/.Interfaces.py.swp create mode 100644 src/.Items.py.swp create mode 100644 src/.serene-setup-wizard.swp create mode 100644 src/Interfaces.py create mode 100644 src/Items.py create mode 100755 src/serene-setup-wizard diff --git a/src/.Interfaces.py.swp b/src/.Interfaces.py.swp new file mode 100644 index 0000000000000000000000000000000000000000..bc93a7aab825c882a0f6842c24333dfb0bf06dd1 GIT binary patch literal 12288 zcmeI2&x;&I6vr!`jK;(tmzdK_d+CwP?2mw~iDQr$b&v!hZa|_8y*)MQ%Fa{`UDZs+ zkRJ#C054ut1O-L#sAuoVU9;XicvBD)4<7y2%+zl8>|`B<93rpbL+x(W`}KXVW?8m3 zmM^r<(pqC#;CWJrKi9r_xADtK@%#}XHcgR90~^3IaY)1{VnGVdm-w2i@N4|lx93a|o;Dp0s?eQm!uzPd8L>d!?- z>6xe37q#YdtN<&(3a|pK04u->umY?AEAT&1zzz0^8>r)vX)R}`>%N(F`YkW404u-> zumY?AE5Hh{0;~WlzzVPetN<(U5Gs&#ggE@D5ZQhtkN^LNzyE(bB*d@aHuxTV3T}cF zybex+2B-r8?j023F1Q13gInNp@DUh-H^C{e3Rb`o@GSW22_b$5KY=aq9rzY}2o%V` zI#>ov;1DH|o*`YzMw2PytR@qTqidX2RrZ=fkqB|7hEB}Kw*0$-k)66KmHCdw*qGIX&r$#%a z3t8EaS5i4}bRp>#@=Tta9G3oY`SCHD<2$|vx%7{*9##l)%lcb#N)5sJw zOtd3sD9sXmNjBoE*XmcV)#zo48eNn36Bn->+of@EJYGAp3v2H=wzAjVeY#x3r1ths z(%#x;W*BV!PQ@Uxb~}u9i7RY4>Jq!z)=6I?q?&}Sn1<@7%{XWDqP>tk%v(unXt$B1 zo4y;tX;}Y5r{{Rr5n=wS5zp-r&Np~hDhtllXiltm78tbBl!fAVx@nJ*)Sc$+wUwCv zayNsaUnj=s_k2@-1QSSpc9kYSGIrJ#y3~_89`9XTeh*{Yq}B4F`PV^s-+u5$(rV*7 z8%D|p8P8DK!`#v7^;W$7LUv`g24O6{t0;x{+Iv& literal 0 HcmV?d00001 diff --git a/src/.Items.py.swp b/src/.Items.py.swp new file mode 100644 index 0000000000000000000000000000000000000000..2b4f0342f2c6b82202500f90a536233aa5a3605c GIT binary patch literal 24576 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 A>;M1& literal 0 HcmV?d00001 diff --git a/src/.serene-setup-wizard.swp b/src/.serene-setup-wizard.swp new file mode 100644 index 0000000000000000000000000000000000000000..dd4b5d83ca29aca4a5667b7d15dfe8381feeecdb GIT binary patch literal 12288 zcmeI2J&YSg7=|Y)Aje-22pXEPPe^OUUfTr3DPRed2{bqN)d*Oa+U`Bep>zVmxzIo@J zkxu80&eO|J@+H5+Q0`K{qzXCd>><5Djf?+4F{LijWjZ8OGT}fl`{u)-N^=Q zYmtaZT$+?20wytz^C97@Gf`@ zya_IX3m^c`fz#lA@b?{z{R+MZ-+^zz2jG3M1J*zvJOmyDN5Qq*8T$%+2Hpdgz$@To z@GKaB$3X)e2Y=nh*q`7B@CEoBTmi3vSHVSa0Sv)e&;a*>d%!QZGWIce2fPj50O!Fr zSOO1&4rqe~a18u@3uC{5FTqFPb?_3Hfo1R*Xo8!;P2dmc`8Bu#NZU(b2e{%Ca0)mD zoB~b(r@;SS0bVJ3Tl?Y#X}kuj)bcoyk@4y)yDIhWZwE&T!M9b)gUvujwc1)#FDDQa zE%+(6Ycy%ZRQD61(}`(y2mWvzM4O_Ll^pS`6_GqI^OwA($C0&2M!`^E0Hw6>CL;3e z*o|`jc^C~tjlLeMS!FJ&&lHd+x=mi^r+B@|MHKexm1R&bMjup0D&eweM?(_mn@&X% z7?Dq2EO$1R6XBgpQqd@?Y<9fImq`JCQyBZ=%~#T3tSXpJH{wJMh1UKsm`uEWU8kW! zdUd1H;h0{0za0i9Xh+Jdk7T0Fx{*^+A7CU(wbq9kqE(T4shb0e5nWAn;o2p=$A`8sW>+w$R z9Y(EGBy^Yj1n-v1r0O6H*KJ;Q1-h9#uXIp#Lnwes9O&|Zh)L;JO#DQ!hvkPVGBQd9 zv*DGGEUOl>s#MZyB(L>&w{if=Nu=gaVaEznQDAu}?Aek7zcfQ-7wsgOFC~A}DrPO& zpiQB1D4mXdvzp-BMC#(g$a>HO|FCeydsR2nkPL~#om^=@4$PQtAZ@g_pL4A}@(q4Q zOonPIxKTX&Nq7D$?);8n`=1YiD}fHdBA*6Zf~N@AIHw0Wu&FQ>6eOl6Vt8rtc3 id#QENj= 2 : + + for str in _strs : + print(str, end="") + + else : + print(_strs, end="") + + input_res = input() + + if input_res == "y" or input_res == "Y" : + print("") + return True + elif input_res == "n" or input_res == "N" : + print("") + return False + elif input_res == "back" : + print("") + return None + + def status(self, _task_name, _i, _num) : + pass + + def show(self, _str) : + + print(_str) + + def choose(self, _num_of_choices) : + + str = "Choose the item you want to change.({}-{}) > ".format(1, _num_of_choices) + while(True) : + + input_res = input(str) + + if input_res == "exit" : + print("") + return False + + try : + num = int(input_res) + except ValueError : + continue + + if (1 <= num) and (num <= _num_of_choices) : + print("") + return num + diff --git a/src/Items.py b/src/Items.py new file mode 100644 index 0000000..260db60 --- /dev/null +++ b/src/Items.py @@ -0,0 +1,489 @@ +import subprocess +import os + +class Item() : + + execute_src = None + restore_src = None + + def __init__(self, _interface) : + self.interface = _interface + + def execute(self) : + subprocess.call(self.execute_src) + print("") + + def restore(self) : + subprocess.call(self.restore_src) + print("") + + def isdefault(self, _file_name=None) : + + if _file_name is None : + _file_name = self.name + + return not os.path.exists("../data/" + _file_name) + + def first_time(self) : + """This returns : + True : (task_name, task) + None : nothing to do + False : back + """ + pass + + def show(self) : + """"show the current status""" + pass + + def change(self) : + pass + +# ********** Do not change above this. ***************************** + +def getItems_first_time(_interface) : + + items = list() + + items.append(Chrome(_interface)) + items.append(Kdeconnect(_interface)) + items.append(Wine(_interface)) + + return items + +def getItems(_interface) : + + items = list() + + items.append(Chrome(_interface)) + items.append(Firefox(_interface)) + items.append(Kdeconnect(_interface)) + items.append(Wine(_interface)) + items.append(Playonlinux(_interface)) + items.append(Winetricks(_interface)) + + return items + +# ----------------------------------------- + +class Chrome(Item) : + + name = "Google Chrome" + execute_src = "../scripts/chromeinstall.sh" + restore_src = "../scripts/chromeinstall.sh" + + + def first_time(self) : + + result = self.interface.yesnoback("Do you want to install Google Chrome?(y/n) > ") + + if result is None : + return None + elif result : + + firefox = Firefox(self.interface) + ffresult = firefox.first_time() + + if ffresult is None : + return None + elif ffresult : + return (True, ("Installing " + self.name, self.execute), ffresult) + else : + return ("Installing " + self.name, self.execute) + + else : + return False + + def isdefault(self) : + + subprocess.call(["../scripts/isinstalled.sh", "google-chrome-stable"]) + return super().isdefault("google-chrome-stable") + + + def show(self) : + + if self.isdefault() : + self.interface.show("Google Chrome : not installed ") + else : + self.interface.show("Google Chrome : installed") + + + def change(self) : + + if self.isdefault() : + + str = ("Google Chrome is not installed.\n", + "Do you want to install Google Chrome?(y/n) > ") + + result = self.interface.yesnoback(str) + + if result is None : + return + elif result : + self.execute() + else : + return + + else : + + str = ("Google Chrome is installed.\n", + "Do you want to uninstall Google Chrome?(y/n) > ") + + result = self.interface.yesnoback(str) + + if result is None : + return + elif result : + self.restore() + else : + return + + +class Firefox(Item) : + + name = "Firefox" + execute_src = "../scripts/firefoxuninstall.sh" + restore_src = "../scripts/firefoxinstall.sh" + + + def first_time(self) : + + result = self.interface.yesnoback("Do you want to uninstall Firefox?(y/n) > ") + if result is None : + return None + elif result : + return ("Uninstalling " + self.name, self.execute) + else : + return False + + def isdefault(self) : + + subprocess.call(["../scripts/isinstalled.sh", "firefox"]) + return not super().isdefault("firefox") + + def show(self) : + + if self.isdefault() : + self.interface.show("Firefox : installed") + else : + self.interface.show("Firefox : not installed") + + + def change(self) : + + if self.isdefault() : + + str = ("Firefox is installed.\n", + "Do you want to uninstall Firefox?(y/n) > ") + + result = self.interface.yesnoback(str) + + if result is None : + return + elif result : + self.execute() + else : + return + + else : + + str = ("Firefox is not installed.\n", + "Do you want to install Firefox?(y/n) > ") + + result = self.interface.yesnoback(str) + + if result is None : + return + elif result : + self.restore() + else : + return + + +class Kdeconnect(Item) : + + name = "KDE Connect" + execute_src = "../scripts/kdeconnectinstall.sh" + restore_src = "../scripts/kdeconnectuninstall.sh" + + + def first_time(self) : + + result = self.interface.yesnoback("Do you want to install KDE Connect?(y/n) > ") + if result is None : + return None + elif result : + return ("Installing " + self.name, self.execute) + else : + return False + + def isdefault(self) : + + subprocess.call(["../scripts/isinstalled.sh", "kdeconnect"]) + return super().isdefault("kdeconnect") + + def show(self) : + + if self.isdefault() : + self.interface.show("KDE Connect : not installed") + else : + self.interface.show("KDE Connect : installed") + + + def change(self) : + + if self.isdefault() : + + str = ("KDE Connect is not installed.\n", + "Do you want to install KDE Connect?(y/n) > ") + + result = self.interface.yesnoback(str) + + if result is None : + return + elif result : + self.execute() + else : + return + + else : + + str = ("KDE Connect is installed.\n", + "Do you want to uninstall Firefox?(y/n) > ") + + result = self.interface.yesnoback(str) + + if result is None : + return + elif result : + self.restore() + else : + return + +class Wine(Item) : + + name = "Wine 4.0" + execute_src = "../scripts/wineinstall.sh" + restore_src = "../scripts/wineuninstall.sh" + + + def first_time(self) : + + result = self.interface.yesnoback("Do you want to install Wine 4.0?(y/n) > ") + + if result is None : + return None + + elif result : + + tasks = (Playonlinux(self.interface), Winetricks(self.interface)) + tasks_list = list() + + flag = False + i = 0 + while(i < 2) : + + res = tasks[i].first_time() + + if res is None : + if i == 0 : + return None + else : + continue + + elif res == False : + pass + + else : + if not flag : + tasks_list.append(True) + tasks_list.append(("Installing " + self.name, self.execute)) + flag = True + + tasks_list.append(res) + + i = i + 1 + + if not flag : + return ("Installing " + self.name, self.execute) + + return tasks_list + + else : + return False + + def isdefault(self) : + + subprocess.call(["../scripts/isinstalled.sh", "winehq-stable"]) + return super().isdefault("winehq-stable") + + + def show(self) : + + if self.isdefault() : + self.interface.show("Wine 4.0 : not installed ") + else : + self.interface.show("Wine 4.0 : installed") + + + def change(self) : + + if self.isdefault() : + + str = ("Wine 4.0 is not installed.\n", + "Do you want to install Wine 4.0?(y/n) > ") + + result = self.interface.yesnoback(str) + + if result is None : + return + elif result : + self.execute() + else : + return + + else : + + str = ("Wine 4.0 is installed.\n", + "Do you want to uninstall Wine 4.0?(y/n) > ") + + result = self.interface.yesnoback(str) + + if result is None : + return + elif result : + self.restore() + else : + return + +class Playonlinux(Item) : + + name = "PlayOnLinux" + execute_src = "../scripts/playonlinuxinstall.sh" + restore_src = "../scripts/playonlinuxuninstall.sh" + + + def first_time(self) : + + result = self.interface.yesnoback("Do you want to install PlayOnLinux?(y/n) > ") + if result is None : + return None + elif result : + return ("Installing " + self.name, self.execute) + else : + return False + + def isdefault(self) : + + subprocess.call(["../scripts/isinstalled.sh", "playonlinux"]) + return super().isdefault("playonlinux") + + def show(self) : + + if self.isdefault() : + self.interface.show("PlayOnLinux : not installed") + else : + self.interface.show("PlayOnLinux : installed") + + + def change(self) : + + if self.isdefault() : + + str = ("PlayOnLinux is not installed.\n", + "Do you want to install PlayOnLinux?(y/n) > ") + + result = self.interface.yesnoback(str) + + if result is None : + return + elif result : + self.execute() + else : + return + + else : + + str = ("PlayOnLinux is installed.\n", + "Do you want to uninstall PlayOnLinux?(y/n) > ") + + result = self.interface.yesnoback(str) + + if result is None : + return + elif result : + self.restore() + else : + return + + +class Winetricks(Item) : + + name = "Winetricks" + execute_src = "../scripts/winetricksinstall.sh" + restore_src = "../scripts/winetricksuninstall.sh" + + def execute(self) : + + super().execute() + subprocess.call(["sudo", "touch", "../data/winetricks"]) + + def restore(self) : + + super().restore() + subprocess.call(["sudo", "rm", "-f", "../data/winetricks"]) + + def first_time(self) : + + result = self.interface.yesnoback("Do you want to install Winetricks?(y/n) > ") + + if result is None : + return None + elif result : + return ("Installing " + self.name, self.execute) + else : + return False + + def isdefault(self) : + + return super().isdefault("winetricks") + + def show(self) : + + if self.isdefault() : + self.interface.show("Winetricks : not installed") + else : + self.interface.show("Winetricks : installed") + + + def change(self) : + + if self.isdefault() : + + str = ("Winetricks is not installed.\n", + "Do you want to install Winetricks?(y/n) > ") + + result = self.interface.yesnoback(str) + + if result is None : + return + elif result : + self.execute() + else : + return + + else : + + str = ("Winetricks is installed.\n", + "Do you want to uninstall Winetricks?(y/n) > ") + + result = self.interface.yesnoback(str) + + if result is None : + return + elif result : + self.restore() + else : + return + + diff --git a/src/serene-setup-wizard b/src/serene-setup-wizard new file mode 100755 index 0000000..7d71c2a --- /dev/null +++ b/src/serene-setup-wizard @@ -0,0 +1,84 @@ +#!/usr/bin/env python3 + +import os +import sys +import subprocess + +import Items +import Interfaces + +def add_tasks(_list, _tasks) : + + if _tasks[0] == True : + + for task in _tasks : + if task != True : + add_tasks(_list, task) + else : + _list.append(_tasks) + + +interface = Interfaces.CUI() + +# make users enter password to run this program on sudo +subprocess.call(["sudo", "echo"]) + +print("Welcome to serene-wizard!!\n") + +if not os.path.exists("../data/not_first_time") : + + items = Items.getItems_first_time(interface) + + tasks = list() + i = 0 + while(i < len(items)) : + + result = items[i].first_time() + + if result is None : + if i != 1 : + i = i - 1 + continue + + elif result == False : + pass + + else : + add_tasks(tasks, result) + + i = i + 1 + + if len(tasks) == 0 : + print("Done!") + print("See you again!!\n") + sys.exit() + + for i, task in enumerate(tasks) : + interface.status(task[0], i, len(task)) + task[1]() + + print("Done!") + print("See you again!!\n") + + subprocess.call(["sudo", "touch", "../data/not_first_time"]) + +else : + + items = Items.getItems(interface) + + while(True) : + + for i, item in enumerate(items) : + + print(i+1, " : ", end="") + item.show() + + result = interface.choose(len(items)) + + if result : + items[result-1].change() + + else : + print("See you again!!\n") + sys.exit() + -- 2.11.0