Skip to content

Commit

Permalink
fix(file history): stop showing unsaved data dialog when there's no-o…
Browse files Browse the repository at this point in the history
…p file history data
  • Loading branch information
wardellbagby committed Dec 6, 2021
1 parent da260ec commit aa6c4bd
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ export class WebTemporaryFiles implements TemporaryFiles {

public exists = async () => {
const storage = await renderer.getLocalStorage();
return !!storage.getItem(this.temporaryFileKey);
return !!(await storage.getItem(this.temporaryFileKey));
};
public delete = (): void => {
renderer
Expand Down
9 changes: 8 additions & 1 deletion packages/common/main/files/UnsavedDataManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,14 @@ export class UnsavedDataManager implements Manager {

private checkForUnsavedData = async () => {
this.logger.verbose('Checking for unsaved data...');
if (await this.temporaryFiles.exists()) {
const hasTemporaryData = await this.temporaryFiles.exists();
const hasUnsavedData =
hasTemporaryData &&
this.fileHistory.isNonEmptyHistory(
JSON.parse(await this.temporaryFiles.get())
);

if (hasUnsavedData) {
this.logger.verbose('Unsaved data found.');
this.rendererDelegate.send('show-dialog', {
type: 'alert',
Expand Down
13 changes: 13 additions & 0 deletions packages/common/main/files/extensions/FileDataExtension.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,19 @@ export interface VersionedExtensionData<T> {
data?: T;
}

export const onVersion = <R = void>(
extensionData: VersionedExtensionData<string> | null,
handlers: { [version: number]: () => R; invalid: () => R }
): R => {
const version = extensionData?.version;

if (version && version in handlers) {
return handlers[version]();
} else {
return handlers.invalid();
}
};

export interface FileDataExtension<
KeyT extends FileDataExtensionKey = FileDataExtensionKey
> {
Expand Down
30 changes: 22 additions & 8 deletions packages/common/main/history/FileHistory.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import {
FileDataExtension,
onVersion,
VersionedExtensionData,
} from '@lyricistant/common/files/extensions/FileDataExtension';
import { diff_match_patch, patch_obj as Patch } from 'diff-match-patch';
Expand Down Expand Up @@ -32,13 +33,26 @@ export class FileHistory implements FileDataExtension<'history'> {
extensionData: VersionedExtensionData<string> | null
): void => {
this.lastKnownLyrics = '';
if (extensionData && extensionData.version === 1) {
this.loadV1(extensionData.data);
} else {
this.delta = [];
}
onVersion(extensionData, {
1: () => (this.delta = this.loadV1(extensionData.data)),
invalid: () => (this.delta = []),
});
};

public isNonEmptyHistory = (
extensionData: VersionedExtensionData<string> | null
): boolean =>
onVersion(extensionData, {
1: () => {
const history = this.loadV1(extensionData.data);

return (
history.length > 0 && history.some((data) => data.patches.length > 0)
);
},
invalid: () => false,
});

public add = (lyrics: string) => {
const newPatches = this.differ.patch_make(this.lastKnownLyrics, lyrics);
this.delta.push({
Expand All @@ -63,11 +77,11 @@ export class FileHistory implements FileDataExtension<'history'> {
return this.lastKnownLyrics;
};

private loadV1 = (data: string) => {
private loadV1 = (data: string): HistoryData[] => {
if (data.trim().length === 0) {
this.delta = [];
return [];
} else {
this.delta = JSON.parse(data);
return JSON.parse(data);
}
};
}

0 comments on commit aa6c4bd

Please sign in to comment.