From 977a13373c441f2a34e21630a28e61728a9565ef Mon Sep 17 00:00:00 2001 From: Kosta Korenkov Date: Mon, 20 Jul 2020 15:02:13 +0300 Subject: [PATCH] fix: revert back to api 1.0.1 + context attribute --- src/js/extractWordData.js | 34 ++++------------ src/js/index.js | 1 + src/js/lingualeo/api.js | 53 +++++++++++++++++++------ src/js/lingualeo/requests/GetWords.json | 3 +- 4 files changed, 52 insertions(+), 39 deletions(-) diff --git a/src/js/extractWordData.js b/src/js/extractWordData.js index ffbd44a..8cd8f8f 100644 --- a/src/js/extractWordData.js +++ b/src/js/extractWordData.js @@ -13,26 +13,15 @@ const sanitizeString = string => { .replace(/"/g, '""') } -const wordPicture = translations => { - if (!translations) return '' - const translationWithPic = translations.find(tr => - tr.pic && !tr.pic.startsWith('https://contentcdn.lingualeo.com/uploads/upimages') - ) - return translationWithPic ? `` : '' +const wordPicture = word => { + if (!word) return '' + return word.picture && word.picture.startsWith('https://contentcdn.lingualeo.com/uploads/picture') ? `` : '' } -const isWrappedContext = (contextStr) => { - try { - return !!(JSON.parse(contextStr) || {}).context_text - } catch (e) { - return false - } -} +const wordContext = (word) => { + if (!word || !word.context) return '' -const wordContext = (translation) => { - if (!translation || !translation.ctx) return '' - - const rawContext = translation.ctx + const rawContext = word.context try { const contextObj = JSON.parse(rawContext) || {} @@ -44,20 +33,13 @@ const wordContext = (translation) => { const clozefy = (word, string) => string.replace(wordRegExp(word), '{{c1::$&}}') -const selectedTranslations = (word) => { - if (!word.translations) return [] - const fromInternet = word.translations.filter(tr => isWrappedContext(tr.ctx)) - return fromInternet.length > 0 ? fromInternet : [word.translations[0]] -} - const extractWordData = (word) => { - const userTranslations = selectedTranslations(word) const translations = sanitizeString(word.combinedTranslation) const wordValue = sanitizeString(word.wordValue) - const context = wordContext(userTranslations[0]) + const context = wordContext(word) const highlightedContext = highlightWord(wordValue, context) const clozefiedContext = clozefy(wordValue, context) - const image = wordPicture(userTranslations) || wordPicture(word.translations) + const image = wordPicture(word) const sound = `[sound:${word.pronunciation}]` const groups = (word.wordSets || []).map(ws => ws.name).join(',') const association = sanitizeString(word.association) diff --git a/src/js/index.js b/src/js/index.js index f2df6c4..fb73c71 100644 --- a/src/js/index.js +++ b/src/js/index.js @@ -81,6 +81,7 @@ const createExportButton = (locale, totalWordsCount, groupId) => { wordCount = totalWordsCount } else { const selectedWords = selectedWordsIds() + console.log({ selectedWords }) filter = selectedFilter(selectedWords) wordCount = selectedWords.length } diff --git a/src/js/lingualeo/api.js b/src/js/lingualeo/api.js index ee1d55b..e5b4539 100644 --- a/src/js/lingualeo/api.js +++ b/src/js/lingualeo/api.js @@ -21,7 +21,7 @@ export default class LeoApi { credentials: 'include', mode: 'cors', body: JSON.stringify({ - apiVersion: '1.0.0', + apiVersion: '1.0.1', ...requestData }) }) @@ -41,27 +41,56 @@ export default class LeoApi { }) } - _requestWords (wordSetId, leoFilter, totalWords, filter, progressHandler, offsetWordId, result) { + _requestWords (wordSetId, leoFilter, totalWords, filter, progressHandler, page, result) { return this._request('GetWords', { ...GetWordsRequest, ...leoFilter, wordSetIds: [wordSetId], - offset: offsetWordId ? { wordId: offsetWordId } : undefined + dateGroup: page.dataGroup, + offset: page.wordId ? { wordId: page.wordId } : undefined }).then((data) => { - if (data.length === 0) return result + if (data.length === 0) return result + const groupsWithWords = data.filter(g => g.words.length > 0) + console.log({ groupsWithWords }) - const words = data.filter(filter || emptyFilter) + const currentGroup = groupsWithWords.length + ? groupsWithWords[groupsWithWords.length - 1].groupName + : page.dataGroup - result = result.concat(words) - progressHandler && progressHandler(result.length) - if (result.length >= totalWords) return result + console.log( { currentGroup }) + + const words = data.map(g => g.words).flat().filter(filter || emptyFilter) - const offsetWordId = data[data.length - 1].id - return this._requestWords(wordSetId, leoFilter, totalWords, filter, progressHandler, offsetWordId, result) - }) + result = result.concat(words) + progressHandler && progressHandler(result.length) + + const currentGroupIndex = data.findIndex(e => e.groupName === currentGroup) + + if ( + (currentGroupIndex === data.length - 1 && !words.length) || + result.length >= totalWords + ) { + return result + } + + const nextGroupIndex = currentGroupIndex === data.length - 1 || words.length + ? currentGroupIndex + : currentGroupIndex + 1 + + console.log({ nextGroupIndex }); + + page = { + dataGroup: data[nextGroupIndex].groupName, + wordId: words.length ? words[words.length - 1].id : undefined + } + return this._requestWords(wordSetId, leoFilter, totalWords, filter, progressHandler, page, result) + }) } getWords (wordSetId, leoFilter, totalWords, filter, progressHandler) { - return this._requestWords(wordSetId, leoFilter, totalWords, filter, progressHandler, null, []) + const page = { + dataGroup: 'start' + } + return this._requestWords(wordSetId, leoFilter, totalWords, filter, progressHandler, page, []) } } diff --git a/src/js/lingualeo/requests/GetWords.json b/src/js/lingualeo/requests/GetWords.json index d6d225c..74a18b3 100644 --- a/src/js/lingualeo/requests/GetWords.json +++ b/src/js/lingualeo/requests/GetWords.json @@ -19,7 +19,8 @@ "picture": "pic", "speechPartId": "pid", "wordLemmaId": "lid", - "wordLemmaValue": "lwd" + "wordLemmaValue": "lwd", + "context": "ctx" }, "mode": "basic", "training": null,