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
|
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
|
||||||
|
|
|
@ -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:
|
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
|
||||||
|
|
Loading…
Reference in New Issue