Skip to content

Commit

Permalink
Changes for allowing for docker container
Browse files Browse the repository at this point in the history
  • Loading branch information
dmadisetti committed May 17, 2023
1 parent 135d3d0 commit 5547262
Show file tree
Hide file tree
Showing 7 changed files with 87 additions and 23 deletions.
10 changes: 10 additions & 0 deletions plugin/airlatex.vim
Original file line number Diff line number Diff line change
Expand Up @@ -86,9 +86,19 @@ if exists('*airline#parts#define_function')
return ''
endif
endfunction
function! AirLatexCheckOfflineBuffer()
let buffer_name = expand('%:t')
if buffer_name =~ 'Offline'
return "Offline"
else
return ""
endif
endfunction
" Define a new Airline part using the created function
call airline#parts#define_function('air_latex', 'AirLatexAirlineStatus')
call airline#parts#define_function('air_latex_error', 'AirLatexCheckOfflineBuffer')
let g:airline_section_a = airline#section#create(['mode', 'air_latex'])
let g:airline_section_error = airline#section#create(['air_latex_error'])
call airline#update_statusline()
endif

Expand Down
2 changes: 2 additions & 0 deletions rplugin/python3/airlatex/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,8 @@ def commentSelection(self, args):
end_line += 1

def callback():
if self.comments.invalid:
return
buffer = self.nvim.current.buffer
if buffer in DocumentBuffer.allBuffers:
document = DocumentBuffer.allBuffers[buffer]
Expand Down
24 changes: 22 additions & 2 deletions rplugin/python3/airlatex/commentbuffer.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ def __init__(self, nvim, airlatex):

self.uilock = Lock()
self.comment_id = 1
self.invalid = False

# ----------- #
# AsyncIO API #
Expand All @@ -41,6 +42,11 @@ async def triggerRefresh(self):
await self.uilock.acquire()
self.nvim.async_call(self._render)

async def markInvalid(self):
self.log.debug("invalid")
self.invalid = True
await self.triggerRefresh()

async def updateStatus(self, msg):
self.log.debug_gui("trying to acquire (in update)")
self.status = msg
Expand All @@ -66,9 +72,9 @@ def updateStatusLine(self, releaseLock=True):
@pynvimCatchException
def bufferappend(self, arg, pos=[]):
if self.buffer_write_i >= len(self.buffer):
self.buffer.append(arg)
self.buffer.append(arg.rstrip())
else:
self.buffer[self.buffer_write_i] = arg
self.buffer[self.buffer_write_i] = arg.rstrip()
self.buffer_write_i += 1
if self.buffer_write_i == self.cursor[0]:
self.cursorPos = pos
Expand Down Expand Up @@ -155,6 +161,10 @@ def _render(self):
self.log.debug(f"in render {self.threads, self.index}")
self.buffer[:] = []

if self.invalid:
self.buffer[0] = "Unable to communicate with comments server."
return

if not self.threads:
return
# Reset
Expand Down Expand Up @@ -260,6 +270,8 @@ def content(self):

@pynvimCatchException
def finishDraft(self, submit):
if self.invalid:
return
if self.drafting:
self.drafting = False
if not self.creation:
Expand Down Expand Up @@ -292,6 +304,8 @@ def finishDraft(self, submit):

@pynvimCatchException
def prepCommentCreation(self):
if self.invalid:
return
self.previous_open = self.visible
if self.visible:
window = self.nvim.call('bufwinnr', self.buffer.number)
Expand All @@ -304,6 +318,8 @@ def prepCommentCreation(self):

@pynvimCatchException
def prepCommentRespond(self):
if self.invalid:
return
if not self.drafting:
self.buffer[:] = []
self.buffer[0] = ""
Expand All @@ -318,6 +334,8 @@ def prepCommentRespond(self):

@pynvimCatchException
def changeComment(self, change):
if self.invalid:
return
self.index = (self.index + change) % len(self.threads)
create_task(self.triggerRefresh())

Expand All @@ -330,6 +348,8 @@ def toggle(self):

@pynvimCatchException
def cursorAction(self, key="enter"):
if self.invalid:
return
if key == "enter":
resolve_pattern = re.compile(r'resolve\s+✓✓$')
if resolve_pattern.search(self.nvim.current.line):
Expand Down
2 changes: 2 additions & 0 deletions rplugin/python3/airlatex/documentbuffer.py
Original file line number Diff line number Diff line change
Expand Up @@ -225,6 +225,8 @@ def callback():

def highlightComment(self, comments, thread):
thread_id = thread["id"]
if not comments:
return
comments = comments.get(thread_id, {})
resolved = comments.get("resolved", False)
if resolved or not comments:
Expand Down
32 changes: 17 additions & 15 deletions rplugin/python3/airlatex/project_handler.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
from logging import getLogger
from asyncio import sleep, create_task
import requests
import traceback

from datetime import datetime

Expand Down Expand Up @@ -146,7 +147,8 @@ async def syncGit(self, message):
assert response.status_code == 200, f"Bad status code {response.status_code}"
self.log.debug("Synced.")
except Exception as e:
self.log.debug("\nCompilation response content:")
self.log.debug(traceback.format_exc())
self.log.debug("\nError in sync:")
self.log.debug(f"{response.content}\n---\n{e}")

async def compile(self):
Expand Down Expand Up @@ -175,6 +177,7 @@ async def compile(self):
raise Exception("No success in compiling. Something failed.")
logger.debug("Compiled.")
except Exception as e:
self.log.debug(traceback.format_exc())
logger.debug("\nCompilation response content:")
logger.debug(f"{response.content}\n---\n{e}")

Expand All @@ -196,6 +199,7 @@ async def adjustComment(
# We'll get a websocket confirmation, and handle it from there.
# Nothing else to do
except Exception as e:
self.log.debug(traceback.format_exc())
logger.debug("\n {state} response content:")
logger.debug(f"{response.content}\n---\n{e}")
if resolve_state is not None:
Expand Down Expand Up @@ -257,8 +261,11 @@ async def getComments(self):
logger.debug("Got comments")
return comments
except Exception as e:
self.log.debug(traceback.format_exc())
logger.debug("\nComments response content:")
logger.debug(f"{response.content}\n---\n{e}")
create_task(self.session.comments.markInvalid())
return None

async def clearRemoteCursor(self, session_id):
for document in self.documents:
Expand Down Expand Up @@ -387,6 +394,7 @@ async def dequeue(all_ops):
document = self.documents[doc_id]
await self._sendOps(*payload)
except Exception as e:
self.log.debug(traceback.format_exc())
await self.sidebarMsg("Error: " + type(e).__name__ + ": " + str(e))
await self.disconnect(
f"Op Failed: {e}")
Expand Down Expand Up @@ -436,25 +444,14 @@ async def connect(self):
await self.sidebarMsg("Connecting Websocket.")
self.project["connected"] = True
self.log.debug("Initializing websocket connection to " + self.url)
if "GCLB=" not in self.cookie:
request = HTTPRequest(
self.url,
headers={'Cookie': self.cookie},
validate_cert=self.validate_cert)
self.ws = await websocket_connect(request)
# Should set the GCLB value
for set_cookie_header in self.ws.headers.get_list('Set-Cookie'):
cookie = SimpleCookie(set_cookie_header)
for key, morsel in cookie.items():
self.session.httpHandler.cookies.set(key, morsel.value)
self.cookie = self.session.cookies,
request = HTTPRequest(
self.url,
headers={'Cookie': self.cookie},
validate_cert=self.validate_cert)
self.ws = await websocket_connect(request)

except Exception as e:
self.log.debug(traceback.format_exc())
await self.sidebarMsg("Connection Error: " + str(e))
else:
await self.sidebarMsg("Connected.")
Expand All @@ -467,6 +464,7 @@ async def run(self):
msg = await self.ws.read_message()

if msg is None:
self.log.debug("No msg")
break
self.log.debug("Raw server answer: " + msg)

Expand Down Expand Up @@ -546,6 +544,9 @@ async def run(self):
# be very annoying
elif data["name"] in ("resolve-thread", "new-comment", "edit-message",
"delete-message", "reopen-thread"):
if comments == None:
create_task(self.session.comments.markInvalid())
continue
self.log.debug(data)
if data["name"] == "new-comment":
thread = data["args"][0]
Expand Down Expand Up @@ -580,8 +581,8 @@ async def run(self):
# joinProject => server lists project information
if cmd == "joinProject":
project_info = data[1]
if self.log.level == DEBUG:
self.log.debug(json.dumps(project_info))
self.log.debug("Joined")
self.log.debug(json.dumps(project_info))
self.project.update(project_info)
self.project["open"] = True
await self.send("cmd", {"name": "clientTracking.getConnectedUsers"})
Expand Down Expand Up @@ -658,6 +659,7 @@ async def run(self):
except (gen.Return, StopIteration):
raise
except Exception as e:
self.log.debug(traceback.format_exc())
await self.sidebarMsg("Error: " + type(e).__name__ + ": " + str(e))
await self.disconnect(
f"WS loop Failed: {e}")
Expand Down
26 changes: 25 additions & 1 deletion rplugin/python3/airlatex/session.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
from airlatex.util import _genTimeStamp
from http.cookiejar import CookieJar
from logging import getLogger
import traceback


class AirLatexSession:
Expand Down Expand Up @@ -133,6 +134,7 @@ async def login(self):
return False
except Exception as e:
anim_status.cancel()
self.log.debug(traceback.format_exc())
create_task(self.sidebar.updateStatus("Login failed: " + str(e)))
return False

Expand Down Expand Up @@ -171,6 +173,7 @@ async def login(self):
return False
except Exception as e:
anim_status.cancel()
self.log.debug(traceback.format_exc())
create_task(self.sidebar.updateStatus("Connection failed: " + str(e)))
else:
return False
Expand All @@ -188,9 +191,17 @@ async def updateProjectList(self):
projectPage = (await self.nvim.loop.run_in_executor(None, get))
anim_status.cancel()

legacy = False
meta = re.search(
'<meta\s[^>]*name="ol-prefetchedProjectsBlob"[^>]*>',
projectPage.text) if projectPage.ok else None
# Community edition still uses ol-projects
if projectPage.ok and meta is None:
meta = re.search(
'<meta\s[^>]*name="ol-projects"[^>]*>',
projectPage.text) if projectPage.ok else None
legacy = meta is not None

if not projectPage.ok or meta is None:
with tempfile.NamedTemporaryFile(delete=False) as f:
f.write(projectPage.text.encode())
Expand All @@ -215,7 +226,19 @@ async def updateProjectList(self):
create_task(self.sidebar.updateStatus("Online"))
self.log.debug(data)

self.projectList = data["projects"]
if legacy:
self.log.debug("is legacy")
self.projectList = data
for project in self.projectList:
owner = project["owner"]
last_updated_by = project["lastUpdatedBy"]
owner["firstName"] = owner.get("first_name", "")
owner["lastName"] = owner.get("last_name", "")
last_updated_by["firstName"] = last_updated_by.get("first_name", "")
last_updated_by["lastName"] = last_updated_by.get("last_name", "")
else:
self.log.debug("is NOT legacy")
self.projectList = data["projects"]
self.projectList.sort(key=lambda p: p["lastUpdated"], reverse=True)
create_task(self.sidebar.triggerRefresh())
except Exception as e:
Expand All @@ -226,6 +249,7 @@ async def updateProjectList(self):
self.sidebar.updateStatus(
"Could not retrieve project list: %s. You can check the response page under: %s "
% (str(e), f.name)))
self.log.debug(traceback.format_exc())
create_task(self.sidebar.triggerRefresh())

async def connectProject(self, project):
Expand Down
14 changes: 9 additions & 5 deletions rplugin/python3/airlatex/sidebar.py
Original file line number Diff line number Diff line change
Expand Up @@ -73,9 +73,9 @@ def updateStatusLine(self, releaseLock=True):
@pynvimCatchException
def bufferappend(self, arg, pos=[]):
if self.buffer_write_i >= len(self.buffer):
self.buffer.append(arg)
self.buffer.append(arg.rstrip())
else:
self.buffer[self.buffer_write_i] = arg
self.buffer[self.buffer_write_i] = arg.rstrip()
self.buffer_write_i += 1
if self.buffer_write_i == self.cursor[0]:
self.cursorPos = pos
Expand Down Expand Up @@ -158,7 +158,7 @@ def _listProjects(self, overwrite=False):

# Display Header
self.buffer_write_i = 0
self.bufferappend(" ┄┄┄┄┄┄ AirLatex (ver %s) ┄┄┄┄┄┄┄ " % __version__)
self.bufferappend(" ┄┄┄┄┄┄ AirLatex (ver %s) ┄┄┄┄┄┄┄" % __version__)
self.bufferappend(" ")

# Display all Projects
Expand All @@ -178,7 +178,8 @@ def _listProjects(self, overwrite=False):
# list project structure
if "open" in project and project["open"]:
self.bufferappend(" " + self.symbol_open + " " + project["name"], pos)
self.listProjectStructure(project["rootFolder"][0], pos)
self.log.debug(f"{project}")
self.listProjectStructure(project.get("rootFolder", [None])[0], pos)
else:
self.bufferappend(
" " + self.symbol_closed + " " + project["name"], pos)
Expand Down Expand Up @@ -212,7 +213,7 @@ def _listProjects(self, overwrite=False):
if not (project.get("lastUpdatedBy") == None):
self.bufferappend(
" -> by: " + project['lastUpdatedBy']['firstName'] + " " +
" " + project['lastUpdatedBy']['lastName'])
" " + project['lastUpdatedBy'].get('lastName', ''))

# Info
self.bufferappend(" ")
Expand All @@ -238,6 +239,9 @@ def _listProjects(self, overwrite=False):
@pynvimCatchException
def listProjectStructure(self, rootFolder, pos, indent=0):
self.log.debug_gui("listProjectStructure()")
if not rootFolder:
self.bufferappend("Unable to load folders")
return

# list folders first
indentStr = " " + " " * indent
Expand Down

0 comments on commit 5547262

Please sign in to comment.