ttbp/bin/ttbp.py

238 lines
6.6 KiB
Python
Raw Normal View History

2016-04-30 03:17:06 +00:00
#!/usr/bin/python
import os
2016-05-01 17:44:49 +00:00
import random
import tempfile
import subprocess
import time
2016-05-01 22:43:12 +00:00
import json
2016-05-01 17:44:49 +00:00
2016-05-01 18:10:04 +00:00
#import core
2016-05-01 00:19:00 +00:00
import chatter
2016-04-30 03:17:06 +00:00
2016-05-01 22:26:26 +00:00
## system globals
2016-05-01 00:19:00 +00:00
SOURCE = os.path.join("/home", "endorphant", "projects", "ttbp", "bin")
2016-05-01 22:26:26 +00:00
LIVE = "http://tilde.town/~"
FEEDBACK = os.path.join("/home", "endorphant", "ttbp-mail")
## user globals
2016-05-01 00:19:00 +00:00
USER = os.path.basename(os.path.expanduser("~"))
PATH = os.path.join("/home", USER, ".ttbp")
WWW = os.path.join(PATH, "www")
2016-04-30 03:48:01 +00:00
CONFIG = os.path.join(PATH, "config")
2016-05-01 22:43:12 +00:00
TTBPRC = os.path.join(CONFIG, "ttbprc")
2016-05-01 00:19:00 +00:00
DATA = os.path.join(PATH, "entries")
2016-05-01 22:26:26 +00:00
SETTINGS = {
"editor":"vim",
"publish dir":"blog"
}
2016-04-30 03:17:06 +00:00
2016-05-01 22:26:26 +00:00
## ui globals
2016-05-01 18:10:04 +00:00
BANNER = open(os.path.join(SOURCE, "config", "banner.txt")).read()
2016-05-01 17:44:49 +00:00
SPACER = "\n\n\n"
2016-05-01 18:10:04 +00:00
INVALID = "please pick a number from the list of options!\n\n"
DUST = "sorry about the dust, but this part is still under construction. check back later!\n\n"
2016-05-01 22:26:26 +00:00
## ref
EDITORS = ["vim", "vi", "emacs", "pico", "nano"]
SUBJECTS = ["bug report", "feature suggestion", "general comment"]
2016-05-01 18:10:04 +00:00
##
def redraw(leftover=""):
os.system("clear")
print(BANNER)
print(SPACER)
if leftover:
print("> "+leftover+"\n")
2016-04-30 03:17:06 +00:00
def start():
2016-05-01 18:10:04 +00:00
redraw()
2016-05-01 17:44:49 +00:00
#print(chatter.say("greet")+", "+chatter.say("friend"))
#print("(remember, you can always press ctrl-c to come home)\n")
print("if you don't want to be here at any point, press ctrl-d and it'll all go away.\njust keep in mind that you might lose anything you've started here.\n")
2016-04-30 03:34:43 +00:00
print(check_init())
2016-04-30 03:17:06 +00:00
try:
2016-05-01 18:10:04 +00:00
redraw()
2016-04-30 03:17:06 +00:00
print(main_menu())
except ValueError or SyntaxError:
2016-05-01 22:26:26 +00:00
redraw("oh no i didn't understand that. let's go home and start over.")
2016-04-30 03:17:06 +00:00
print(main_menu())
except KeyboardInterrupt:
2016-05-01 22:26:26 +00:00
redraw("eject button fired! going home now.")
2016-04-30 03:17:06 +00:00
print(main_menu())
2016-04-30 03:34:43 +00:00
def stop():
2016-05-01 00:19:00 +00:00
return "\n\t"+chatter.say("bye")
2016-04-30 03:34:43 +00:00
def check_init():
2016-05-01 22:43:12 +00:00
global SETTINGS
2016-04-30 03:34:43 +00:00
if os.path.exists(os.path.join(os.path.expanduser("~"),".ttbp")):
2016-05-01 22:26:26 +00:00
print("welcome back, "+USER+".")
2016-05-01 22:43:12 +00:00
while not os.path.isfile(TTBPRC):
setup_handler()
try:
SETTINGS = json.load(open(TTBPRC))
except ValueError:
setup_handler()
2016-05-01 22:26:26 +00:00
raw_input("\n\npress enter to explore your feelings.\n\n")
2016-05-01 17:44:49 +00:00
return ""
2016-04-30 03:34:43 +00:00
else:
return init()
def init():
2016-05-01 18:10:04 +00:00
raw_input("i don't recognize you, stranger. let's make friends someday.\n\npress enter to explore some options.\n\n")
2016-05-01 17:44:49 +00:00
return ""
2016-05-01 22:43:12 +00:00
def setup_handler():
print("\nyour ttbp configuration doesn't look right. let's make you a fresh copy.\n\n")
try:
setup()
except KeyboardInterrupt:
print("\n\nsorry, trying again.\n\n")
setup()
2016-05-01 22:26:26 +00:00
def setup():
global SETTINGS
# editor selection
print_menu(EDITORS)
choice = raw_input("\npick your favorite text editor: ")
while choice not in ['0', '1', '2', '3', '4']:
choice = raw_input("\nplease pick a number from the list: ")
SETTINGS["editor"] = EDITORS[int(choice)]
print("\ntext editor set to >"+SETTINGS["editor"])
# publish directory selection
choice = raw_input("\n\nwhere do you want your blog published? (leave blank to use default \"blog\") ")
if not choice:
choice = "blog"
publishing = os.path.join("/home", USER, "public_html", choice)
while os.path.exists(publishing):
second = raw_input("\n"+publishing+" already exists!\nif you're sure you want to use it, hit <enter> to confirm. otherwise, pick another location: ")
if second == "":
break
choice = second
publishing = os.path.join("/home", USER, "public_html", choice)
SETTINGS["publish dir"] = choice
# set up publish directory
if not os.path.exists(publishing):
subprocess.call(["mkdir", publishing])
subprocess.call(["touch", os.path.join(publishing, "index.html")])
index = open(os.path.join(publishing, "index.html"), "w")
index.write("<h1>ttbp blog placeholder</h1>")
index.close()
subprocess.call(["rm", WWW])
subprocess.call(["ln", "-s", publishing, WWW])
print("\npublishing to "+LIVE+USER+"/"+SETTINGS["publish dir"]+"/\n\n")
2016-05-01 22:43:12 +00:00
# save settings
ttbprc = open(TTBPRC, "w")
ttbprc.write(json.dumps(SETTINGS, sort_keys=True, indent=2, separators=(',',':')))
ttbprc.close()
2016-05-01 22:26:26 +00:00
return SETTINGS
2016-05-01 17:44:49 +00:00
## menus
def print_menu(menu):
i = 0
for x in menu:
line = []
line.append("\t[ ")
if i < 10:
line.append(" ")
line.append(str(i)+" ] "+x)
print("".join(line))
i += 1
2016-04-30 03:34:43 +00:00
2016-04-30 03:17:06 +00:00
def main_menu():
2016-05-01 18:10:04 +00:00
#os.system("clear")
#print(BANNER)
#redraw()
2016-05-01 22:26:26 +00:00
menuOptions = [
"record feelings",
"check out neighbors",
"change settings",
"send feedback",
"see credits"]
2016-05-01 18:10:04 +00:00
#print(SPACER)
2016-05-01 17:44:49 +00:00
print("you're at ttbp home now. remember, you can always press ctrl-c to come back here.\n\n")
print_menu(menuOptions)
#print("how are you feeling today? ")
2016-05-01 22:26:26 +00:00
try:
choice = raw_input("\ntell me about your feels (enter 'none' to quit): ")
except KeyboardInterrupt:
redraw("eject button fired! going home now.")
return main_menu()
2016-05-01 17:44:49 +00:00
if choice == '0':
2016-05-01 18:10:04 +00:00
redraw(DUST)
2016-05-01 17:44:49 +00:00
elif choice == '1':
2016-05-01 18:10:04 +00:00
redraw(DUST)
2016-05-01 17:44:49 +00:00
elif choice == '2':
2016-05-01 22:26:26 +00:00
redraw(DUST)
elif choice == '3':
2016-05-01 18:10:04 +00:00
redraw()
feedback_menu()
2016-05-01 22:26:26 +00:00
elif choice == '4':
redraw(DUST)
2016-05-01 17:44:49 +00:00
elif choice == "none":
return stop()
else:
2016-05-01 18:10:04 +00:00
redraw(INVALID)
2016-05-01 17:44:49 +00:00
return main_menu()
2016-04-30 03:17:06 +00:00
2016-05-01 17:44:49 +00:00
def feedback_menu():
2016-05-01 18:10:04 +00:00
print("you're about to send mail to ~endorphant about ttbp\n\n")
2016-04-30 03:17:06 +00:00
2016-05-01 22:26:26 +00:00
print_menu(SUBJECTS)
2016-05-01 17:44:49 +00:00
choice = raw_input("\npick a category for your feedback: ")
2016-04-30 03:17:06 +00:00
2016-05-01 17:44:49 +00:00
cat = ""
if choice in ['0', '1', '2']:
2016-05-01 22:26:26 +00:00
cat = SUBJECTS[int(choice)]
2016-05-01 18:10:04 +00:00
raw_input("\ncomposing a "+cat+" to ~endorphant.\n\npress enter to open an external text editor. mail will be sent once you save and quit.\n")
redraw(send_feedback(cat))
return
2016-05-01 17:44:49 +00:00
else:
2016-05-01 18:10:04 +00:00
redraw(INVALID)
2016-05-01 17:44:49 +00:00
return feedback_menu()
## handlers
def write_entry(entry=os.path.join(DATA, "test.txt")):
2016-05-01 22:26:26 +00:00
subprocess.call([SETTINGS["editor"], entry])
2016-05-01 17:44:49 +00:00
return "wrote to "+entry
def send_feedback(subject="none", mailbox=os.path.join(FEEDBACK, USER+"-"+str(int(time.time()))+".msg")):
mail = ""
temp = tempfile.NamedTemporaryFile()
2016-05-01 22:26:26 +00:00
subprocess.call([SETTINGS["editor"], temp.name])
2016-05-01 17:44:49 +00:00
mail = open(temp.name, 'r').read()
outfile = open(mailbox, 'w')
outfile.write("from:\t\t~"+USER+"\n")
outfile.write("subject:\t"+subject+"\n\n")
outfile.write(mail)
outfile.close()
return "mail sent. thanks for writing! i'll try to respond to you soon."
2016-04-30 03:48:01 +00:00
#####
start()