2021-09-18 21:37:18 +10:00
from django . http import HttpResponse
import random as ra
import asyncio
from . import mdl
2022-02-27 23:23:26 +11:00
from . models import Page , Contact , Update , Redirect
2021-09-18 21:37:18 +10:00
2022-02-09 19:59:04 +11:00
from rakka . utils import rerender , parsecat
2021-09-18 21:37:18 +10:00
@rerender
def index ( ) :
with open ( ' main/pages/index ' ) as b :
stuff = b . read ( )
with open ( ' main/utils/song-ids ' ) as b :
raws = b . read ( )
ids = raws . split ( ' \n ' )
stuff = stuff . format ( ra . choice ( ids ) )
2022-02-10 06:02:55 +11:00
return { ' title ' : ' Home ' , ' content ' : stuff , ' date ' : ' 2022/02/09 ' }
2021-09-18 21:37:18 +10:00
2022-02-09 19:59:04 +11:00
def lii ( obj ) : # This will get moved to a template shortly
2021-12-12 21:52:02 +11:00
name = obj . name
2022-04-06 00:50:06 +10:00
relme = " rel= ' me ' " if obj . rel else ' '
if obj . url : name = f " <a { relme } href= ' { obj . url } ' > { name } </a> "
2021-12-12 21:52:02 +11:00
if obj . comment : name = f " { name } ( { obj . comment } ) "
2021-12-24 12:01:00 +11:00
if obj . desktop : name = f " { name } 🖥 "
if obj . mobile : name = f " { name } 📱 "
2021-12-12 21:52:02 +11:00
return f " <li> { obj . proto } : { name } </li> "
2021-09-18 21:37:18 +10:00
@rerender
def contact ( ) :
2021-12-24 12:01:00 +11:00
head = """ Certain people keep asking me about the best ways to contact me. So here they are, in rough order of most to least preferred. More to come as I remember them/feel like it<br/>
🖥 = I will receive on my computer , 📱 = I will receive on my phone < br / > """
2021-12-12 21:53:10 +11:00
contacts = sorted ( Contact . objects . all ( ) , key = lambda x : ( x . group , x . priority ) )
2021-12-12 21:52:02 +11:00
out = { }
for n in contacts :
if n . group in out : out [ n . group ] . append ( n )
else : out [ n . group ] = [ n ]
2021-09-18 21:37:18 +10:00
out3 = ' '
for k , v in out . items ( ) :
2021-12-12 21:52:02 +11:00
out2 = f " \n <p><h4> { Contact . groups [ k ] } </h4> \n <ul> "
out2 + = ' \n ' . join ( map ( lii , v ) )
2021-09-18 21:37:18 +10:00
out2 + = " \n </ul></p> "
out3 + = out2
2022-01-26 19:51:03 +11:00
return { ' title ' : ' Contact ' , ' content ' : head + out3 , ' date ' : Update . objects . get_or_create ( page = ' contact ' ) [ 0 ] . date }
2021-09-18 21:37:18 +10:00
def specs ( req ) :
with open ( ' main/pages/specs ' ) as b :
return HttpResponse ( b . read ( ) , content_type = " text/plain " )
2022-01-02 22:04:47 +11:00
@rerender
def comment ( ) :
return { ' title ' : ' Comment box ' , ' content ' : " TODO " , ' date ' : ' 2021/12/24 ' }
2021-09-18 21:37:18 +10:00
@rerender
def songs ( ) :
with open ( ' main/utils/song-ids ' ) as b :
raws = b . read ( )
ids = raws . split ( ' \n ' )
out = ' This is the full list of songs that can appear on the home page.<br/> ' + ' <br/> \n ' . join ( [ f ' <a href= " https://invidious.ethibox.fr/watch?v= { idd } " >https://invidious.ethibox.fr/watch?v= { idd } </a> ' for idd in ids ] )
return { ' title ' : ' Songs ' , ' content ' : out , ' date ' : ' 2021/05/06 ' }
@rerender
def nerdshope ( ) :
2022-04-10 23:25:50 +10:00
return { ' title ' : " Nerds ' Hope " , ' content ' : " Store stuff. TODO. Will include inventory and budget. <a href= ' https://facebook.com/nerdshope ' >FB</a><br/>Address is 21 Kensington St, Glenorchy<br/>Off dates 2022: 29th April, 6th May, 27th May, 17th June, 24th June " , ' date ' : ' 2022/04/10 ' }
2021-09-18 21:37:18 +10:00
def teapot ( req ) :
return HttpResponse ( " You ' re probably missing the joke. " , status = 418 )
@rerender
def articles ( ) :
head = " <p>Interesting/useful blog posts I ' ve found.</p> "
arts = parsecat ( ' articles ' , 2 )
out = [ ]
for k , v in arts . items ( ) :
out . append ( f ' <h4> { k } </h4> ' + ' <br/> ' . join ( [ f ' <a href= " { l [ 0 ] } " > { l [ 1 ] or l [ 0 ] } </a> ' for l in v ] ) )
2022-04-10 23:22:52 +10:00
return { ' title ' : ' Articles ' , ' content ' : ' <p> ' + ( ' </p> \n <p> ' . join ( out ) ) + ' </p> ' , ' date ' : ' 2021/05/06 ' }
2021-09-18 21:37:18 +10:00
def redirect ( req , src ) :
2022-02-27 23:23:26 +11:00
return HttpResponse ( status = 302 , headers = { ' Location ' : src . output } )
2021-09-18 21:37:18 +10:00
def md ( req ) :
loop = asyncio . get_event_loop ( )
feed = loop . run_until_complete ( mdl . makefeed ( req . GET . getlist ( ' ids ' , ' ' ) ) )
2021-09-21 02:39:54 +10:00
return HttpResponse ( feed , content_type = ' application/rss+xml ' )
2021-11-10 02:45:32 +11:00
def vcard ( req ) :
return HttpResponse ( """ BEGIN:VCARD
VERSION : 4.0
KIND : individual
FN : Zergling_man
EMAIL : zerglingman @fedora.email
URL : https : / / rakka . tk
IMPP : xmpp : zergling_man @xmpp.jp ; matrix : @zergling.man : perthchat . org
NOTE : Anti - professionalism , pro - open standards
CATEGORIES : programmer , biker
SOURCE : https : / / rakka . tk / me . vcf
END : VCARD """ )
2021-12-10 03:33:05 +11:00
2021-10-09 20:36:50 +11:00
@rerender
2021-10-10 00:27:52 +11:00
def autopage ( page ) :
2022-04-10 23:22:52 +10:00
return { ' title ' : page . title , ' content ' : page . contents , ' date ' : page . last_edited }