main
Bob Mottram 2021-03-18 19:04:58 +00:00
parent 47a6d178e0
commit aa7c78d2f1
2 changed files with 24 additions and 110 deletions

View File

@ -13,16 +13,11 @@ import sys
import select import select
import webbrowser import webbrowser
import urllib.parse import urllib.parse
from pathlib import Path
from random import randint from random import randint
from utils import loadTranslationsFromFile from utils import loadTranslationsFromFile
from utils import removeHtml from utils import removeHtml
from utils import getStatusNumber
from utils import loadJson
from utils import saveJson
from utils import getNicknameFromActor from utils import getNicknameFromActor
from utils import getDomainFromActor from utils import getDomainFromActor
from utils import getFullDomain
from utils import isPGPEncrypted from utils import isPGPEncrypted
from session import createSession from session import createSession
from speaker import speakableText from speaker import speakableText
@ -352,43 +347,6 @@ def _desktopNewPost(session,
_sayCommand(sayStr, sayStr, screenreader, systemLanguage, espeak) _sayCommand(sayStr, sayStr, screenreader, systemLanguage, espeak)
def _getSpeakerJsonFromIndex(boxName: str, index: int) -> {}:
"""Returns the json for the given post index
"""
homeDir = str(Path.home())
if not os.path.isdir(homeDir + '/.config'):
os.mkdir(homeDir + '/.config')
if not os.path.isdir(homeDir + '/.config/epicyon'):
os.mkdir(homeDir + '/.config/epicyon')
msgDir = homeDir + '/.config/epicyon/' + boxName
if not os.path.isdir(msgDir):
os.mkdir(msgDir)
indexList = []
for subdir, dirs, files in os.walk(msgDir):
for f in files:
if not f.endswith('.json'):
continue
indexList.append(f)
indexList.sort(reverse=True)
index -= 1
if index <= 0:
index = 0
if len(indexList) <= index:
return None
publishedYear = indexList[index].split('-')[0]
publishedMonth = indexList[index].split('-')[1]
speakerJsonFilename = \
os.path.join(msgDir,
publishedYear + '/' +
publishedMonth + '/' +
indexList[index])
if not os.path.isfile(speakerJsonFilename):
return None
return loadJson(speakerJsonFilename)
def _safeMessage(content: str) -> str: def _safeMessage(content: str) -> str:
"""Removes anything potentially unsafe from a string """Removes anything potentially unsafe from a string
""" """
@ -461,7 +419,7 @@ def _readLocalBoxPost(baseDir: str, boxName: str,
return return
content = _safeMessage(content) content = _safeMessage(content)
messageStr = speakableText(baseDir, content, translate) messageStr, detectedLinks = speakableText(baseDir, content, translate)
if screenreader: if screenreader:
time.sleep(2) time.sleep(2)
@ -619,33 +577,6 @@ def _desktopNewDM(session, toHandle: str,
espeak) espeak)
def _desktopStoreMsg(speakerJson: {}, boxName: str) -> None:
"""Stores a message in your home directory for later reading
which could be offline
"""
if not speakerJson.get('published'):
return
homeDir = str(Path.home())
if not os.path.isdir(homeDir + '/.config'):
os.mkdir(homeDir + '/.config')
if not os.path.isdir(homeDir + '/.config/epicyon'):
os.mkdir(homeDir + '/.config/epicyon')
msgDir = homeDir + '/.config/epicyon/' + boxName
if not os.path.isdir(msgDir):
os.mkdir(msgDir)
publishedYear = speakerJson['published'].split('-')[0]
yearDir = msgDir + '/' + publishedYear
if not os.path.isdir(yearDir):
os.mkdir(yearDir)
publishedMonth = speakerJson['published'].split('-')[1]
monthDir = yearDir + '/' + publishedMonth
if not os.path.isdir(monthDir):
os.mkdir(monthDir)
msgFilename = monthDir + '/' + speakerJson['published'] + '.json'
saveJson(speakerJson, msgFilename)
def _desktopNewDMbase(session, toHandle: str, def _desktopNewDMbase(session, toHandle: str,
baseDir: str, nickname: str, password: str, baseDir: str, nickname: str, password: str,
domain: str, port: int, httpPrefix: str, domain: str, port: int, httpPrefix: str,
@ -695,7 +626,6 @@ def _desktopNewDMbase(session, toHandle: str,
# if there is a local PGP key then attempt to encrypt the DM # if there is a local PGP key then attempt to encrypt the DM
# using the PGP public key of the recipient # using the PGP public key of the recipient
newMessageOriginal = newMessage
if hasLocalPGPkey(): if hasLocalPGPkey():
sayStr = \ sayStr = \
'Local PGP key detected...' + \ 'Local PGP key detected...' + \
@ -740,23 +670,6 @@ def _desktopNewDMbase(session, toHandle: str,
attachedImageDescription, attachedImageDescription,
cachedWebfingers, personCache, isArticle, cachedWebfingers, personCache, isArticle,
debug, None, None, subject) == 0: debug, None, None, subject) == 0:
# store the DM locally
statusNumber, published = getStatusNumber()
postId = \
httpPrefix + '://' + getFullDomain(domain, port) + \
'/users/' + nickname + '/statuses/' + statusNumber
speakerJson = {
"name": nickname,
"summary": "",
"content": newMessageOriginal,
"say": newMessageOriginal,
"published": published,
"imageDescription": "",
"detectedLinks": [],
"id": postId,
"direct": True
}
_desktopStoreMsg(speakerJson, 'sent')
sayStr = 'Direct message sent' sayStr = 'Direct message sent'
else: else:
sayStr = 'Direct message failed' sayStr = 'Direct message failed'
@ -1233,25 +1146,26 @@ def runDesktopClient(baseDir: str, proxyType: str, httpPrefix: str,
postIndex = commandStr.split(' ')[-1].strip() postIndex = commandStr.split(' ')[-1].strip()
if postIndex.isdigit(): if postIndex.isdigit():
currIndex = int(postIndex) currIndex = int(postIndex)
speakerJson = \ if currIndex > 0 and boxJson:
_getSpeakerJsonFromIndex(currTimeline, currIndex) postJsonObject = \
if not speakerJson: _desktopGetBoxPostObject(boxJson, currIndex)
speakerJson = {} if postJsonObject:
linkOpened = False content = postJsonObject['object']['content']
if speakerJson.get('detectedLinks'): messageStr, detectedLinks = \
if len(speakerJson['detectedLinks']) > 0: speakableText(baseDir, content, translate)
for url in speakerJson['detectedLinks']: linkOpened = False
if '://' in url: for url in detectedLinks:
webbrowser.open(url) if '://' in url:
linkOpened = True webbrowser.open(url)
if linkOpened: linkOpened = True
sayStr = 'Opened web links' if linkOpened:
_sayCommand(sayStr, sayStr, originalScreenReader, sayStr = 'Opened web links'
systemLanguage, espeak) _sayCommand(sayStr, sayStr, originalScreenReader,
if not linkOpened: systemLanguage, espeak)
sayStr = 'There are no web links to open.' else:
_sayCommand(sayStr, sayStr, originalScreenReader, sayStr = 'There are no web links to open.'
systemLanguage, espeak) _sayCommand(sayStr, sayStr, originalScreenReader,
systemLanguage, espeak)
print('') print('')
elif commandStr.startswith('h'): elif commandStr.startswith('h'):
_desktopHelp() _desktopHelp()

View File

@ -407,12 +407,12 @@ def getSSMLbox(baseDir: str, path: str,
instanceTitle, gender) instanceTitle, gender)
def speakableText(baseDir: str, content: str, translate: {}) -> str: def speakableText(baseDir: str, content: str, translate: {}) -> (str, []):
"""Convert the given text to a speakable version """Convert the given text to a speakable version
which includes changes for prononciation which includes changes for prononciation
""" """
if isPGPEncrypted(content): if isPGPEncrypted(content):
return return content, []
# replace some emoji before removing html # replace some emoji before removing html
if ' <3' in content: if ' <3' in content:
@ -428,7 +428,7 @@ def speakableText(baseDir: str, content: str, translate: {}) -> str:
# replace all double spaces # replace all double spaces
while ' ' in sayContent: while ' ' in sayContent:
sayContent = sayContent.replace(' ', ' ') sayContent = sayContent.replace(' ', ' ')
return sayContent.replace(' . ', '. ').strip() return sayContent.replace(' . ', '. ').strip(), detectedLinks
def _postToSpeakerJson(baseDir: str, httpPrefix: str, def _postToSpeakerJson(baseDir: str, httpPrefix: str,