WIP on gopher stuff
parent
006caf230c
commit
0b77ad7c6a
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,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)
|
19
ttbp/ttbp.py
19
ttbp/ttbp.py
|
@ -30,6 +30,11 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||
|
||||
the complete codebase is available at:
|
||||
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
|
||||
|
||||
|
@ -46,6 +51,7 @@ import inflect
|
|||
from . import config
|
||||
from . import core
|
||||
from . import chatter
|
||||
from . import gopher
|
||||
from . import util
|
||||
|
||||
__version__ = "0.9.3"
|
||||
|
@ -56,7 +62,8 @@ p = inflect.engine()
|
|||
## user globals
|
||||
SETTINGS = {
|
||||
"editor": "none",
|
||||
"publish dir": False
|
||||
"publish dir": False,
|
||||
"gopher": False,
|
||||
}
|
||||
|
||||
## ui globals
|
||||
|
@ -401,6 +408,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: ' + 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=(',',':')))
|
||||
|
@ -703,6 +717,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
|
||||
|
|
Loading…
Reference in New Issue