Remove more redundant code.
parent
0343c80fb9
commit
8fb50df017
@ -1,73 +0,0 @@
|
|||||||
// SPDX-FileCopyrightText: © 2017 EteSync Authors
|
|
||||||
// SPDX-License-Identifier: AGPL-3.0-only
|
|
||||||
|
|
||||||
import * as EteSync from "etesync";
|
|
||||||
|
|
||||||
import { CredentialsData, UserInfoData } from "./store";
|
|
||||||
import { addEntries } from "./store/actions";
|
|
||||||
|
|
||||||
export function createJournalEntry(
|
|
||||||
etesync: CredentialsData,
|
|
||||||
userInfo: UserInfoData,
|
|
||||||
journal: EteSync.Journal,
|
|
||||||
prevUid: string | null,
|
|
||||||
action: EteSync.SyncEntryAction,
|
|
||||||
content: string) {
|
|
||||||
|
|
||||||
const syncEntry = new EteSync.SyncEntry();
|
|
||||||
syncEntry.action = action;
|
|
||||||
syncEntry.content = content;
|
|
||||||
|
|
||||||
return createJournalEntryFromSyncEntry(etesync, userInfo, journal, prevUid, syncEntry);
|
|
||||||
}
|
|
||||||
|
|
||||||
export function createJournalEntryFromSyncEntry(
|
|
||||||
etesync: CredentialsData,
|
|
||||||
userInfo: UserInfoData,
|
|
||||||
journal: EteSync.Journal,
|
|
||||||
prevUid: string | null,
|
|
||||||
syncEntry: EteSync.SyncEntry) {
|
|
||||||
|
|
||||||
const derived = etesync.encryptionKey;
|
|
||||||
|
|
||||||
const keyPair = userInfo.getKeyPair(userInfo.getCryptoManager(derived));
|
|
||||||
const cryptoManager = journal.getCryptoManager(derived, keyPair);
|
|
||||||
const entry = new EteSync.Entry();
|
|
||||||
entry.setSyncEntry(cryptoManager, syncEntry, prevUid);
|
|
||||||
|
|
||||||
return entry;
|
|
||||||
}
|
|
||||||
|
|
||||||
export function addJournalEntry(
|
|
||||||
etesync: CredentialsData,
|
|
||||||
userInfo: UserInfoData,
|
|
||||||
journal: EteSync.Journal,
|
|
||||||
prevUid: string | null,
|
|
||||||
action: EteSync.SyncEntryAction,
|
|
||||||
content: string) {
|
|
||||||
|
|
||||||
const entry = createJournalEntry(etesync, userInfo, journal, prevUid, action, content);
|
|
||||||
return addEntries(etesync, journal.uid, [entry], prevUid);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Adds multiple journal entries and uploads them all at once
|
|
||||||
* @param updates list of tuples with shape (action, content)
|
|
||||||
*/
|
|
||||||
export function addJournalEntries(
|
|
||||||
etesync: CredentialsData,
|
|
||||||
userInfo: UserInfoData,
|
|
||||||
journal: EteSync.Journal,
|
|
||||||
lastUid: string | null,
|
|
||||||
updates: [EteSync.SyncEntryAction, string][]) {
|
|
||||||
|
|
||||||
let prevUid = lastUid;
|
|
||||||
|
|
||||||
const entries = updates.map(([action, content]) => {
|
|
||||||
const entry = createJournalEntry(etesync, userInfo, journal, prevUid, action, content);
|
|
||||||
prevUid = entry.uid;
|
|
||||||
return entry;
|
|
||||||
});
|
|
||||||
|
|
||||||
return addEntries(etesync, journal.uid, entries, lastUid);
|
|
||||||
}
|
|
@ -1,25 +0,0 @@
|
|||||||
// SPDX-FileCopyrightText: © 2017 EteSync Authors
|
|
||||||
// SPDX-License-Identifier: AGPL-3.0-only
|
|
||||||
|
|
||||||
import { colorHtmlToInt, colorIntToHtml } from "./journal-processors";
|
|
||||||
|
|
||||||
it("Color conversion", () => {
|
|
||||||
const testColors = [
|
|
||||||
"#aaaaaaaa",
|
|
||||||
"#00aaaaaa",
|
|
||||||
"#0000aaaa",
|
|
||||||
"#000000aa",
|
|
||||||
"#00000000",
|
|
||||||
"#bb00bbbb",
|
|
||||||
"#bb0000bb",
|
|
||||||
"#bb000000",
|
|
||||||
"#11110011",
|
|
||||||
"#11110000",
|
|
||||||
"#11111100",
|
|
||||||
];
|
|
||||||
|
|
||||||
for (const color of testColors) {
|
|
||||||
expect(color).toEqual(colorIntToHtml(colorHtmlToInt(color)));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
@ -1,140 +0,0 @@
|
|||||||
// SPDX-FileCopyrightText: © 2017 EteSync Authors
|
|
||||||
// SPDX-License-Identifier: AGPL-3.0-only
|
|
||||||
|
|
||||||
import { List } from "immutable";
|
|
||||||
|
|
||||||
import { EventType, ContactType, TaskType } from "./pim-types";
|
|
||||||
import { store } from "./store";
|
|
||||||
import { appendError } from "./store/actions";
|
|
||||||
|
|
||||||
import * as EteSync from "etesync";
|
|
||||||
|
|
||||||
export function syncEntriesToItemMap(
|
|
||||||
collection: EteSync.CollectionInfo, entries: List<EteSync.SyncEntry>, base: {[key: string]: ContactType} = {}) {
|
|
||||||
const items = base;
|
|
||||||
|
|
||||||
const errors: Error[] = [];
|
|
||||||
entries.forEach((syncEntry) => {
|
|
||||||
// FIXME: this is a terrible hack to handle parsing errors
|
|
||||||
let comp;
|
|
||||||
try {
|
|
||||||
comp = ContactType.parse(syncEntry.content);
|
|
||||||
} catch (e) {
|
|
||||||
e.message = `${e.message}\nWhile processing: ${syncEntry.content}`;
|
|
||||||
errors.push(e);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// FIXME:Hack
|
|
||||||
(comp as any).journalUid = collection.uid;
|
|
||||||
const uid = `${collection.uid}|${comp.uid}`;
|
|
||||||
|
|
||||||
if ((syncEntry.action === EteSync.SyncEntryAction.Add) ||
|
|
||||||
(syncEntry.action === EteSync.SyncEntryAction.Change)) {
|
|
||||||
items[uid] = comp;
|
|
||||||
} else if (syncEntry.action === EteSync.SyncEntryAction.Delete) {
|
|
||||||
delete items[uid];
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
if (errors.length > 0) {
|
|
||||||
store.dispatch(appendError(undefined as any, errors));
|
|
||||||
}
|
|
||||||
|
|
||||||
return items;
|
|
||||||
}
|
|
||||||
|
|
||||||
export const defaultColor = "#8BC34A";
|
|
||||||
|
|
||||||
export function colorIntToHtml(color?: number) {
|
|
||||||
if (color === undefined) {
|
|
||||||
return defaultColor;
|
|
||||||
}
|
|
||||||
|
|
||||||
// tslint:disable:no-bitwise
|
|
||||||
const blue = color & 0xFF;
|
|
||||||
const green = (color >> 8) & 0xFF;
|
|
||||||
const red = (color >> 16) & 0xFF;
|
|
||||||
const alpha = (color >> 24) & 0xFF;
|
|
||||||
// tslint:enable
|
|
||||||
|
|
||||||
function toHex(num: number) {
|
|
||||||
const ret = num.toString(16);
|
|
||||||
return (ret.length === 1) ? "0" + ret : ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
return "#" + toHex(red) + toHex(green) + toHex(blue) + toHex(alpha);
|
|
||||||
}
|
|
||||||
|
|
||||||
export function colorHtmlToInt(color?: string) {
|
|
||||||
if (!color) {
|
|
||||||
color = defaultColor;
|
|
||||||
}
|
|
||||||
|
|
||||||
const match = color.match(/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})?$/i);
|
|
||||||
|
|
||||||
if (!match) {
|
|
||||||
return undefined;
|
|
||||||
}
|
|
||||||
|
|
||||||
const r = parseInt(match[1], 16);
|
|
||||||
const g = parseInt(match[2], 16);
|
|
||||||
const b = parseInt(match[3], 16);
|
|
||||||
const a = (match[4]) ? parseInt(match[4], 16) : 0xFF;
|
|
||||||
|
|
||||||
return (b | (g << 8) | (r << 16) | (a << 24));
|
|
||||||
}
|
|
||||||
|
|
||||||
function syncEntriesToCalendarItemMap<T extends EventType>(
|
|
||||||
ItemType: any,
|
|
||||||
collection: EteSync.CollectionInfo, entries: List<EteSync.SyncEntry>, base: {[key: string]: T} = {}) {
|
|
||||||
const items = base;
|
|
||||||
|
|
||||||
const color = colorIntToHtml(collection.color);
|
|
||||||
|
|
||||||
const errors: Error[] = [];
|
|
||||||
entries.forEach((syncEntry) => {
|
|
||||||
// FIXME: this is a terrible hack to handle parsing errors
|
|
||||||
let comp;
|
|
||||||
try {
|
|
||||||
comp = ItemType.parse(syncEntry.content);
|
|
||||||
} catch (e) {
|
|
||||||
e.message = `${e.message}\nWhile processing: ${syncEntry.content}`;
|
|
||||||
errors.push(e);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (comp === null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
comp.color = color;
|
|
||||||
|
|
||||||
// FIXME:Hack
|
|
||||||
(comp as any).journalUid = collection.uid;
|
|
||||||
const uid = `${collection.uid}|${comp.uid}`;
|
|
||||||
|
|
||||||
if ((syncEntry.action === EteSync.SyncEntryAction.Add) ||
|
|
||||||
(syncEntry.action === EteSync.SyncEntryAction.Change)) {
|
|
||||||
items[uid] = comp;
|
|
||||||
} else if (syncEntry.action === EteSync.SyncEntryAction.Delete) {
|
|
||||||
delete items[uid];
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
if (errors.length > 0) {
|
|
||||||
store.dispatch(appendError(undefined as any, errors));
|
|
||||||
}
|
|
||||||
|
|
||||||
return items;
|
|
||||||
}
|
|
||||||
|
|
||||||
export function syncEntriesToEventItemMap(
|
|
||||||
collection: EteSync.CollectionInfo, entries: List<EteSync.SyncEntry>, base: {[key: string]: EventType} = {}) {
|
|
||||||
return syncEntriesToCalendarItemMap<EventType>(EventType, collection, entries, base);
|
|
||||||
}
|
|
||||||
|
|
||||||
export function syncEntriesToTaskItemMap(
|
|
||||||
collection: EteSync.CollectionInfo, entries: List<EteSync.SyncEntry>, base: {[key: string]: TaskType} = {}) {
|
|
||||||
return syncEntriesToCalendarItemMap<TaskType>(TaskType, collection, entries, base);
|
|
||||||
}
|
|
Loading…
Reference in New Issue