lbry-desktop/ui/component/fileDetails/view.jsx

112 lines
3.6 KiB
React
Raw Normal View History

2018-03-26 23:32:43 +02:00
// @flow
2018-11-07 23:44:38 +01:00
import React, { Fragment, PureComponent } from 'react';
import MarkdownPreview from 'component/common/markdown-preview';
2018-03-26 23:32:43 +02:00
import Button from 'component/button';
2018-11-07 23:44:38 +01:00
import Expandable from 'component/expandable';
2019-03-05 05:46:57 +01:00
import path from 'path';
2019-11-22 22:13:00 +01:00
import ClaimTags from 'component/claimTags';
2017-09-17 22:33:52 +02:00
2018-03-26 23:32:43 +02:00
type Props = {
2019-11-22 22:13:00 +01:00
uri: string,
2019-04-24 16:02:08 +02:00
claim: StreamClaim,
fileInfo: FileListItem,
metadata: StreamMetadata,
2018-03-26 23:32:43 +02:00
openFolder: string => void,
contentType: string,
2018-11-07 23:44:38 +01:00
user: ?any,
2018-03-26 23:32:43 +02:00
};
2018-11-07 23:44:38 +01:00
class FileDetails extends PureComponent<Props> {
render() {
2019-11-22 22:13:00 +01:00
const { uri, claim, contentType, fileInfo, metadata, openFolder } = this.props;
2018-11-07 23:44:38 +01:00
if (!claim || !metadata) {
2019-07-21 23:31:22 +02:00
return <span className="empty">{__('Empty claim or metadata info.')}</span>;
2018-11-07 23:44:38 +01:00
}
2019-04-24 16:02:08 +02:00
const { description, languages, license } = metadata;
2017-09-17 22:33:52 +02:00
2018-11-07 23:44:38 +01:00
const mediaType = contentType || 'unknown';
const fileSize = metadata.source.size
? formatBytes(metadata.source.size)
: fileInfo && fileInfo.download_path && formatBytes(fileInfo.written_bytes);
2019-05-07 23:38:29 +02:00
let downloadPath = fileInfo && fileInfo.download_path ? path.normalize(fileInfo.download_path) : null;
let downloadNote;
2019-10-13 19:41:51 +02:00
// If the path is blank, file is not available. Streamed files won't have any blobs saved
2019-08-02 08:28:14 +02:00
// Create path from name so the folder opens on click.
if (fileInfo && fileInfo.blobs_completed >= 1 && fileInfo.download_path === null) {
downloadPath = `${fileInfo.download_directory}/${fileInfo.file_name}`;
2019-08-02 08:28:14 +02:00
downloadNote = 'This file may have been streamed, moved or deleted';
}
2018-11-07 23:44:38 +01:00
return (
<Fragment>
<Expandable>
{description && (
2020-01-06 19:32:35 +01:00
<div className="media__info-text">
<MarkdownPreview content={description} />
</div>
2018-11-07 23:44:38 +01:00
)}
2019-11-22 22:13:00 +01:00
<ClaimTags uri={uri} type="large" />
<table className="table table--condensed table--fixed table--file-details">
<tbody>
<tr>
<td> {__('Content Type')}</td>
<td>{mediaType}</td>
</tr>
{fileSize && (
<tr>
<td> {__('File Size')}</td>
<td>{fileSize}</td>
</tr>
)}
{languages && (
<tr>
<td>{__('Languages')}</td>
<td>{languages.join(' ')}</td>
</tr>
)}
<tr>
<td>{__('License')}</td>
<td>{license}</td>
</tr>
{downloadPath && (
<tr>
<td>{__('Downloaded to')}</td>
<td>
{/* {downloadPath.replace(/(.{10})/g, '$1\u200b')} */}
<Button
button="link"
className="button--download-link"
onClick={() => {
if (downloadPath) {
openFolder(downloadPath);
}
}}
label={downloadNote || downloadPath.replace(/(.{10})/g, '$1\u200b')}
/>
</td>
</tr>
)}
</tbody>
</table>
2018-11-07 23:44:38 +01:00
</Expandable>
</Fragment>
);
}
}
// move this with other helper functions when we re-use it
function formatBytes(bytes, decimals = 2) {
if (bytes === 0) return '0 Bytes';
const k = 1024;
const dm = decimals < 0 ? 0 : decimals;
const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
const i = Math.floor(Math.log(bytes) / Math.log(k));
return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i];
}
2017-09-17 22:33:52 +02:00
export default FileDetails;