mirror of https://github.com/micromata/borgbackup-butler.git

Kai Reinhard
16.02.2018 0473052c536df2adc13534bd9cfdffd5ad541c1c
File list filter...
4 files modified
51 ■■■■ changed files
borgbutler-server/src/main/java/de/micromata/borgbutler/server/rest/ArchivesRest.java 6 ●●●●● patch | view | raw | blame | history
borgbutler-webapp/src/components/views/archives/FileListFilter.jsx 16 ●●●● patch | view | raw | blame | history
borgbutler-webapp/src/components/views/archives/FileListPanel.jsx 27 ●●●● patch | view | raw | blame | history
borgbutler-webapp/src/components/views/archives/FileListTable.jsx 2 ●●● patch | view | raw | blame | history
borgbutler-server/src/main/java/de/micromata/borgbutler/server/rest/ArchivesRest.java
@@ -5,6 +5,7 @@
import de.micromata.borgbutler.data.Repository;
import de.micromata.borgbutler.json.JsonUtils;
import de.micromata.borgbutler.json.borg.BorgFilesystemItem;
import org.apache.commons.lang3.math.NumberUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -49,10 +50,11 @@
     * @see JsonUtils#toJson(Object, boolean)
     */
    public String getArchiveFileLIst(@QueryParam("archiveId") String archiveId,
                                     @QueryParam("maxResultSize") Integer maxResultSize,
                                     @QueryParam("search") String search,
                                     @QueryParam("maxResultSize") String maxResultSize,
                                     @QueryParam("force") boolean force,
                                     @QueryParam("prettyPrinter") boolean prettyPrinter) {
        int maxSize = maxResultSize != null ? maxResultSize : 50;
        int maxSize = NumberUtils.toInt(maxResultSize, 50);
        List<BorgFilesystemItem> items = ButlerCache.getInstance().getArchiveContent(archiveId, force, maxSize);
        if (items == null) {
            return "[]";
borgbutler-webapp/src/components/views/archives/FileListFilter.jsx
@@ -4,11 +4,11 @@
import {IconRefresh} from '../../general/IconComponents';
import I18n from '../../general/translation/I18n';
function FileListFilters({loadLog, changeFilter, filters}) {
function FileListFilter({reload, changeFilter, filter}) {
    return (
        <form
            onSubmit={loadLog}
            onSubmit={reload}
            className={'form-inline'}
        >
            <FormLabel length={1}>
@@ -16,14 +16,14 @@
            </FormLabel>
            <FormInput
                value={filters.search}
                value={filter.search}
                name={'search'}
                onChange={changeFilter}
                fieldLength={5}
            />
            <FormSelect
                value={filters.maxSize}
                value={filter.maxSize}
                name={'maxSize'}
                onChange={changeFilter}
                hint={<I18n name={'common.limitsResultSize'} />}
@@ -41,13 +41,13 @@
    );
}
FileListFilters.propTypes = {
FileListFilter.propTypes = {
    changeFilter: PropTypes.func.isRequired,
    filters: PropTypes.shape({
    filter: PropTypes.shape({
        search: PropTypes.string,
        maxSize: PropTypes.oneOf(['50', '100', '500', '1000', '10000']),
    }).isRequired,
    loadLog: PropTypes.func.isRequired
    reload: PropTypes.func.isRequired
};
export default FileListFilters;
export default FileListFilter;
borgbutler-webapp/src/components/views/archives/FileListPanel.jsx
@@ -3,18 +3,28 @@
import {getRestServiceUrl} from '../../../utilities/global';
import ErrorAlert from '../../general/ErrorAlert';
import FileListTable from "./FileListTable";
import FileListFilter from "./FileListFilter";
class ArchiveView extends React.Component {
    state = {
        isFetching: false, activeTab: '1',
        fileList: undefined
        fileList: undefined,
        filter: {
            search: '',
            maxSize: '50'
        }
    };
    componentDidMount = () => {
        this.fetchArchiveFileList(false);
    };
    handleInputChange = (event) => {
        event.preventDefault();
        this.setState({filter : {...this.state.filter, [event.target.name]: event.target.value}});
    };
    fetchArchiveFileList = (force) => {
        let forceReload = false;
@@ -27,7 +37,9 @@
        });
        fetch(getRestServiceUrl('archives/filelist', {
            archiveId: this.props.archiveId,
            force: forceReload
            force: forceReload,
            search: this.state.filter.search,
            maxResultSize: this.state.filter.maxSize
        }), {
            method: 'GET',
            headers: {
@@ -61,12 +73,21 @@
        } else if (this.state.fileList) {
            if (this.state.fileList.length > 0) {
                content = <React.Fragment>
                    <FileListFilter
                        filter={this.state.filter}
                        changeFilter={this.handleInputChange}
                        reload={(event) => {
                            event.preventDefault();
                            this.fetchArchiveFileList();
                        }}
                    />
                    <FileListTable
                        entries={this.state.fileList}/>
                </React.Fragment>;
            } else {
                content = <React.Fragment>
                    <Button outline color="primary" onClick={() => this.fetchArchiveFileList(true)}>Load file list from borg backup server</Button>
                    <Button outline color="primary" onClick={() => this.fetchArchiveFileList(true)}>Load file list from
                        borg backup server</Button>
                </React.Fragment>;
            }
        }
borgbutler-webapp/src/components/views/archives/FileListTable.jsx
@@ -10,7 +10,7 @@
            <thead>
            <tr>
                <th>Mode</th>
                <th>Date</th>
                <th>Modified time</th>
                <th>Size</th>
                <th>Path</th>
            </tr>