WIP on gopher stuff

master
nate 2017-12-03 19:37:43 -08:00
parent 006caf230c
commit 0b77ad7c6a
3 changed files with 120 additions and 15 deletions

View File

@ -73,6 +73,28 @@ def reload_ttbprc(ttbprc={}):
SETTINGS = 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(): def load_files():
''' '''
file loader file loader
@ -83,20 +105,7 @@ def load_files():
global FILES global FILES
FILES = [] FILES = get_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()
## html outputting ## html outputting

79
ttbp/gopher.py 100644
View File

@ -0,0 +1,79 @@
"""
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:
gophermap.write('0{file_label}\t{filename}'.format(
file_label=os.path.basename(entry_filename),
filename=entry_filename))
with open(os.path.join(ttbp_gopher, entry_filename), 'w') as gopher_entry:
with open(entry_filename, 'r') as source_entry:
gopher_entry.write(source_entry.read())
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.is_dir(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)
os.mkdirs(ttbp_gopher)

View File

@ -30,6 +30,11 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
the complete codebase is available at: the complete codebase is available at:
https://github.com/modgethanc/ttbp https://github.com/modgethanc/ttbp
TODO ability to opt into gopher publishing
TODO check for existing public_gopher / gophermap
TODO write out files
''' '''
from __future__ import absolute_import from __future__ import absolute_import
@ -46,6 +51,7 @@ import inflect
from . import config from . import config
from . import core from . import core
from . import chatter from . import chatter
from . import gopher
from . import util from . import util
__version__ = "0.9.3" __version__ = "0.9.3"
@ -56,7 +62,8 @@ p = inflect.engine()
## user globals ## user globals
SETTINGS = { SETTINGS = {
"editor": "none", "editor": "none",
"publish dir": False "publish dir": False,
"gopher": False,
} }
## ui globals ## ui globals
@ -401,6 +408,13 @@ def setup():
if core.publishing(): if core.publishing():
print("publish directory: ~"+config.USER+"/public_html/"+SETTINGS.get("publish dir")) print("publish directory: ~"+config.USER+"/public_html/"+SETTINGS.get("publish dir"))
# gopher opt-in
SETTINGS.update({'gopher': gopher.select_gopher()})
redraw('opting into gopher: ' + 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 # save settings
ttbprc = open(config.TTBPRC, "w") ttbprc = open(config.TTBPRC, "w")
ttbprc.write(json.dumps(SETTINGS, sort_keys=True, indent=2, separators=(',',':'))) ttbprc.write(json.dumps(SETTINGS, sort_keys=True, indent=2, separators=(',',':')))
@ -703,6 +717,9 @@ editor.
core.load_files() core.load_files()
core.write("index.html") core.write("index.html")
left = "posted to "+config.LIVE+config.USER+"/"+str(SETTINGS.get("publish dir"))+"/index.html\n\n>" 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!") redraw(left + " thanks for sharing your feels!")
return return