@ -4,6 +4,7 @@ import { throttle } from 'lodash';
import { search as emojiSearch } from '../features/emoji/emoji_mart_search_light' ;
import { tagHistory } from '../settings' ;
import { useEmoji } from './emojis' ;
import resizeImage from '../utils/resize_image' ;
import { importFetchedAccounts } from './importer' ;
import { updateTimeline } from './timelines' ;
import { showAlertForError } from './alerts' ;
@ -174,79 +175,6 @@ export function submitComposeFail(error) {
} ;
} ;
const MAX_IMAGE_DIMENSION = 1280 ;
const dataURLtoBlob = dataURL => {
const BASE64_MARKER = ';base64,' ;
if ( dataURL . indexOf ( BASE64_MARKER ) === - 1 ) {
const parts = dataURL . split ( ',' ) ;
const contentType = parts [ 0 ] . split ( ':' ) [ 1 ] ;
const raw = parts [ 1 ] ;
return new Blob ( [ raw ] , { type : contentType } ) ;
}
const parts = dataURL . split ( BASE64_MARKER ) ;
const contentType = parts [ 0 ] . split ( ':' ) [ 1 ] ;
const raw = window . atob ( parts [ 1 ] ) ;
const rawLength = raw . length ;
const uInt8Array = new Uint8Array ( rawLength ) ;
for ( let i = 0 ; i < rawLength ; ++ i ) {
uInt8Array [ i ] = raw . charCodeAt ( i ) ;
}
return new Blob ( [ uInt8Array ] , { type : contentType } ) ;
} ;
const resizeImage = ( inputFile , callback ) => {
if ( inputFile . type . match ( /image.*/ ) && inputFile . type !== 'image/gif' ) {
const reader = new FileReader ( ) ;
reader . onload = e => {
const img = new Image ( ) ;
img . onload = ( ) => {
const canvas = document . createElement ( 'canvas' ) ;
const { width , height } = img ;
let newWidth , newHeight ;
if ( width < MAX_IMAGE_DIMENSION && height < MAX_IMAGE_DIMENSION ) {
callback ( inputFile ) ;
return ;
}
if ( width > height ) {
newHeight = height * MAX_IMAGE_DIMENSION / width ;
newWidth = MAX_IMAGE_DIMENSION ;
} else if ( height > width ) {
newWidth = width * MAX_IMAGE_DIMENSION / height ;
newHeight = MAX_IMAGE_DIMENSION ;
} else {
newWidth = MAX_IMAGE_DIMENSION ;
newHeight = MAX_IMAGE_DIMENSION ;
}
canvas . width = newWidth ;
canvas . height = newHeight ;
canvas . getContext ( '2d' ) . drawImage ( img , 0 , 0 , newWidth , newHeight ) ;
callback ( dataURLtoBlob ( canvas . toDataURL ( inputFile . type ) ) ) ;
} ;
img . src = e . target . result ;
} ;
reader . readAsDataURL ( inputFile ) ;
} else {
callback ( inputFile ) ;
}
} ;
export function uploadCompose ( files ) {
return function ( dispatch , getState ) {
if ( getState ( ) . getIn ( [ 'compose' , 'media_attachments' ] ) . size > 3 ) {
@ -255,20 +183,14 @@ export function uploadCompose(files) {
dispatch ( uploadComposeRequest ( ) ) ;
resizeImage ( files [ 0 ] , file => {
le t data = new FormData ( ) ;
resizeImage ( files [ 0 ] ) . then ( file => {
cons t data = new FormData ( ) ;
data . append ( 'file' , file ) ;
api ( getState ) . post ( '/api/v1/media' , data , {
onUploadProgress : function ( e ) {
dispatch ( uploadComposeProgress ( e . loaded , e . total ) ) ;
} ,
} ) . then ( function ( response ) {
dispatch ( uploadComposeSuccess ( response . data ) ) ;
} ) . catch ( function ( error ) {
dispatch ( uploadComposeFail ( error ) ) ;
} ) ;
} ) ;
return api ( getState ) . post ( '/api/v1/media' , data , {
onUploadProgress : ( { loaded , total } ) => dispatch ( uploadComposeProgress ( loaded , total ) ) ,
} ) . then ( ( { data } ) => dispatch ( uploadComposeSuccess ( data ) ) ) ;
} ) . catch ( error => dispatch ( uploadComposeFail ( error ) ) ) ;
} ;
} ;