001package com.github.theholywaffle.teamspeak3.api.wrapper;
002
003/*
004 * #%L
005 * TeamSpeak 3 Java API
006 * %%
007 * Copyright (C) 2016 Bert De Geyter, Roger Baumgartner
008 * %%
009 * Permission is hereby granted, free of charge, to any person obtaining a copy
010 * of this software and associated documentation files (the "Software"), to deal
011 * in the Software without restriction, including without limitation the rights
012 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
013 * copies of the Software, and to permit persons to whom the Software is
014 * furnished to do so, subject to the following conditions:
015 * 
016 * The above copyright notice and this permission notice shall be included in
017 * all copies or substantial portions of the Software.
018 * 
019 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
020 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
021 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
022 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
023 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
024 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
025 * THE SOFTWARE.
026 * #L%
027 */
028
029import java.util.Map;
030
031public class FileListEntry extends FileInfo {
032
033        public FileListEntry(Map<String, String> map) {
034                super(map);
035        }
036
037        @Override
038        public String getPath() {
039                return getParentPath() + getName();
040        }
041
042        @Override
043        public String getName() {
044                return get("name");
045        }
046
047        @Override
048        public String getParentPath() {
049                return get("path");
050        }
051
052        @Override
053        public long getFileSize() {
054                // Present if still uploading and returns
055                final long finishedSize = getLong("incompletesize");
056                return (finishedSize > 0) ? finishedSize : super.getFileSize();
057        }
058
059        @Override
060        public int getType() {
061                return getInt("type");
062        }
063
064        @Override
065        public boolean isFile() {
066                return getType() == 1;
067        }
068
069        @Override
070        public boolean isDirectory() {
071                return getType() == 0;
072        }
073
074        /**
075         * Returns {@code true} if this file was actively being uploaded at the time
076         * this object was created. Note that this will return {@code false} if a
077         * client has paused an upload.
078         *
079         * @return whether this file is actively being uploaded
080         */
081        public boolean isStillUploading() {
082                return getLong("incompletesize") > 0;
083        }
084
085        /**
086         * If this file is still uploading, this method will return how many bytes have already
087         * been uploaded. Otherwise the normal file size is returned.
088         *
089         * @return how many bytes of this file have been uploaded
090         */
091        public long getUploadedBytes() {
092                return super.getFileSize();
093        }
094}