001package com.ericlam.mc.bungee.hnmc.managers;
002
003import com.ericlam.mc.bungee.hnmc.exceptions.PluginNotFoundException;
004import com.ericlam.mc.bungee.hnmc.exceptions.ResourceNotFoundException;
005
006import java.io.File;
007import java.util.concurrent.CompletableFuture;
008import java.util.function.Consumer;
009
010/**
011 * 插件資源管理器
012 */
013public interface ResourceManager {
014
015    /**
016     * 插件資源類別
017     */
018    enum Type {
019        /**
020         * Spigot 插件
021         */
022        SPIGOT,
023        /**
024         * HyperNiteMC 專用插件
025         */
026        HYPERNITE
027    }
028
029    /**
030     * 獲取該插件的最新版本
031     *
032     * @param plugin 插件名稱
033     * @return 版本名稱
034     * @throws PluginNotFoundException 找不到插件
035     * @throws ResourceNotFoundException 找不到遠端資源
036     */
037    String getLatestVersion(String plugin) throws PluginNotFoundException, ResourceNotFoundException;
038
039    /**
040     * 檢查該插件版本是否為最新版本
041     *
042     * @param plugin 插件名稱
043     * @return 是否為最新版本
044     * @throws PluginNotFoundException 找不到插件
045     * @throws ResourceNotFoundException 找不到遠端資源
046     */
047    boolean isLatestVersion(String plugin) throws PluginNotFoundException, ResourceNotFoundException;
048
049    /**
050     * 刷新該插件的最新版本到快取
051     * @param plugin 插件名稱
052     * @param afterRun 運行成功時
053     * @param errorRun 出現錯誤時
054     */
055    void fetchLatestVersion(String plugin, Consumer<String> afterRun, Consumer<Exception> errorRun);
056
057    /**
058     * 下載該插件的最新版本
059     *
060     * @param plugin 插件名稱
061     * @return 插件檔案, 找不到遠端資源時為 null
062     * @throws PluginNotFoundException 找不到插件
063     */
064    CompletableFuture<File> downloadLatestVersion(String plugin) throws PluginNotFoundException;
065
066}