forked from endorphant/ttbp
commit
a65dd546a4
37
ttbp/core.py
37
ttbp/core.py
|
@ -73,6 +73,28 @@ def reload_ttbprc(ttbprc={}):
|
|||
|
||||
SETTINGS = ttbprc
|
||||
|
||||
|
||||
def get_files():
|
||||
"""Returns a list of user's feels."""
|
||||
files = []
|
||||
for filename in os.listdir(config.USER_DATA):
|
||||
if nopub(filename):
|
||||
link = os.path.join(config.WWW,
|
||||
os.path.splitext(
|
||||
os.path.basename(filename))[0]+".html")
|
||||
if os.path.exists(link):
|
||||
subprocess.call(["rm", link])
|
||||
continue
|
||||
filename = os.path.join(config.USER_DATA, filename)
|
||||
if os.path.isfile(filename) and valid(filename):
|
||||
files.append(filename)
|
||||
|
||||
files.sort()
|
||||
files.reverse()
|
||||
|
||||
return files
|
||||
|
||||
|
||||
def load_files():
|
||||
'''
|
||||
file loader
|
||||
|
@ -83,20 +105,7 @@ def load_files():
|
|||
|
||||
global FILES
|
||||
|
||||
FILES = []
|
||||
|
||||
for filename in os.listdir(config.USER_DATA):
|
||||
if nopub(filename):
|
||||
link = os.path.join(config.WWW, os.path.splitext(os.path.basename(filename))[0]+".html")
|
||||
if os.path.exists(link):
|
||||
subprocess.call(["rm", link])
|
||||
continue
|
||||
filename = os.path.join(config.USER_DATA, filename)
|
||||
if os.path.isfile(filename) and valid(filename):
|
||||
FILES.append(filename)
|
||||
|
||||
FILES.sort()
|
||||
FILES.reverse()
|
||||
FILES = get_files()
|
||||
|
||||
|
||||
## html outputting
|
||||
|
|
|
@ -0,0 +1,85 @@
|
|||
"""
|
||||
This module contains gopher-related stuff.
|
||||
"""
|
||||
import getpass
|
||||
import os
|
||||
|
||||
from . import util
|
||||
|
||||
GOPHER_PROMPT = """
|
||||
Would you like to publish your feels to gopher?
|
||||
|
||||
gopher is a pre-web technology that is text-oriented and primarily used to
|
||||
share folders of your files with the world.
|
||||
|
||||
If you don't know what it is or don't want it that is totally ok!
|
||||
|
||||
You can always change this later.""".lstrip()
|
||||
|
||||
GOPHERMAP_HEADER = """
|
||||
welcome to {user}'s feels on gopher.
|
||||
|
||||
.:: .::
|
||||
.: .::
|
||||
.:.: .: .:: .:: .:: .::::
|
||||
.:: .: .:: .: .:: .::.::
|
||||
.:: .::::: .::.::::: .:: .:: .:::
|
||||
.:: .: .: .:: .::
|
||||
.:: .:::: .:::: .:::.:: .::
|
||||
|
||||
this file was created on their behalf by ttbp.
|
||||
|
||||
"""
|
||||
|
||||
|
||||
def select_gopher():
|
||||
return util.input_yn(GOPHER_PROMPT)
|
||||
|
||||
|
||||
def publish_gopher(gopher_path, entry_filenames):
|
||||
"""This function (re)generates a user's list of feels posts in their gopher
|
||||
directory and their gophermap."""
|
||||
entry_filenames = entry_filenames[:] # force a copy since this might be shared state in core.py
|
||||
entry_filenames.reverse()
|
||||
ttbp_gopher = os.path.join(
|
||||
os.path.expanduser('~/public_gopher'),
|
||||
gopher_path)
|
||||
|
||||
if not os.path.isdir(ttbp_gopher):
|
||||
print('\n\tERROR: something is wrong. your gopher directory is missing. re-enable gopher publishing.')
|
||||
return
|
||||
|
||||
with open(os.path.join(ttbp_gopher, 'gophermap'), 'w') as gophermap:
|
||||
gophermap.write(GOPHERMAP_HEADER.format(
|
||||
user=getpass.getuser()))
|
||||
for entry_filename in entry_filenames:
|
||||
filename = os.path.basename(entry_filename)
|
||||
|
||||
with open(os.path.join(ttbp_gopher, filename), 'w') as gopher_entry:
|
||||
with open(entry_filename, 'r') as source_entry:
|
||||
gopher_entry.write(source_entry.read())
|
||||
gophermap.write('0{file_label}\t{filename}'.format(
|
||||
file_label=os.path.basename(entry_filename),
|
||||
filename=filename))
|
||||
|
||||
|
||||
def setup_gopher(gopher_path):
|
||||
"""Given a path relative to ~/public_gopher, this function:
|
||||
|
||||
- creates a directory under public_gopher
|
||||
- creates a landing page
|
||||
|
||||
It doesn't create a gophermap as that is left to the publish_gopher
|
||||
function.
|
||||
"""
|
||||
public_gopher = os.path.expanduser('~/public_gopher')
|
||||
if not os.path.isdir(public_gopher):
|
||||
print("\n\tERROR: you don't seem to have gopher set up (no public_gopher directory)")
|
||||
return
|
||||
|
||||
ttbp_gopher = os.path.join(public_gopher, gopher_path)
|
||||
if os.path.isdir(ttbp_gopher):
|
||||
print("\n\tERROR: gopher path is already set up. quitting so we don't overwrite anything.")
|
||||
return
|
||||
|
||||
os.makedirs(ttbp_gopher)
|
24
ttbp/ttbp.py
24
ttbp/ttbp.py
|
@ -34,13 +34,11 @@ https://github.com/modgethanc/ttbp
|
|||
from __future__ import absolute_import
|
||||
|
||||
import os
|
||||
import random
|
||||
import tempfile
|
||||
import subprocess
|
||||
import time
|
||||
import json
|
||||
from email.mime.text import MIMEText;
|
||||
import re
|
||||
from email.mime.text import MIMEText
|
||||
import datetime
|
||||
|
||||
import inflect
|
||||
|
@ -48,6 +46,7 @@ import inflect
|
|||
from . import config
|
||||
from . import core
|
||||
from . import chatter
|
||||
from . import gopher
|
||||
from . import util
|
||||
|
||||
__version__ = "0.9.3"
|
||||
|
@ -58,7 +57,8 @@ p = inflect.engine()
|
|||
## user globals
|
||||
SETTINGS = {
|
||||
"editor": "none",
|
||||
"publish dir": False
|
||||
"publish dir": False,
|
||||
"gopher": False,
|
||||
}
|
||||
|
||||
## ui globals
|
||||
|
@ -72,7 +72,7 @@ RAINBOW = False
|
|||
|
||||
## ref
|
||||
|
||||
EDITORS = ["vim", "vi", "emacs", "pico", "nano", "ed"]
|
||||
EDITORS = ["vim", "vi", "emacs", "pico", "nano", "ed", "micro"]
|
||||
SUBJECTS = ["help request", "bug report", "feature suggestion", "general comment"]
|
||||
|
||||
## ttbp specific utilities
|
||||
|
@ -388,7 +388,9 @@ def setup():
|
|||
print("\n\ttext editor:\t" +SETTINGS.get("editor"))
|
||||
if core.publishing():
|
||||
print("\tpublish dir:\t" +os.path.join(config.PUBLIC, str(SETTINGS.get("publish dir"))))
|
||||
print("\tpubishing:\t"+str(SETTINGS.get("publishing"))+"\n")
|
||||
print("\tpublishing:\t"+str(SETTINGS.get("publishing")))
|
||||
print("\tgopher:\t"+str(SETTINGS.get('gopher')))
|
||||
print("")
|
||||
|
||||
# editor selection
|
||||
SETTINGS.update({"editor": select_editor()})
|
||||
|
@ -403,6 +405,13 @@ def setup():
|
|||
if core.publishing():
|
||||
print("publish directory: ~"+config.USER+"/public_html/"+SETTINGS.get("publish dir"))
|
||||
|
||||
# gopher opt-in
|
||||
SETTINGS.update({'gopher': gopher.select_gopher()})
|
||||
redraw('opting into gopher: ' + str(SETTINGS['gopher']))
|
||||
# TODO for now i'm hardcoding where people's gopher stuff is generated. if
|
||||
# there is demand for this to be configurable we can expose that.
|
||||
gopher.setup_gopher('feels')
|
||||
|
||||
# save settings
|
||||
ttbprc = open(config.TTBPRC, "w")
|
||||
ttbprc.write(json.dumps(SETTINGS, sort_keys=True, indent=2, separators=(',',':')))
|
||||
|
@ -705,6 +714,9 @@ editor.
|
|||
core.load_files()
|
||||
core.write("index.html")
|
||||
left = "posted to "+config.LIVE+config.USER+"/"+str(SETTINGS.get("publish dir"))+"/index.html\n\n>"
|
||||
|
||||
if SETTINGS['gopher']:
|
||||
gopher.publish_gopher('feels', core.get_files())
|
||||
redraw(left + " thanks for sharing your feels!")
|
||||
|
||||
return
|
||||
|
|
|
@ -212,8 +212,4 @@ def input_yn(query):
|
|||
while ans not in ["y", "n"]:
|
||||
ans = raw_input("'y' or 'n' please: ")
|
||||
|
||||
if ans == "y":
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
return ans == "y"
|
||||
|
|
Loading…
Reference in New Issue