stricklandrbls commented on code in PR #1647:
URL: https://github.com/apache/daffodil-vscode/pull/1647#discussion_r3238002266
##########
src/dataEditor/dataEditorClient.ts:
##########
@@ -625,108 +530,227 @@ export class DataEditorClient implements
vscode.Disposable {
}
break
- case MessageCommand.saveSegment:
+ case 'applyChanges':
{
- const uri = await vscode.window.showSaveDialog({
- title: 'Save Segment',
- saveLabel: 'Save',
- })
- if (uri && uri.fsPath) {
- await this.saveFileSegment(
- uri.fsPath,
- message.data.offset,
- message.data.length
- )
+ const { offset, edited_segment, original_segment } =
+ getRequestPayloadType<typeof command>(incomingMessage.payload[1])
+ await edit(
+ this.omegaSessionId,
+ offset,
+ original_segment,
+ edited_segment
+ )
+ await this.sendChangesInfo()
+ }
+ break
+ case 'undoChange':
+ {
+ await undo(this.omegaSessionId)
+ await this.sendChangesInfo()
+ this.panel.postMessage('clearChanges')
+ }
+ break
+ case 'redoChange':
+ {
+ await redo(this.omegaSessionId)
+ await this.sendChangesInfo()
+ this.panel.postMessage('clearChanges')
+ }
+ break
+ case 'clearChanges':
+ {
+ if (
+ (await vscode.window.showInformationMessage(
+ 'Are you sure you want to revert all changes?',
+ { modal: true },
+ 'Yes',
+ 'No'
+ )) === 'Yes'
+ ) {
+ await clear(this.omegaSessionId)
+ await this.sendChangesInfo()
+ this.panel.postMessage('clearChanges')
}
}
break
-
- case MessageCommand.requestEditedData:
+ case 'requestEditedData':
{
- const [selectionData, selectionDisplay] = fillRequestData(message)
+ const payload = getRequestPayloadType<typeof command>(
+ incomingMessage.payload[1]
+ )
+ // const {} = incomingMessage.payload as MessageRequestMap['']
+ const [selectionData, selectionDisplay] = fillRequestData(payload)
- await this.panel.webview.postMessage({
- command: MessageCommand.requestEditedData,
- data: {
- data: Uint8Array.from(selectionData),
- dataDisplay: selectionDisplay,
- },
+ await this.panel.postMessage('requestEditedData', {
+ data: Uint8Array.from(selectionData),
+ dataDisplay: selectionDisplay,
})
}
break
-
- case MessageCommand.replace:
+ case 'replace':
{
- const searchDataBytes = encodedStrToData(
- message.data.searchData,
- message.data.encoding
- )
- const replaceDataBytes = encodedStrToData(
- message.data.replaceData,
- message.data.encoding
- )
+ const {
+ encoding,
+ replaceStr,
+ searchStr,
+ is_case_insensitive,
+ is_reverse,
+ length,
+ offset,
+ overwriteOnly,
+ } = getRequestPayloadType<typeof command>(incomingMessage.payload[1])
+ const requestedEncoding = toEncoding(encoding)
+
+ const searchDataBytes =
+ searchStr instanceof Uint8Array
+ ? searchStr
+ : encodedStrToData(searchStr, requestedEncoding)
+ const replaceDataBytes =
+ replaceStr instanceof Uint8Array
+ ? replaceStr
+ : encodedStrToData(replaceStr, requestedEncoding)
const nextOffset = await replaceOneSession(
this.omegaSessionId,
searchDataBytes,
replaceDataBytes,
- message.data.caseInsensitive,
- message.data.isReverse,
- message.data.searchOffset,
- message.data.searchLength,
- message.data.overwriteOnly
+ is_case_insensitive,
+ is_reverse,
+ offset,
+ length,
+ overwriteOnly
)
if (nextOffset === -1) {
vscode.window.showErrorMessage('No replacement took place')
} else {
await this.sendChangesInfo()
}
- await this.panel.webview.postMessage({
- command: MessageCommand.replaceResults,
- data: {
- replacementsCount: nextOffset === -1 ? 0 : 1,
- nextOffset: nextOffset,
- searchDataBytesLength: searchDataBytes.length,
- replaceDataBytesLength: replaceDataBytes.length,
- },
+ await this.panel.postMessage('replaceResults', {
+ replacementsCount: nextOffset === -1 ? 0 : 1,
+ nextOffset: nextOffset,
+ searchDataBytesLength: searchDataBytes.length,
+ replaceDataBytesLength: replaceDataBytes.length,
})
}
break
- case MessageCommand.search:
+ // Utility Message Commands
+ case 'search':
{
- const searchDataBytes = encodedStrToData(
- message.data.searchData,
- message.data.encoding
- )
+ const {
+ encoding,
+ searchStr,
+ is_case_insensitive,
+ is_reverse,
+ length,
+ limit,
+ offset,
+ } = getRequestPayloadType<typeof command>(incomingMessage.payload[1])
+ const requestedEncoding = toEncoding(encoding)
+
+ const searchDataBytes = encodedStrToData(searchStr,
requestedEncoding)
+ const searchLimit = limit ? limit + 1 : 2
+
const searchResults = await searchSession(
this.omegaSessionId,
searchDataBytes,
- message.data.caseInsensitive,
- message.data.isReverse,
- message.data.searchOffset,
- message.data.searchLength,
- message.data.limit + 1
+ is_case_insensitive,
+ is_reverse,
+ offset,
+ length,
+ searchLimit
)
+
if (searchResults.length === 0) {
vscode.window.showInformationMessage(
- `No more matches found for '${message.data.searchData}'`
+ `No more matches found for '${searchStr}'`
)
}
let overflow = false
- if (searchResults.length > message.data.limit) {
+ if (searchResults.length >= searchLimit) {
overflow = true
searchResults.pop()
}
- await this.panel.webview.postMessage({
- command: MessageCommand.searchResults,
- data: {
- searchResults: searchResults,
- searchDataBytesLength: searchDataBytes.length,
- overflow: overflow,
+ await this.panel.postMessage('search', {
+ results: searchResults,
+ byteLength: searchDataBytes.length,
+ overflow: overflow,
+ })
+ }
+ break
+ case 'profile':
+ {
+ let { length, startOffset } = getRequestPayloadType<typeof command>(
+ incomingMessage.payload[1]
+ )
+ length = length < 0 ? DATA_PROFILE_MAX_LENGTH : length
+
+ const byteProfile: number[] = await profileSession(
+ this.omegaSessionId,
+ startOffset,
+ length
+ )
+ const characterCount = await countCharacters(
+ this.omegaSessionId,
+ startOffset,
+ length
+ ).catch((err) => {
+ console.debug(err)
+ })
+ const contentTypeResponse = await getContentType(
+ this.omegaSessionId,
+ startOffset,
+ length
+ )
+ const languageResponse = await getLanguage(
+ this.omegaSessionId,
+ startOffset,
+ length,
+ characterCount!.getByteOrderMark()
+ )
+ await this.panel.postMessage('profile', {
+ startOffset: startOffset,
+ length: length,
+ byteProfile: byteProfile,
+ numAscii: numAscii(byteProfile),
+ language: languageResponse.getLanguage(),
+ contentType: contentTypeResponse.getContentType(),
+ characterCount: {
+ byteOrderMark: characterCount!.getByteOrderMark(),
+ byteOrderMarkBytes: characterCount!.getByteOrderMarkBytes(),
+ singleByteCount: characterCount!.getSingleByteChars(),
+ doubleByteCount: characterCount!.getDoubleByteChars(),
+ tripleByteCount: characterCount!.getTripleByteChars(),
+ quadByteCount: characterCount!.getQuadByteChars(),
+ invalidBytes: characterCount!.getInvalidBytes(),
},
Review Comment:
`undefined` is not allowed in the new messages structure. I will throw and
error in this case.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]