Leethub v2 수정해서 NOTES.md 도 업로드 하기
new UI가 적용되면서 기존에 동작하던 Leethub 앱이 동작하지 않게 되었다.
이에 따라서 여러 개발자들이 v2, v3 등등 개선한 버전을 공유하고있다! 대부분의 케이스에서는 잘 동작하는 것 같다. 👍
이렇게 동작하지 않는 이유로 검색하다가, algorithms 풀이를 한 repo에서 관리할수있게, 그리고 이걸 difficulty 기준으로 폴더 정리해서 나눌수있게! 해주는 블로그 글을 발견했다. 이렇게 정리하면 기존에 알고리즘 문제 풀이 하는 repo도 싹 정리가능해서 적용했다! 잘됨!
잘 쓰다가, 문득 notes도 같이 업로드 되었으면 좋겠다! 는 생각에 기존 코드를 좀 뜯어 보기 시작했다.
나는 지금 V2버전을 수정해서 사용하고있는데, 이 코드 기반으로는 notes가 업로드 되는 부분이 생략되어있다.
Notes도 함께 알고리즘 풀이 repo에서 관리되면 좋겠다…라는 생각에 몇가지 수정을 하게 되었다.
코드를 살펴보면!
V1에서는 (구 leetcode UI에서 정상동작했을 때) getNotesIfAny
라는 function에서 note의 값을 긁어오는 동작을 하고 있다. 내용은 단순하게 div 로 떠있는 text editor 의 영역을 찾아보고 있으면! 거기 안의 내용을 가져오고 다듬어서 return 하는 그런 function이다.
V1에서는 해당 내용이 구현이 되어있는데 V2에서는 없길래 그냥 간단하게 아래와 같이 내용을 추가했다.
LeetCodeV2.prototype.getNotesIfAny = function () {
if (!checkElem(document.getElementsByClassName('CodeMirror-code'))) return "";
text = document.querySelector('.CodeMirror-code').innerText;
notes = ""
if (text) {
notes = `${text.trim()}`.trim();
}
return notes.trim();
};
이렇게 하면! note가 잘 등록이 된다!
개선점과 버그
→ Note 등록 충돌
또 잘 쓰다가, Github에서 직접 commit으로 등록한 note는 등록이 안되는 것을 발견했다.
중복된 데이터 때문에 409 (Conflict Http status code)에러가 발생한다. 그런데 Leetcode에서 등록한 note에 대해서는 이런 에러가 발생하지 않는다..? 🤔
updateNotes = uploadGit(
btoa(unescape(encodeURIComponent(notes))),
problemName,
'NOTES.md',
createNotesMsg,
'upload',
false,
);
에러는 upload하는 이 부분에서 중복값을 저장하려고 할때 conflict error code를 내뱉으며 발생한다.
직접 commit만 안하면 상관없는 경우일것같지만! 개선하면 좋을 것 같아 추가한다.
→ sessionId가 없는 경우에 github push X
submit 할때 URL에 sessionId가 없으면 git push가 이루어 지지 않는다.
최초로 submit은 잘되는데, 수정할때 무시(?) 되는것 같다.
이건 실제로 사용하면서 좀 불편하다고 생각하고있어서, 이것 또한 개선리스트에 추가한다.
앗 그런데 나만 발생하는 에러인가? 🥹
git repo
NOTES.md 업로드 하는 부분까지 추가된 코드는 여기서 확인하실 수 있습니다!