-
Notifications
You must be signed in to change notification settings - Fork 6
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
closes: Old versions of files appear #38
- Loading branch information
Showing
8 changed files
with
186 additions
and
88 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,23 +1,33 @@ | ||
import * as vscode from "vscode"; | ||
import * as assert from 'assert'; | ||
import ParquetDocument from './parquet-document'; | ||
|
||
export class ParquetTextDocumentContentProvider implements vscode.TextDocumentContentProvider { | ||
private static jsonMap: Map<string, string> = new Map(); | ||
private _onDidChange = new vscode.EventEmitter<vscode.Uri>(); | ||
private _documents = new Map<vscode.Uri, ParquetDocument>(); | ||
private _subscriptions: vscode.Disposable; | ||
|
||
public static has(path: string): boolean { | ||
return ParquetTextDocumentContentProvider.jsonMap.has(path); | ||
constructor() { | ||
this._subscriptions = vscode.workspace.onDidCloseTextDocument(doc => this._documents.delete(doc.uri)); | ||
} | ||
|
||
public static add(path:string, content: string): void { | ||
ParquetTextDocumentContentProvider.jsonMap.set(path, content); | ||
dispose() { | ||
this._subscriptions.dispose(); | ||
this._documents.clear(); | ||
this._onDidChange.dispose(); | ||
} | ||
|
||
onDidChangeEmitter = new vscode.EventEmitter<vscode.Uri>(); | ||
onDidChange = this.onDidChangeEmitter.event; | ||
get onDidChange() { | ||
return this._onDidChange.event; | ||
} | ||
|
||
async provideTextDocumentContent(uri: vscode.Uri): Promise<string | undefined> { | ||
const parquetPath = uri.fsPath.replace(/\.as\.json$/, ''); | ||
assert(ParquetTextDocumentContentProvider.has(parquetPath)); | ||
return ParquetTextDocumentContentProvider.jsonMap.get(parquetPath); | ||
// already loaded? | ||
const document = this._documents.get(uri) || (await (async _ => { | ||
const document = await ParquetDocument.create(uri, this._onDidChange); | ||
this._documents.set(uri, document); | ||
return document; | ||
})()); | ||
|
||
return document.value; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,71 @@ | ||
import * as os from 'os'; | ||
import * as path from 'path'; | ||
import * as vscode from 'vscode'; | ||
import { ParquetBackend } from "./parquet-backend"; | ||
import { ParquetToolsBackend } from './parquet-tools-backend'; | ||
import { ParquetsBackend } from './parquets-backend'; | ||
import { useParquetTools } from "./settings"; | ||
|
||
export default class ParquetDocument implements vscode.Disposable { | ||
private readonly _uri: vscode.Uri; | ||
private readonly _emitter: vscode.EventEmitter<vscode.Uri>; | ||
|
||
private _lines: string[] = []; | ||
private readonly _disposables: vscode.Disposable[] = []; | ||
private readonly _parquetPath: string; | ||
private readonly _backend: ParquetBackend = useParquetTools() ? new ParquetToolsBackend() : new ParquetsBackend(); | ||
|
||
|
||
private constructor(uri: vscode.Uri, emitter: vscode.EventEmitter<vscode.Uri>) { | ||
this._uri = uri; | ||
this._emitter = emitter; | ||
this._parquetPath = this._uri.fsPath.replace(/\.as\.json$/, ''); | ||
const watcher = vscode.workspace.createFileSystemWatcher(new vscode.RelativePattern(this._parquetPath, "*")); | ||
this._disposables.push(watcher); | ||
this._disposables.push(watcher.onDidChange(async _ => { | ||
return await this._populate(); | ||
})); | ||
this._disposables.push(watcher.onDidCreate(async _ => { | ||
return await this._populate(); | ||
})); | ||
} | ||
|
||
dispose() { | ||
for (const disposable of this._disposables) { | ||
disposable.dispose(); | ||
} | ||
} | ||
|
||
public static async create(uri: vscode.Uri, emitter: vscode.EventEmitter<vscode.Uri>): Promise<ParquetDocument> { | ||
const me = new ParquetDocument(uri, emitter); | ||
await me._populate(); | ||
return me; | ||
} | ||
|
||
get value() { | ||
return this._lines.join(os.EOL) + os.EOL; | ||
} | ||
|
||
private async _populate() { | ||
const lines: string[] = []; | ||
|
||
try { | ||
await vscode.window.withProgress({ | ||
location: vscode.ProgressLocation.Notification, | ||
title: `opening ${path.basename(this._parquetPath)}`, | ||
cancellable: true | ||
}, | ||
async (progress, token) => { | ||
for await (const line of this._backend.toJson(this._parquetPath, token)) { | ||
lines.push(line); | ||
} | ||
}); | ||
} catch (err) { | ||
await vscode.window.showErrorMessage(`${err}`); | ||
} | ||
if (lines != this._lines) { | ||
this._lines = lines; | ||
this._emitter.fire(this._uri); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.