Uint8Array migration

This commit is contained in:
Fedor Indutny 2021-09-23 17:49:05 -07:00 committed by GitHub
parent daf75190b8
commit 4ef0bf96cc
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
137 changed files with 2202 additions and 3170 deletions

View file

@ -17,7 +17,7 @@ import { AvatarTextEditor } from './AvatarTextEditor';
import { AvatarUploadButton } from './AvatarUploadButton';
import { BetterAvatar } from './BetterAvatar';
import { LocalizerType } from '../types/Util';
import { avatarDataToArrayBuffer } from '../util/avatarDataToArrayBuffer';
import { avatarDataToBytes } from '../util/avatarDataToBytes';
import { createAvatarData } from '../util/createAvatarData';
import { isSameAvatarData } from '../util/isSameAvatarData';
import { missingCaseError } from '../util/missingCaseError';
@ -25,14 +25,14 @@ import { missingCaseError } from '../util/missingCaseError';
export type PropsType = {
avatarColor?: AvatarColorType;
avatarPath?: string;
avatarValue?: ArrayBuffer;
avatarValue?: Uint8Array;
conversationId?: string;
conversationTitle?: string;
deleteAvatarFromDisk: DeleteAvatarFromDiskActionType;
i18n: LocalizerType;
isGroup?: boolean;
onCancel: () => unknown;
onSave: (buffer: ArrayBuffer | undefined) => unknown;
onSave: (buffer: Uint8Array | undefined) => unknown;
userAvatarData: ReadonlyArray<AvatarDataType>;
replaceAvatar: ReplaceAvatarActionType;
saveAvatarToDisk: SaveAvatarToDiskActionType;
@ -62,10 +62,10 @@ export const AvatarEditor = ({
const [provisionalSelectedAvatar, setProvisionalSelectedAvatar] = useState<
AvatarDataType | undefined
>();
const [avatarPreview, setAvatarPreview] = useState<ArrayBuffer | undefined>(
const [avatarPreview, setAvatarPreview] = useState<Uint8Array | undefined>(
avatarValue
);
const [initialAvatar, setInitialAvatar] = useState<ArrayBuffer | undefined>(
const [initialAvatar, setInitialAvatar] = useState<Uint8Array | undefined>(
avatarValue
);
const [localAvatarData, setLocalAvatarData] = useState<Array<AvatarDataType>>(
@ -84,7 +84,7 @@ export const AvatarEditor = ({
const selectedAvatar = getSelectedAvatar(provisionalSelectedAvatar);
// Caching the ArrayBuffer produced into avatarData as buffer because
// Caching the Uint8Array produced into avatarData as buffer because
// that function is a little expensive to run and so we don't flicker the UI.
useEffect(() => {
let shouldCancel = false;
@ -95,7 +95,7 @@ export const AvatarEditor = ({
if (avatarData.buffer) {
return avatarData;
}
const buffer = await avatarDataToArrayBuffer(avatarData);
const buffer = await avatarDataToBytes(avatarData);
return {
...avatarData,
buffer,

View file

@ -9,7 +9,7 @@ import { AvatarDataType } from '../types/Avatar';
import { AvatarModalButtons } from './AvatarModalButtons';
import { AvatarPreview } from './AvatarPreview';
import { LocalizerType } from '../types/Util';
import { avatarDataToArrayBuffer } from '../util/avatarDataToArrayBuffer';
import { avatarDataToBytes } from '../util/avatarDataToBytes';
export type PropsType = {
avatarData: AvatarDataType;
@ -22,7 +22,7 @@ export const AvatarIconEditor = ({
i18n,
onClose,
}: PropsType): JSX.Element => {
const [avatarBuffer, setAvatarBuffer] = useState<ArrayBuffer | undefined>();
const [avatarBuffer, setAvatarBuffer] = useState<Uint8Array | undefined>();
const [avatarData, setAvatarData] = useState<AvatarDataType>(
initialAvatarData
);
@ -41,7 +41,7 @@ export const AvatarIconEditor = ({
let shouldCancel = false;
async function loadAvatar() {
const buffer = await avatarDataToArrayBuffer(avatarData);
const buffer = await avatarDataToBytes(avatarData);
if (!shouldCancel) {
setAvatarBuffer(buffer);
}

View file

@ -19,7 +19,7 @@ const TEST_IMAGE = new Uint8Array(
'89504e470d0a1a0a0000000d4948445200000008000000080103000000fec12cc800000006504c5445ff00ff00ff000c82e9800000001849444154085b633061a8638863a867f8c720c760c12000001a4302f4d81dd9870000000049454e44ae426082',
2
).map(bytePair => parseInt(bytePair.join(''), 16))
).buffer;
);
const createProps = (overrideProps: Partial<PropsType> = {}): PropsType => ({
avatarColor: overrideProps.avatarColor,

View file

@ -9,17 +9,17 @@ import { LocalizerType } from '../types/Util';
import { Spinner } from './Spinner';
import { AvatarColors, AvatarColorType } from '../types/Colors';
import { getInitials } from '../util/getInitials';
import { imagePathToArrayBuffer } from '../util/imagePathToArrayBuffer';
import { imagePathToBytes } from '../util/imagePathToBytes';
export type PropsType = {
avatarColor?: AvatarColorType;
avatarPath?: string;
avatarValue?: ArrayBuffer;
avatarValue?: Uint8Array;
conversationTitle?: string;
i18n: LocalizerType;
isEditable?: boolean;
isGroup?: boolean;
onAvatarLoaded?: (avatarBuffer: ArrayBuffer) => unknown;
onAvatarLoaded?: (avatarBuffer: Uint8Array) => unknown;
onClear?: () => unknown;
onClick?: () => unknown;
style?: CSSProperties;
@ -48,7 +48,7 @@ export const AvatarPreview = ({
avatarValue ? undefined : avatarPath
);
const [avatarPreview, setAvatarPreview] = useState<ArrayBuffer | undefined>();
const [avatarPreview, setAvatarPreview] = useState<Uint8Array | undefined>();
// Loads the initial avatarPath if one is provided.
useEffect(() => {
@ -61,7 +61,7 @@ export const AvatarPreview = ({
(async () => {
try {
const buffer = await imagePathToArrayBuffer(startingAvatarPath);
const buffer = await imagePathToBytes(startingAvatarPath);
if (shouldCancel) {
return;
}
@ -95,7 +95,7 @@ export const AvatarPreview = ({
}
}, [avatarValue]);
// Creates the object URL to render the ArrayBuffer image
// Creates the object URL to render the Uint8Array image
const [objectUrl, setObjectUrl] = useState<undefined | string>();
useEffect(() => {

View file

@ -19,7 +19,7 @@ import { AvatarDataType } from '../types/Avatar';
import { AvatarModalButtons } from './AvatarModalButtons';
import { BetterAvatarBubble } from './BetterAvatarBubble';
import { LocalizerType } from '../types/Util';
import { avatarDataToArrayBuffer } from '../util/avatarDataToArrayBuffer';
import { avatarDataToBytes } from '../util/avatarDataToBytes';
import { createAvatarData } from '../util/createAvatarData';
import {
getFittedFontSize,
@ -27,7 +27,7 @@ import {
} from '../util/avatarTextSizeCalculator';
type DoneHandleType = (
avatarBuffer: ArrayBuffer,
avatarBuffer: Uint8Array,
avatarData: AvatarDataType
) => unknown;
@ -111,7 +111,7 @@ export const AvatarTextEditor = ({
text: inputText,
});
const buffer = await avatarDataToArrayBuffer(newAvatarData);
const buffer = await avatarDataToBytes(newAvatarData);
onDoneRef.current(buffer, newAvatarData);
}, [inputText, selectedColor]);

View file

@ -10,7 +10,7 @@ import { processImageFile } from '../util/processImageFile';
export type PropsType = {
className: string;
i18n: LocalizerType;
onChange: (avatar: ArrayBuffer) => unknown;
onChange: (avatar: Uint8Array) => unknown;
};
export const AvatarUploadButton = ({
@ -30,7 +30,7 @@ export const AvatarUploadButton = ({
let shouldCancel = false;
(async () => {
let newAvatar: ArrayBuffer;
let newAvatar: Uint8Array;
try {
newAvatar = await processImageFile(processingFile);
} catch (err) {

View file

@ -7,7 +7,7 @@ import { AvatarDataType } from '../types/Avatar';
import { BetterAvatarBubble } from './BetterAvatarBubble';
import { LocalizerType } from '../types/Util';
import { Spinner } from './Spinner';
import { avatarDataToArrayBuffer } from '../util/avatarDataToArrayBuffer';
import { avatarDataToBytes } from '../util/avatarDataToBytes';
type AvatarSize = 48 | 80;
@ -15,7 +15,7 @@ export type PropsType = {
avatarData: AvatarDataType;
i18n: LocalizerType;
isSelected?: boolean;
onClick: (avatarBuffer: ArrayBuffer | undefined) => unknown;
onClick: (avatarBuffer: Uint8Array | undefined) => unknown;
onDelete: () => unknown;
size?: AvatarSize;
};
@ -28,7 +28,7 @@ export const BetterAvatar = ({
onDelete,
size = 48,
}: PropsType): JSX.Element => {
const [avatarBuffer, setAvatarBuffer] = useState<ArrayBuffer | undefined>(
const [avatarBuffer, setAvatarBuffer] = useState<Uint8Array | undefined>(
avatarData.buffer
);
const [avatarURL, setAvatarURL] = useState<string | undefined>(undefined);
@ -37,7 +37,7 @@ export const BetterAvatar = ({
let shouldCancel = false;
async function makeAvatar() {
const buffer = await avatarDataToArrayBuffer(avatarData);
const buffer = await avatarDataToBytes(avatarData);
if (!shouldCancel) {
setAvatarBuffer(buffer);
}
@ -56,7 +56,7 @@ export const BetterAvatar = ({
};
}, [avatarBuffer, avatarData]);
// Convert avatar's ArrayBuffer to a URL object
// Convert avatar's Uint8Array to a URL object
useEffect(() => {
if (avatarBuffer) {
const url = URL.createObjectURL(new Blob([avatarBuffer]));

View file

@ -102,7 +102,7 @@ export type PropsType = {
switchToAssociatedView?: boolean;
}) => void;
setComposeSearchTerm: (composeSearchTerm: string) => void;
setComposeGroupAvatar: (_: undefined | ArrayBuffer) => void;
setComposeGroupAvatar: (_: undefined | Uint8Array) => void;
setComposeGroupName: (_: string) => void;
setComposeGroupExpireTimer: (_: number) => void;
showArchivedConversations: () => void;

View file

@ -37,7 +37,7 @@ type PropsExternalType = {
onEditStateChanged: (editState: EditState) => unknown;
onProfileChanged: (
profileData: ProfileDataType,
avatarBuffer?: ArrayBuffer
avatarBuffer?: Uint8Array
) => unknown;
};
@ -126,7 +126,7 @@ export const ProfileEditor = ({
aboutText,
});
const [avatarBuffer, setAvatarBuffer] = useState<ArrayBuffer | undefined>(
const [avatarBuffer, setAvatarBuffer] = useState<Uint8Array | undefined>(
undefined
);
const [stagedProfile, setStagedProfile] = useState<ProfileDataType>({
@ -153,7 +153,7 @@ export const ProfileEditor = ({
);
const handleAvatarChanged = useCallback(
(avatar: ArrayBuffer | undefined) => {
(avatar: Uint8Array | undefined) => {
setAvatarBuffer(avatar);
setEditState(EditState.None);
onProfileChanged(stagedProfile, avatar);

View file

@ -18,7 +18,7 @@ export type PropsDataType = {
type PropsType = {
myProfileChanged: (
profileData: ProfileDataType,
avatarBuffer?: ArrayBuffer
avatarBuffer?: Uint8Array
) => unknown;
toggleProfileEditor: () => unknown;
toggleProfileEditorHasError: () => unknown;

View file

@ -72,7 +72,7 @@ export type StateProps = {
showConversationNotificationsSettings: () => void;
updateGroupAttributes: (
_: Readonly<{
avatar?: undefined | ArrayBuffer;
avatar?: undefined | Uint8Array;
description?: string;
title?: string;
}>
@ -169,7 +169,7 @@ export const ConversationDetails: React.ComponentType<Props> = ({
}
makeRequest={async (
options: Readonly<{
avatar?: undefined | ArrayBuffer;
avatar?: undefined | Uint8Array;
description?: string;
title?: string;
}>

View file

@ -34,7 +34,7 @@ type PropsType = {
initiallyFocusDescription: boolean;
makeRequest: (
_: Readonly<{
avatar?: undefined | ArrayBuffer;
avatar?: undefined | Uint8Array;
description?: string;
title?: undefined | string;
}>
@ -73,7 +73,7 @@ export const EditConversationAttributesModal: FunctionComponent<PropsType> = ({
const startingAvatarPathRef = useRef<undefined | string>(externalAvatarPath);
const [editingAvatar, setEditingAvatar] = useState(false);
const [avatar, setAvatar] = useState<undefined | ArrayBuffer>();
const [avatar, setAvatar] = useState<undefined | Uint8Array>();
const [rawTitle, setRawTitle] = useState(externalTitle);
const [rawGroupDescription, setRawGroupDescription] = useState(
externalGroupDescription
@ -111,7 +111,7 @@ export const EditConversationAttributesModal: FunctionComponent<PropsType> = ({
event.preventDefault();
const request: {
avatar?: undefined | ArrayBuffer;
avatar?: undefined | Uint8Array;
description?: string;
title?: string;
} = {};

View file

@ -56,7 +56,7 @@ export abstract class LeftPaneHelper<T> {
composeSaveAvatarToDisk: SaveAvatarToDiskActionType;
createGroup: () => unknown;
i18n: LocalizerType;
setComposeGroupAvatar: (_: undefined | ArrayBuffer) => unknown;
setComposeGroupAvatar: (_: undefined | Uint8Array) => unknown;
setComposeGroupName: (_: string) => unknown;
setComposeGroupExpireTimer: (_: number) => void;
onChangeComposeSearchTerm: (

View file

@ -24,7 +24,7 @@ import {
import { AvatarColors } from '../../types/Colors';
export type LeftPaneSetGroupMetadataPropsType = {
groupAvatar: undefined | ArrayBuffer;
groupAvatar: undefined | Uint8Array;
groupName: string;
groupExpireTimer: number;
hasError: boolean;
@ -37,7 +37,7 @@ export type LeftPaneSetGroupMetadataPropsType = {
/* eslint-disable class-methods-use-this */
export class LeftPaneSetGroupMetadataHelper extends LeftPaneHelper<LeftPaneSetGroupMetadataPropsType> {
private readonly groupAvatar: undefined | ArrayBuffer;
private readonly groupAvatar: undefined | Uint8Array;
private readonly groupName: string;
@ -127,7 +127,7 @@ export class LeftPaneSetGroupMetadataHelper extends LeftPaneHelper<LeftPaneSetGr
composeSaveAvatarToDisk: SaveAvatarToDiskActionType;
createGroup: () => unknown;
i18n: LocalizerType;
setComposeGroupAvatar: (_: undefined | ArrayBuffer) => unknown;
setComposeGroupAvatar: (_: undefined | Uint8Array) => unknown;
setComposeGroupExpireTimer: (_: number) => void;
setComposeGroupName: (_: string) => unknown;
toggleComposeEditingAvatar: () => unknown;