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 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 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. \n just 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 ( ) :
if os . path . exists ( os . path . join ( os . path . expanduser ( " ~ " ) , " .ttbp " ) ) :
2016-05-01 22:26:26 +00:00
print ( " welcome back, " + USER + " . " )
if not os . path . isfile ( os . path . join ( CONFIG , " ttbprc " ) ) :
print ( " \n your ttbp configuration doesn ' t look right. let ' s make you a fresh copy. \n \n " )
try :
setup ( )
except KeyboardInterrupt :
print ( " \n \n sorry, trying again. \n \n " )
setup ( )
raw_input ( " \n \n press 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 \n press enter to explore some options. \n \n " )
2016-05-01 17:44:49 +00:00
return " "
2016-05-01 22:26:26 +00:00
def setup ( ) :
global SETTINGS
# editor selection
print_menu ( EDITORS )
choice = raw_input ( " \n pick your favorite text editor: " )
while choice not in [ ' 0 ' , ' 1 ' , ' 2 ' , ' 3 ' , ' 4 ' ] :
choice = raw_input ( " \n please pick a number from the list: " )
SETTINGS [ " editor " ] = EDITORS [ int ( choice ) ]
print ( " \n text editor set to > " + SETTINGS [ " editor " ] )
# publish directory selection
choice = raw_input ( " \n \n where 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! \n if 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 ( " \n publishing to " + LIVE + USER + " / " + SETTINGS [ " publish dir " ] + " / \n \n " )
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 ( " \n tell 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 ( " \n pick 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 ( " \n composing a " + cat + " to ~endorphant. \n \n press 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 ( )