Add notification when Blob converting fails

master
Torjus 2018-07-27 11:06:42 +02:00
parent 734bb1eb0a
commit 088f3ccc7c
5 changed files with 122 additions and 108 deletions

View File

@ -1,35 +1,37 @@
import React, { Component, Fragment } from 'react'; import React, { Component, Fragment } from 'react';
import { connect } from 'react-redux';
import { notifyAction } from '../../redux/stateActions';
import { saveAs } from 'file-saver/FileSaver'; import { saveAs } from 'file-saver/FileSaver';
import { client } from './FileSharing'; import { client } from './FileSharing';
const saveFile = (file) =>
{
file.getBlob((err, blob) =>
{
if (err)
{
console.error('WebTorrent error');
return;
}
console.log('TRYING TO SAVE BLOB', blob)
saveAs(blob, file.name);
});
};
class FileChatEntry extends Component class FileChatEntry extends Component
{ {
state = { state = {
active: false, active : false,
numPeers: 0, numPeers : 0,
progress: 0, progress : 0,
files: null files : null
};
saveFile = (file) =>
{
file.getBlob((err, blob) =>
{
if (err)
{
return this.props.notify({
text : 'An error occurred while saving a file'
});
}
saveAs(blob, file.name);
});
}; };
download = () => download = () =>
{ {
this.setState({ this.setState({
active: true active : true
}); });
client.add(this.props.message.file.magnet, (torrent) => client.add(this.props.message.file.magnet, (torrent) =>
@ -37,20 +39,21 @@ class FileChatEntry extends Component
const onProgress = () => const onProgress = () =>
{ {
this.setState({ this.setState({
numPeers: torrent.numPeers, numPeers : torrent.numPeers,
progress: Math.round(torrent.progress * 100 * 100) / 100 progress : Math.round(torrent.progress * 100 * 100) / 100
}); });
}; };
setInterval(onProgress, 500); setInterval(onProgress, 500);
onProgress(); onProgress();
torrent.on('done', () => { torrent.on('done', () =>
{
onProgress(); onProgress();
clearInterval(onProgress); clearInterval(onProgress);
this.setState({ this.setState({
files: torrent.files files : torrent.files
}); });
}); });
}); });
@ -76,7 +79,9 @@ class FileChatEntry extends Component
<div> <div>
{this.state.files.map((file, i) => ( {this.state.files.map((file, i) => (
<div key={i}> <div key={i}>
<button onClick={() => saveFile(file)}>download {file.name}</button> <button onClick={() => this.saveFile(file)}>
download {file.name}
</button>
</div> </div>
))} ))}
</div> </div>
@ -87,4 +92,11 @@ class FileChatEntry extends Component
} }
} }
export default FileChatEntry; const mapDispatchToProps = {
notify : notifyAction
};
export default connect(
undefined,
mapDispatchToProps
)(FileChatEntry);

View File

@ -1,32 +1,34 @@
import React, { Component } from 'react'; import React, { Component } from 'react';
import { connect } from 'react-redux';
import WebTorrent from 'webtorrent'; import WebTorrent from 'webtorrent';
import dragDrop from 'drag-drop'; import dragDrop from 'drag-drop';
import * as stateActions from '../../redux/stateActions'; import * as stateActions from '../../redux/stateActions';
import * as requestActions from '../../redux/requestActions'; import * as requestActions from '../../redux/requestActions';
import { store } from '../../store'; import { store } from '../../store';
export const client = new WebTorrent(); export const client = new WebTorrent();
const notifyPeers = (file) => const notifyPeers = (file) =>
{ {
const { displayName, picture } = store.getState().me; const { displayName, picture } = store.getState().me;
store.dispatch(stateActions.addUserFile(file)); store.dispatch(stateActions.addUserFile(file));
store.dispatch(requestActions.sendChatFile(file, displayName, picture)); store.dispatch(requestActions.sendChatFile(file, displayName, picture));
}; };
const shareFiles = (files) => const shareFiles = (files) =>
{ {
client.seed(files, (torrent) => { client.seed(files, (torrent) =>
{
notifyPeers({ notifyPeers({
magnet: torrent.magnetURI magnet : torrent.magnetURI
}); });
}); });
}; };
dragDrop('body', shareFiles); dragDrop('body', shareFiles);
class FileSharing extends Component { class FileSharing extends Component
{
constructor(props) constructor(props)
{ {
super(props); super(props);
@ -43,7 +45,7 @@ class FileSharing extends Component {
render() render()
{ {
return ( return (
<input type="file" onChange={this.handleFileChange} /> <input type='file' onChange={this.handleFileChange} />
); );
} }
} }

View File

@ -13,9 +13,9 @@ export function createNewMessage(text, sender, name, picture)
export function createNewFile(file, sender, name, picture) export function createNewFile(file, sender, name, picture)
{ {
return { return {
type: 'file', type : 'file',
file, file,
time: Date.now(), time : Date.now(),
name, name,
sender, sender,
picture picture

View File

@ -219,8 +219,8 @@ export const sendChatFile = (magnet, name, picture) =>
const message = createNewFile(magnet, 'response', name, picture); const message = createNewFile(magnet, 'response', name, picture);
return { return {
type: 'SEND_CHAT_MESSAGE', type : 'SEND_CHAT_MESSAGE',
payload: { message } payload : { message }
}; };
}; };

View File

@ -413,8 +413,8 @@ export const addUserMessage = (text) =>
export const addUserFile = (file) => export const addUserFile = (file) =>
{ {
return { return {
type: 'ADD_NEW_USER_FILE', type : 'ADD_NEW_USER_FILE',
payload: { file } payload : { file }
}; };
}; };