Support overriding location of user and cache dirs for android

This commit is contained in:
drdev
2014-05-02 21:18:01 +00:00
parent 92749f64f8
commit 1729ce8a02
5 changed files with 79 additions and 77 deletions

View File

@@ -53,6 +53,8 @@ import forge.interfaces.IButton;
import forge.interfaces.IGuiBase; import forge.interfaces.IGuiBase;
import forge.item.PaperCard; import forge.item.PaperCard;
import forge.match.input.InputQueue; import forge.match.input.InputQueue;
import forge.properties.ForgeConstants;
import forge.properties.ForgeProfileProperties;
import forge.screens.match.CMatchUI; import forge.screens.match.CMatchUI;
import forge.screens.match.VMatchUI; import forge.screens.match.VMatchUI;
import forge.screens.match.ViewWinLose; import forge.screens.match.ViewWinLose;
@@ -100,14 +102,14 @@ public class GuiDesktop implements IGuiBase {
} }
@Override @Override
public String getInstallRoot() { public String getAssetsDir() {
return StringUtils.containsIgnoreCase(BuildInfo.getVersionString(), "svn") ? return StringUtils.containsIgnoreCase(BuildInfo.getVersionString(), "svn") ?
"../forge-gui/" : ""; "../forge-gui/" : "";
} }
@Override @Override
public String getAssetsDir() { public ForgeProfileProperties getProfileProps() {
return "res/"; return new ForgeProfileProperties(ForgeConstants.PROFILE_FILE);
} }
@Override @Override
@@ -416,25 +418,21 @@ public class GuiDesktop implements IGuiBase {
@Override @Override
public LobbyPlayer getGuiPlayer() { public LobbyPlayer getGuiPlayer() {
// TODO Auto-generated method stub
return FControl.instance.getGuiPlayer(); return FControl.instance.getGuiPlayer();
} }
@Override @Override
public LobbyPlayer createAiPlayer() { public LobbyPlayer createAiPlayer() {
// TODO Auto-generated method stub
return FControl.instance.getAiPlayer(); return FControl.instance.getAiPlayer();
} }
@Override @Override
public LobbyPlayer createAiPlayer(String name, int avatarIndex) { public LobbyPlayer createAiPlayer(String name, int avatarIndex) {
// TODO Auto-generated method stub
return FControl.instance.getAiPlayer(name, avatarIndex); return FControl.instance.getAiPlayer(name, avatarIndex);
} }
@Override @Override
public LobbyPlayer getQuestPlayer() { public LobbyPlayer getQuestPlayer() {
// TODO Auto-generated method stub
return getGuiPlayer(); return getGuiPlayer();
} }
} }

View File

@@ -9,6 +9,7 @@ import java.util.Set;
import org.apache.commons.lang3.tuple.Pair; import org.apache.commons.lang3.tuple.Pair;
import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Application.ApplicationType;
import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.Texture;
import com.google.common.base.Function; import com.google.common.base.Function;
@@ -37,6 +38,7 @@ import forge.interfaces.IGuiBase;
import forge.item.PaperCard; import forge.item.PaperCard;
import forge.match.input.InputQueue; import forge.match.input.InputQueue;
import forge.properties.ForgeConstants; import forge.properties.ForgeConstants;
import forge.properties.ForgeProfileProperties;
import forge.screens.match.FControl; import forge.screens.match.FControl;
import forge.screens.match.views.VPhaseIndicator.PhaseLabel; import forge.screens.match.views.VPhaseIndicator.PhaseLabel;
import forge.screens.match.winlose.ViewWinLose; import forge.screens.match.winlose.ViewWinLose;
@@ -75,21 +77,20 @@ public class GuiMobile implements IGuiBase {
} }
@Override @Override
public String getInstallRoot() { public String getAssetsDir() {
switch (Gdx.app.getType()) { if (Gdx.app.getType() == ApplicationType.Desktop) {
case Desktop:
return "../forge-gui/"; return "../forge-gui/";
case Android:
break; //TODO
default:
break;
} }
return ""; return Gdx.files.getLocalStoragePath();
} }
@Override @Override
public String getAssetsDir() { public ForgeProfileProperties getProfileProps() {
return "res/"; if (Gdx.app.getType() == ApplicationType.Desktop) {
return new ForgeProfileProperties(ForgeConstants.PROFILE_FILE);
}
String assetsDir = ForgeConstants.ASSETS_DIR;
return new ForgeProfileProperties(assetsDir + "data/", assetsDir + "cache/");
} }
@Override @Override
@@ -345,25 +346,21 @@ public class GuiMobile implements IGuiBase {
} }
@Override @Override
public LobbyPlayer getGuiPlayer() { public LobbyPlayer getGuiPlayer() {
// TODO Auto-generated method stub
return FControl.getGuiPlayer(); return FControl.getGuiPlayer();
} }
@Override @Override
public LobbyPlayer createAiPlayer() { public LobbyPlayer createAiPlayer() {
// TODO Auto-generated method stub
return FControl.getAiPlayer(); return FControl.getAiPlayer();
} }
@Override @Override
public LobbyPlayer createAiPlayer(String name, int avatarIndex) { public LobbyPlayer createAiPlayer(String name, int avatarIndex) {
// TODO Auto-generated method stub
return FControl.getAiPlayer(name, avatarIndex); return FControl.getAiPlayer(name, avatarIndex);
} }
@Override @Override
public LobbyPlayer getQuestPlayer() { public LobbyPlayer getQuestPlayer() {
// TODO Auto-generated method stub
return getGuiPlayer(); return getGuiPlayer();
} }
} }

View File

@@ -27,6 +27,7 @@ import forge.game.spellability.SpellAbility;
import forge.game.zone.ZoneType; import forge.game.zone.ZoneType;
import forge.item.PaperCard; import forge.item.PaperCard;
import forge.match.input.InputQueue; import forge.match.input.InputQueue;
import forge.properties.ForgeProfileProperties;
import forge.util.ITriggerEvent; import forge.util.ITriggerEvent;
@@ -34,7 +35,6 @@ public interface IGuiBase {
void invokeInEdtLater(Runnable runnable); void invokeInEdtLater(Runnable runnable);
void invokeInEdtAndWait(final Runnable proc); void invokeInEdtAndWait(final Runnable proc);
boolean isGuiThread(); boolean isGuiThread();
String getInstallRoot();
String getAssetsDir(); String getAssetsDir();
boolean mayShowCard(Card card); boolean mayShowCard(Card card);
ISkinImage getUnskinnedIcon(String path); ISkinImage getUnskinnedIcon(String path);
@@ -83,4 +83,5 @@ public interface IGuiBase {
LobbyPlayer createAiPlayer(); LobbyPlayer createAiPlayer();
LobbyPlayer createAiPlayer(String name, int avatarIndex); LobbyPlayer createAiPlayer(String name, int avatarIndex);
LobbyPlayer getQuestPlayer(); LobbyPlayer getQuestPlayer();
ForgeProfileProperties getProfileProps();
} }

View File

@@ -23,52 +23,50 @@ import java.util.Map;
import forge.GuiBase; import forge.GuiBase;
public final class ForgeConstants { public final class ForgeConstants {
private static final String _INSTALL_ROOT = GuiBase.getInterface().getInstallRoot(); public static final String ASSETS_DIR = GuiBase.getInterface().getAssetsDir();
public static final String PROFILE_FILE = _INSTALL_ROOT + "forge.profile.properties"; public static final String PROFILE_FILE = ASSETS_DIR + "forge.profile.properties";
public static final String PROFILE_TEMPLATE_FILE = PROFILE_FILE + ".example"; public static final String PROFILE_TEMPLATE_FILE = PROFILE_FILE + ".example";
// data that is only in the program dir private static final String RES_DIR = ASSETS_DIR + "res/";
private static final String _ASSETS_ROOT = _INSTALL_ROOT + GuiBase.getInterface().getAssetsDir(); private static final String LISTS_DIR = RES_DIR + "lists/";
public static final String KEYWORD_LIST_FILE = LISTS_DIR + "NonStackingKWList.txt";
public static final String TYPE_LIST_FILE = LISTS_DIR + "TypeLists.txt";
public static final String IMAGE_LIST_TOKENS_FILE = LISTS_DIR + "token-images.txt";
public static final String IMAGE_LIST_QUEST_OPPONENT_ICONS_FILE = LISTS_DIR + "quest-opponent-icons.txt";
public static final String IMAGE_LIST_QUEST_PET_SHOP_ICONS_FILE = LISTS_DIR + "quest-pet-shop-icons.txt";
public static final String IMAGE_LIST_QUEST_TOKENS_FILE = LISTS_DIR + "quest-pet-token-images.txt";
public static final String IMAGE_LIST_QUEST_BOOSTERS_FILE = LISTS_DIR + "booster-images.txt";
public static final String IMAGE_LIST_QUEST_FATPACKS_FILE = LISTS_DIR + "fatpack-images.txt";
public static final String IMAGE_LIST_QUEST_BOOSTERBOXES_FILE = LISTS_DIR + "boosterbox-images.txt";
public static final String IMAGE_LIST_QUEST_PRECONS_FILE = LISTS_DIR + "precon-images.txt";
public static final String IMAGE_LIST_QUEST_TOURNAMENTPACKS_FILE = LISTS_DIR + "tournamentpack-images.txt";
private static final String _LIST_DIR = _ASSETS_ROOT + "lists/"; public static final String CHANGES_FILE = ASSETS_DIR + "CHANGES.txt";
public static final String KEYWORD_LIST_FILE = _LIST_DIR + "NonStackingKWList.txt"; public static final String LICENSE_FILE = ASSETS_DIR + "LICENSE.txt";
public static final String TYPE_LIST_FILE = _LIST_DIR + "TypeLists.txt"; public static final String README_FILE = ASSETS_DIR + "README.txt";
public static final String IMAGE_LIST_TOKENS_FILE = _LIST_DIR + "token-images.txt"; public static final String HOWTO_FILE = RES_DIR + "howto.txt";
public static final String IMAGE_LIST_QUEST_OPPONENT_ICONS_FILE = _LIST_DIR + "quest-opponent-icons.txt";
public static final String IMAGE_LIST_QUEST_PET_SHOP_ICONS_FILE = _LIST_DIR + "quest-pet-shop-icons.txt";
public static final String IMAGE_LIST_QUEST_TOKENS_FILE = _LIST_DIR + "quest-pet-token-images.txt";
public static final String IMAGE_LIST_QUEST_BOOSTERS_FILE = _LIST_DIR + "booster-images.txt";
public static final String IMAGE_LIST_QUEST_FATPACKS_FILE = _LIST_DIR + "fatpack-images.txt";
public static final String IMAGE_LIST_QUEST_BOOSTERBOXES_FILE = _LIST_DIR + "boosterbox-images.txt";
public static final String IMAGE_LIST_QUEST_PRECONS_FILE = _LIST_DIR + "precon-images.txt";
public static final String IMAGE_LIST_QUEST_TOURNAMENTPACKS_FILE = _LIST_DIR + "tournamentpack-images.txt";
public static final String CHANGES_FILE = _INSTALL_ROOT + "CHANGES.txt"; public static final String DRAFT_DIR = RES_DIR + "draft/";
public static final String LICENSE_FILE = _INSTALL_ROOT + "LICENSE.txt";
public static final String README_FILE = _INSTALL_ROOT + "README.txt";
public static final String HOWTO_FILE = _ASSETS_ROOT + "howto.txt";
public static final String DRAFT_DIR = _ASSETS_ROOT + "draft/";
public static final String DRAFT_RANKINGS_FILE = DRAFT_DIR + "rankings.txt"; public static final String DRAFT_RANKINGS_FILE = DRAFT_DIR + "rankings.txt";
public static final String SEALED_DIR = _ASSETS_ROOT + "sealed/"; public static final String SEALED_DIR = RES_DIR + "sealed/";
public static final String CARD_DATA_DIR = _ASSETS_ROOT + "cardsfolder/"; public static final String CARD_DATA_DIR = RES_DIR + "cardsfolder/";
public static final String EDITIONS_DIR = _ASSETS_ROOT + "editions/"; public static final String EDITIONS_DIR = RES_DIR + "editions/";
public static final String BLOCK_DATA_DIR = _ASSETS_ROOT + "blockdata/"; public static final String BLOCK_DATA_DIR = RES_DIR + "blockdata/";
public static final String DECK_CUBE_DIR = _ASSETS_ROOT + "cube/"; public static final String DECK_CUBE_DIR = RES_DIR + "cube/";
public static final String AI_PROFILE_DIR = _ASSETS_ROOT + "ai/"; public static final String AI_PROFILE_DIR = RES_DIR + "ai/";
public static final String SOUND_DIR = _ASSETS_ROOT + "sound/"; public static final String SOUND_DIR = RES_DIR + "sound/";
private static final String _QUEST_DIR = _ASSETS_ROOT + "quest/"; private static final String QUEST_DIR = RES_DIR + "quest/";
public static final String QUEST_WORLD_DIR = _QUEST_DIR + "world/"; public static final String QUEST_WORLD_DIR = QUEST_DIR + "world/";
public static final String QUEST_PRECON_DIR = _QUEST_DIR + "precons/"; public static final String QUEST_PRECON_DIR = QUEST_DIR + "precons/";
public static final String PRICES_BOOSTER_FILE = _QUEST_DIR + "booster-prices.txt"; public static final String PRICES_BOOSTER_FILE = QUEST_DIR + "booster-prices.txt";
public static final String BAZAAR_DIR = _QUEST_DIR + "bazaar/"; public static final String BAZAAR_DIR = QUEST_DIR + "bazaar/";
public static final String BAZAAR_INDEX_FILE = BAZAAR_DIR + "index.xml"; public static final String BAZAAR_INDEX_FILE = BAZAAR_DIR + "index.xml";
public static final String DEFAULT_DUELS_DIR = _QUEST_DIR + "duels"; public static final String DEFAULT_DUELS_DIR = QUEST_DIR + "duels";
public static final String DEFAULT_CHALLENGES_DIR = _QUEST_DIR + "challenges"; public static final String DEFAULT_CHALLENGES_DIR = QUEST_DIR + "challenges";
public static final String THEMES_DIR = _QUEST_DIR + "themes"; public static final String THEMES_DIR = QUEST_DIR + "themes";
public static final String SKINS_DIR = _ASSETS_ROOT + "skins/"; public static final String SKINS_DIR = RES_DIR + "skins/";
public static final String DEFAULT_SKINS_DIR = SKINS_DIR + "default/"; public static final String DEFAULT_SKINS_DIR = SKINS_DIR + "default/";
//don't associate these skin files with a directory since skin directory will be determined later //don't associate these skin files with a directory since skin directory will be determined later
public static final String SPRITE_ICONS_FILE = "sprite_icons.png"; public static final String SPRITE_ICONS_FILE = "sprite_icons.png";
@@ -87,7 +85,7 @@ public final class ForgeConstants {
public static final Map<String, String> CACHE_CARD_PICS_SUBDIR; public static final Map<String, String> CACHE_CARD_PICS_SUBDIR;
public static final int SERVER_PORT_NUMBER; public static final int SERVER_PORT_NUMBER;
static { static {
ForgeProfileProperties profileProps = new ForgeProfileProperties(PROFILE_FILE); ForgeProfileProperties profileProps = GuiBase.getInterface().getProfileProps();
USER_DIR = profileProps.userDir; USER_DIR = profileProps.userDir;
CACHE_DIR = profileProps.cacheDir; CACHE_DIR = profileProps.cacheDir;
CACHE_CARD_PICS_DIR = profileProps.cardPicsDir; CACHE_CARD_PICS_DIR = profileProps.cardPicsDir;
@@ -115,7 +113,7 @@ public final class ForgeConstants {
public static final String ITEM_VIEW_PREFS_FILE = USER_PREFS_DIR + "item_view.preferences"; public static final String ITEM_VIEW_PREFS_FILE = USER_PREFS_DIR + "item_view.preferences";
// data that has defaults in the program dir but overrides/additions in the user dir // data that has defaults in the program dir but overrides/additions in the user dir
private static final String _DEFAULTS_DIR = _ASSETS_ROOT + "defaults/"; private static final String _DEFAULTS_DIR = RES_DIR + "defaults/";
public static final String NO_CARD_FILE = _DEFAULTS_DIR + "no_card.jpg"; public static final String NO_CARD_FILE = _DEFAULTS_DIR + "no_card.jpg";
public static final FileLocation WINDOW_LAYOUT_FILE = new FileLocation(_DEFAULTS_DIR, USER_PREFS_DIR, "window.xml"); public static final FileLocation WINDOW_LAYOUT_FILE = new FileLocation(_DEFAULTS_DIR, USER_PREFS_DIR, "window.xml");
public static final FileLocation MATCH_LAYOUT_FILE = new FileLocation(_DEFAULTS_DIR, USER_PREFS_DIR, "match.xml"); public static final FileLocation MATCH_LAYOUT_FILE = new FileLocation(_DEFAULTS_DIR, USER_PREFS_DIR, "match.xml");
@@ -124,16 +122,16 @@ public final class ForgeConstants {
public static final FileLocation GAUNTLET_DIR = new FileLocation(_DEFAULTS_DIR, USER_DIR, "gauntlet/"); public static final FileLocation GAUNTLET_DIR = new FileLocation(_DEFAULTS_DIR, USER_DIR, "gauntlet/");
// data that is only in the cached dir // data that is only in the cached dir
private static final String _PICS_DIR = CACHE_DIR + "pics/"; private static final String PICS_DIR = CACHE_DIR + "pics/";
public static final String DB_DIR = CACHE_DIR + "db/"; public static final String DB_DIR = CACHE_DIR + "db/";
public static final String CACHE_TOKEN_PICS_DIR = _PICS_DIR + "tokens/"; public static final String CACHE_TOKEN_PICS_DIR = PICS_DIR + "tokens/";
public static final String CACHE_ICON_PICS_DIR = _PICS_DIR + "icons/"; public static final String CACHE_ICON_PICS_DIR = PICS_DIR + "icons/";
public static final String CACHE_SYMBOLS_DIR = _PICS_DIR + "symbols/"; public static final String CACHE_SYMBOLS_DIR = PICS_DIR + "symbols/";
public static final String CACHE_BOOSTER_PICS_DIR = _PICS_DIR + "boosters/"; public static final String CACHE_BOOSTER_PICS_DIR = PICS_DIR + "boosters/";
public static final String CACHE_FATPACK_PICS_DIR = _PICS_DIR + "fatpacks/"; public static final String CACHE_FATPACK_PICS_DIR = PICS_DIR + "fatpacks/";
public static final String CACHE_BOOSTERBOX_PICS_DIR = _PICS_DIR + "boosterboxes/"; public static final String CACHE_BOOSTERBOX_PICS_DIR = PICS_DIR + "boosterboxes/";
public static final String CACHE_PRECON_PICS_DIR = _PICS_DIR + "precons/"; public static final String CACHE_PRECON_PICS_DIR = PICS_DIR + "precons/";
public static final String CACHE_TOURNAMENTPACK_PICS_DIR = _PICS_DIR + "tournamentpacks/"; public static final String CACHE_TOURNAMENTPACK_PICS_DIR = PICS_DIR + "tournamentpacks/";
public static final String QUEST_CARD_PRICE_FILE = DB_DIR + "all-prices.txt"; public static final String QUEST_CARD_PRICE_FILE = DB_DIR + "all-prices.txt";
public static final String[] PROFILE_DIRS = { public static final String[] PROFILE_DIRS = {
@@ -158,8 +156,8 @@ public final class ForgeConstants {
CACHE_TOURNAMENTPACK_PICS_DIR }; CACHE_TOURNAMENTPACK_PICS_DIR };
// URLs // URLs
private static final String _URL_CARDFORGE = "http://cardforge.org"; private static final String URL_CARDFORGE = "http://cardforge.org";
public static final String URL_DRAFT_UPLOAD = _URL_CARDFORGE + "/draftAI/submitDraftData.php"; public static final String URL_DRAFT_UPLOAD = URL_CARDFORGE + "/draftAI/submitDraftData.php";
public static final String URL_PIC_DOWNLOAD = _URL_CARDFORGE + "/fpics/"; public static final String URL_PIC_DOWNLOAD = URL_CARDFORGE + "/fpics/";
public static final String URL_PRICE_DOWNLOAD = _URL_CARDFORGE + "/MagicInfo/pricegen.php"; public static final String URL_PRICE_DOWNLOAD = URL_CARDFORGE + "/MagicInfo/pricegen.php";
} }

View File

@@ -18,12 +18,14 @@
package forge.properties; package forge.properties;
import forge.util.FileSection; import forge.util.FileSection;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.Pair; import org.apache.commons.lang3.tuple.Pair;
import java.io.File; import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.IOException; import java.io.IOException;
import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.Properties; import java.util.Properties;
@@ -46,6 +48,14 @@ public class ForgeProfileProperties {
private static final String _SERVER_PORT = "serverPort"; private static final String _SERVER_PORT = "serverPort";
public ForgeProfileProperties(String userDir0, String cacheDir0) {
userDir = userDir0;
cacheDir = cacheDir0;
cardPicsDir = cacheDir + "pics/cards/";
cardPicsSubDir = new HashMap<String, String>();
serverPort = 0;
}
public ForgeProfileProperties(String filename) { public ForgeProfileProperties(String filename) {
Properties props = new Properties(); Properties props = new Properties();
File propFile = new File(filename); File propFile = new File(filename);
@@ -63,10 +73,8 @@ public class ForgeProfileProperties {
cardPicsDir = _getDir(props, _CARD_PICS_DIR_KEY, cacheDir + "pics/cards/"); cardPicsDir = _getDir(props, _CARD_PICS_DIR_KEY, cacheDir + "pics/cards/");
cardPicsSubDir = _getMap(props, _CARD_PICS_SUB_DIRS_KEY); cardPicsSubDir = _getMap(props, _CARD_PICS_SUB_DIRS_KEY);
serverPort = _getInt(props, _SERVER_PORT, 0); serverPort = _getInt(props, _SERVER_PORT, 0);
} }
private Map<String,String> _getMap(Properties props, String propertyKey) { private Map<String,String> _getMap(Properties props, String propertyKey) {
String strMap = props.getProperty(propertyKey, "").trim(); String strMap = props.getProperty(propertyKey, "").trim();
return FileSection.parseToMap(strMap, "->", "|"); return FileSection.parseToMap(strMap, "->", "|");