beginnings of migration code

This commit is contained in:
myk
2013-03-11 10:00:11 +00:00
parent 70a52972b7
commit e07bf3a5c4
13 changed files with 439 additions and 745 deletions

3
.gitattributes vendored
View File

@@ -13904,7 +13904,6 @@ src/main/java/forge/gui/ForgeAction.java svneol=native#text/plain
src/main/java/forge/gui/GuiChoose.java -text src/main/java/forge/gui/GuiChoose.java -text
src/main/java/forge/gui/GuiDialog.java -text src/main/java/forge/gui/GuiDialog.java -text
src/main/java/forge/gui/GuiDisplayUtil.java svneol=native#text/plain src/main/java/forge/gui/GuiDisplayUtil.java svneol=native#text/plain
src/main/java/forge/gui/GuiImportPicture.java svneol=native#text/plain
src/main/java/forge/gui/GuiProgressBarWindow.java svneol=native#text/plain src/main/java/forge/gui/GuiProgressBarWindow.java svneol=native#text/plain
src/main/java/forge/gui/GuiUtils.java svneol=native#text/plain src/main/java/forge/gui/GuiUtils.java svneol=native#text/plain
src/main/java/forge/gui/InputProxy.java svneol=native#text/plain src/main/java/forge/gui/InputProxy.java svneol=native#text/plain
@@ -14176,9 +14175,7 @@ src/main/java/forge/util/Aggregates.java -text
src/main/java/forge/util/Base64Coder.java svneol=native#text/plain src/main/java/forge/util/Base64Coder.java svneol=native#text/plain
src/main/java/forge/util/BinaryUtil.java -text src/main/java/forge/util/BinaryUtil.java -text
src/main/java/forge/util/ComparableOp.java -text src/main/java/forge/util/ComparableOp.java -text
src/main/java/forge/util/CopyFiles.java svneol=native#text/plain
src/main/java/forge/util/Expressions.java -text src/main/java/forge/util/Expressions.java -text
src/main/java/forge/util/FileFinder.java svneol=native#text/plain
src/main/java/forge/util/FileSection.java -text src/main/java/forge/util/FileSection.java -text
src/main/java/forge/util/FileSectionManual.java -text src/main/java/forge/util/FileSectionManual.java -text
src/main/java/forge/util/FileUtil.java svneol=native#text/plain src/main/java/forge/util/FileUtil.java svneol=native#text/plain

View File

@@ -0,0 +1,366 @@
/*
* Forge: Play Magic: the Gathering.
* Copyright (c) 2013 Forge Team
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package forge.gui;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.channels.FileChannel;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.JScrollPane;
import javax.swing.ScrollPaneConstants;
import javax.swing.SwingUtilities;
import javax.swing.SwingWorker;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import net.miginfocom.swing.MigLayout;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.Pair;
import forge.gui.toolbox.FButton;
import forge.gui.toolbox.FCheckBox;
import forge.gui.toolbox.FLabel;
import forge.gui.toolbox.FOverlay;
import forge.gui.toolbox.FPanel;
import forge.gui.toolbox.FSkin;
import forge.gui.toolbox.FTextArea;
import forge.gui.toolbox.FTextField;
import forge.properties.NewConstants;
public class DialogMigrateProfile {
private final Runnable _onImportDone;
private final FButton _btnStart;
private final JPanel _selectionPanel;
private volatile boolean _cancel;
public DialogMigrateProfile(String srcDir, boolean showMigrationBlurb, final Runnable onImportDone) {
FPanel p = new FPanel(new MigLayout("insets dialog, gap 0, center, wrap"));
p.setOpaque(false);
p.setBackgroundTexture(FSkin.getIcon(FSkin.Backgrounds.BG_TEXTURE));
// header
p.add(new FLabel.Builder().text("Migrate profile data (in progress: not yet functional)").fontSize(15).build(), "center");
if (showMigrationBlurb) {
FPanel blurbPanel = new FPanel(new MigLayout("insets dialog, gap 10, center, wrap"));
blurbPanel.setOpaque(false);
blurbPanel.add(new FLabel.Builder().text("<html><b>What's this?</b></html>").build(), "growx");
blurbPanel.add(new FLabel.Builder().text(
"<html>Over the last several years, people have had to jump through a lot of hoops to" +
" update to the most recent version. We hope to reduce this workload to a point where a new" +
" user will find that it is fairly painless to update. In order to make this happen, Forge" +
" has changed where it stores your data so that it is outside of the program installation directory." +
" This way, when you upgrade, you will no longer need to import your data every time to get things" +
" working. There are other benefits to having user data separate from program data, too, and it" +
" lays the groundwork for some cool new features.</html>").build());
blurbPanel.add(new FLabel.Builder().text("<html><b>So where's my data going?</b></html>").build(), "growx");
blurbPanel.add(new FLabel.Builder().text(
"<html>Forge will now store your data in the same place as other applications on your system." +
" Specifically, your personal data, like decks, quest progress, and program preferences will be" +
" stored in <b>" + NewConstants.USER_DIR + "</b> and all downloaded content, such as card pictures," +
" skins, and quest world prices will be under <b>" + NewConstants.CACHE_DIR + "</b>. If, for whatever" +
" reason, you need to set different paths, cancel out of this dialog, exit Forge, and find the <b>" +
NewConstants.PROFILE_TEMPLATE_FILE + "</b> file in the program installation directory. Copy or rename" +
" it to <b>" + NewConstants.PROFILE_FILE + "</b> and edit the paths inside it. Then restart Forge and use" +
" this dialog to move your data to the paths that you set. Keep in mind that if you install a future" +
" version of Forge into a different directory, you'll need to copy this file over so Forge will know" +
" where to find your data.</html>").build());
blurbPanel.add(new FLabel.Builder().text(
"<html><b>Remember, your data won't be available until you complete this step!</b></html>").build(), "growx");
p.add(blurbPanel, "gap 10 10 20 20");
}
// import source widgets
JPanel importSourcePanel = new JPanel(new MigLayout("insets 0, gap 5"));
importSourcePanel.setOpaque(false);
importSourcePanel.add(new FLabel.Builder().text("Import from:").build());
boolean emptySrcDir = StringUtils.isEmpty(srcDir);
FTextField txfSrc = new FTextField.Builder().readonly(!emptySrcDir).build();
importSourcePanel.add(txfSrc, "gap 5, pushx");
if (!emptySrcDir) {
File srcDirFile = new File(srcDir);
txfSrc.setText(srcDirFile.getAbsolutePath());
}
importSourcePanel.add(new FLabel.ButtonBuilder().text("Choose directory...").enabled(emptySrcDir).build(), "h pref+8!, w pref+12!");
p.add(importSourcePanel, "growx");
// prepare import selection panel
_selectionPanel = new JPanel();
_selectionPanel.setOpaque(false);
p.add(_selectionPanel, "growx");
// action button widgets
final Runnable cleanup = new Runnable() {
@Override public void run() { SOverlayUtils.hideOverlay(); }
};
_btnStart = new FButton("Start import");
_btnStart.setEnabled(false);
final FButton btnCancel = new FButton("Cancel");
btnCancel.addActionListener(new ActionListener() {
@Override public void actionPerformed(ActionEvent e) { _cancel = true; cleanup.run(); }
});
_onImportDone = new Runnable() {
@Override public void run() {
cleanup.run();
if (null != onImportDone) {
onImportDone.run();
}
}
};
JPanel southPanel = new JPanel(new MigLayout("gap 20, ax center"));
southPanel.setOpaque(false);
southPanel.add(_btnStart, "center, w 40%, h pref+12!");
southPanel.add(btnCancel, "center, w 40%, h pref+12!");
p.add(southPanel, "dock south");
JPanel overlay = FOverlay.SINGLETON_INSTANCE.getPanel();
overlay.setLayout(new MigLayout("insets 0, gap 0, wrap, ax center, ay center"));
overlay.add(p, "w 700!");
SOverlayUtils.showOverlay();
// focus cancel button
SwingUtilities.invokeLater(new Runnable() {
@Override public void run() { btnCancel.requestFocusInWindow(); }
});
_AnalyzerUpdater analyzer = new _AnalyzerUpdater(!emptySrcDir);
analyzer.execute();
}
private enum OpType {
CONSTRUCTED_DECK,
UNKNOWN_DECK,
GAUNTLET_DATA,
QUEST_DATA,
PREFERENCE_FILE
}
private class _AnalyzerUpdater extends SwingWorker<Void, Void> {
private final Map<OpType, Pair<FCheckBox, ? extends Set<Pair<File, File>>>> _selections =
new HashMap<DialogMigrateProfile.OpType, Pair<FCheckBox, ? extends Set<Pair<File, File>>>>();
private final FCheckBox _moveCheckbox;
private final FTextArea _operationLog;
private final JProgressBar _progressBar;
public _AnalyzerUpdater(boolean forced) {
_selectionPanel.removeAll();
_selectionPanel.setLayout(new MigLayout("insets 0, gap 5, wrap"));
ChangeListener changeListener = new ChangeListener() {
@Override public void stateChanged(ChangeEvent arg0) { _updateUI(); }
};
// add known deck checkboxes
JPanel knownDeckPanel = new JPanel(new MigLayout("insets 0, gap 5, wrap"));
knownDeckPanel.setOpaque(false);
knownDeckPanel.add(new FLabel.Builder().text("Decks").build());
FCheckBox constructed = new FCheckBox();
constructed.setName("Constructed decks");
constructed.addChangeListener(changeListener);
_selections.put(OpType.CONSTRUCTED_DECK, Pair.of(constructed, new HashSet<Pair<File, File>>()));
// add unknown deck combobox
// add other data elements (gauntlets, quest data)
// add move/copy checkbox
_moveCheckbox = new FCheckBox("move files");
_moveCheckbox.setSelected(true);
_moveCheckbox.setEnabled(!forced);
_moveCheckbox.addChangeListener(changeListener);
_selectionPanel.add(_moveCheckbox);
// add operation summary textfield
_operationLog = new FTextArea();
_operationLog.setFocusable(true);
JScrollPane scroller = new JScrollPane(_operationLog);
scroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
_selectionPanel.add(scroller, "w 100%!, h 10%!");
// add progress bar
_progressBar = new JProgressBar();
_progressBar.setIndeterminate(true);
_progressBar.setString("Analyzing source directory...");
_progressBar.setStringPainted(true);
_selectionPanel.add(_progressBar, "w 100%!");
}
private void _updateUI() {
// set operation summary
StringBuilder log = new StringBuilder();
int totalOps = 0;
for (Pair<FCheckBox, ? extends Set<Pair<File, File>>> selection : _selections.values()) {
FCheckBox cb = selection.getLeft();
Set<Pair<File, File>> ops = selection.getRight();
if (cb.isSelected()) {
totalOps += ops.size();
}
// update checkbox text with new totals
cb.setText(String.format("%s (%d)", cb.getName(), ops.size()));
}
log.append(_moveCheckbox.isSelected() ? "Moving" : "Copying");
log.append(" ").append(totalOps).append(" files\n\n");
for (Pair<FCheckBox, ? extends Set<Pair<File, File>>> selection : _selections.values()) {
if (selection.getLeft().isSelected()) {
for (Pair<File, File> op : selection.getRight()) {
log.append(String.format("%s -> %s\n",
op.getLeft().getAbsolutePath(), op.getRight().getAbsolutePath()));
}
}
}
_operationLog.setText(log.toString());
}
private void _disableAll() {
_moveCheckbox.setEnabled(false);
}
@Override
protected Void doInBackground() throws Exception {
// TODO: analysis
// ensure we ignore data that is already in the destination directory
return null;
}
@Override
protected void done() {
if (_cancel) { return; }
_btnStart.addActionListener(new ActionListener() {
@Override public void actionPerformed(ActionEvent arg0) {
_btnStart.removeActionListener(this);
_btnStart.setEnabled(false);
_disableAll();
_Importer importer = new _Importer(_selections, _operationLog, _progressBar, _moveCheckbox.isSelected());
importer.execute();
}
});
_btnStart.setEnabled(true);
}
}
private class _Importer extends SwingWorker<Void, Void> {
private final List<Pair<File, File>> _operations;
private final FTextArea _operationLog;
private final JProgressBar _progressBar;
private final boolean _move;
public _Importer(Map<OpType, Pair<FCheckBox, ? extends Set<Pair<File, File>>>> selections,
FTextArea operationLog, JProgressBar progressBar, boolean move) {
_operationLog = operationLog;
_progressBar = progressBar;
_move = move;
int totalOps = 0;
for (Pair<FCheckBox, ? extends Set<Pair<File, File>>> selection : selections.values()) {
if (selection.getLeft().isSelected()) {
totalOps += selection.getRight().size();
}
}
_operations = new ArrayList<Pair<File, File>>(totalOps);
for (Pair<FCheckBox, ? extends Set<Pair<File, File>>> selection : selections.values()) {
if (selection.getLeft().isSelected()) {
_operations.addAll(selection.getRight());
}
}
}
@Override
protected Void doInBackground() throws Exception {
_operationLog.setText("");
// determine total number of operations and set progress bar bounds
_progressBar.setString(_move ? "Moving files" : "Copying files");
_progressBar.setMinimum(0);
_progressBar.setMaximum(_operations.size());
_progressBar.setIndeterminate(false);
// assumes all destination directories have been created
int numOps = 0;
for (Pair<File, File> op : _operations) {
_progressBar.setValue(++numOps);
File srcFile = op.getLeft();
File destFile = op.getRight();
try {
_copyFile(srcFile, destFile);
if (_move) {
srcFile.delete();
}
// this operation is thread safe
_operationLog.append(String.format("%s %s -> %s\n",
_move ? "Moved" : "Copied",
srcFile.getAbsolutePath(), destFile.getAbsolutePath()));
} catch (IOException e) {
_operationLog.append(String.format("Failed to %s %s -> %s (%s)\n",
_move ? "move" : "copy",
srcFile.getAbsolutePath(), destFile.getAbsolutePath(),
e.getMessage()));
}
}
return null;
}
@Override
protected void done() {
_onImportDone.run();
}
private void _copyFile(File srcFile, File destFile) throws IOException {
if(!destFile.exists()) {
destFile.createNewFile();
}
FileChannel src = null;
FileChannel dest = null;
try {
src = new FileInputStream(srcFile).getChannel();
dest = new FileOutputStream(destFile).getChannel();
dest.transferFrom(src, 0, src.size());
} finally {
if (src != null) { src.close(); }
if (dest != null) { dest.close(); }
}
}
}
}

View File

@@ -1,352 +0,0 @@
/*
* Forge: Play Magic: the Gathering.
* Copyright (C) 2011 Forge Team
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package forge.gui;
import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.Rectangle;
import java.awt.event.MouseEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JDialog;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.event.MouseInputAdapter;
import forge.properties.NewConstants;
import forge.util.CopyFiles;
import forge.util.FileFinder;
@SuppressWarnings("serial")
public class GuiImportPicture extends JDialog {
private JPanel jContentPane = null;
private JLabel jLabel = null;
private JLabel jLabel1 = null;
private JLabel jLabelSource = null;
private JButton jButtonSource = null;
private JPanel jPanel = null;
private JCheckBox jCheckBox = null;
private JButton jButtonStart = null;
private JLabel jLabelHDDFree = null;
private JLabel jLabelNeedSpace = null;
private JLabel jLabelTotalFiles = null;
private List<File> listFiles;
private ArrayList<File> fileCopyList;
private long freeSpaceM;
private int filesForCopy;
private String oldText;
private JProgressBar jProgressBar = null;
public GuiImportPicture(final JFrame owner) {
super(owner, "Import Pictures", true);
setSize(400, 295);
setResizable(false);
setLocationRelativeTo(null);
setContentPane(getJContentPane());
}
private JPanel getJContentPane() {
this.jLabelTotalFiles = new JLabel();
this.jLabelTotalFiles.setBounds(new Rectangle(15, 180, 248, 16));
this.jLabelTotalFiles.setText("Total files for copying: Unknown.");
this.jLabelNeedSpace = new JLabel();
this.jLabelNeedSpace.setBounds(new Rectangle(15, 150, 177, 16));
this.jLabelNeedSpace.setText("HDD Need Space: Unknown.");
this.jLabelHDDFree = new JLabel();
this.jLabelHDDFree.setBounds(new Rectangle(15, 119, 177, 16));
final File file = new File(NewConstants.CACHE_CARD_PICS_DIR);
final long freeSpace = file.getFreeSpace();
this.freeSpaceM = freeSpace / 1024 / 1024;
// MiB here is not a typo; it is the unit for megabytes calculated
// by powers of 1024 instead of 1000.
this.jLabelHDDFree.setText("HDD Free Space: " + this.freeSpaceM + " MiB");
this.jLabelSource = new JLabel();
this.jLabelSource.setBounds(new Rectangle(63, 45, 267, 17));
this.jLabelSource.setBorder(BorderFactory.createLineBorder(Color.black, 1));
this.jLabelSource.setText("");
this.jLabel1 = new JLabel();
this.jLabel1.setBounds(new Rectangle(16, 45, 48, 17));
this.jLabel1.setText("Source:");
this.jLabel = new JLabel();
this.jLabel.setBounds(new Rectangle(15, 15, 360, 19));
this.jLabel.setText("Please select source directory:");
this.jContentPane = new JPanel();
this.jContentPane.setLayout(null);
this.jContentPane.add(this.jLabel, null);
this.jContentPane.add(this.jLabel1, null);
this.jContentPane.add(this.jLabelSource, null);
this.jContentPane.add(this.getJButtonSource(), null);
this.jContentPane.add(this.getJPanel(), null);
this.jContentPane.add(this.getJButtonStart(), null);
this.jContentPane.add(this.jLabelHDDFree, null);
this.jContentPane.add(this.jLabelNeedSpace, null);
this.jContentPane.add(this.jLabelTotalFiles, null);
this.jContentPane.add(this.getJProgressBar(), null);
return this.jContentPane;
}
private JButton getJButtonSource() {
if (this.jButtonSource == null) {
this.jButtonSource = new JButton();
this.jButtonSource.setBounds(new Rectangle(329, 45, 47, 17));
this.jButtonSource.setText("...");
this.jButtonSource.addMouseListener(new java.awt.event.MouseAdapter() {
@Override
public void mouseClicked(final java.awt.event.MouseEvent e) {
JFileChooser chooser;
String choosertitle;
choosertitle = "Select source directory.";
chooser = new JFileChooser();
chooser.setCurrentDirectory(new java.io.File("."));
chooser.setDialogTitle(choosertitle);
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
chooser.setAcceptAllFileFilterUsed(false);
GuiImportPicture.this.oldText = GuiImportPicture.this.jLabelSource.getText();
GuiImportPicture.this.jLabelSource.setText("Please wait...");
if (chooser.showOpenDialog(GuiImportPicture.this) == JFileChooser.APPROVE_OPTION) {
final FileFinder ff = new FileFinder();
try {
GuiImportPicture.this.listFiles = ff.findFiles(chooser.getSelectedFile().toString(),
".+\\.jpg");
} catch (final Exception e2) {
e2.printStackTrace();
}
GuiImportPicture.this.jLabelSource.setText(chooser.getSelectedFile().toString());
if (GuiImportPicture.this.jCheckBox.isSelected()) {
GuiImportPicture.this.filesForCopy = ff.getFilesNumber();
GuiImportPicture.this.jLabelTotalFiles.setText("Total files for copying: "
+ GuiImportPicture.this.filesForCopy);
GuiImportPicture.this.jLabelNeedSpace.setText("HDD Need Space: "
+ (ff.getDirectorySize() / 1024 / 1024) + " MB");
GuiImportPicture.this.jProgressBar.setValue(0);
if ((GuiImportPicture.this.freeSpaceM > (ff.getDirectorySize() / 1024 / 1024))
&& (GuiImportPicture.this.filesForCopy > 0)) {
GuiImportPicture.this.jButtonStart.setEnabled(true);
}
} else {
String fName;
int start;
long filesToCopySize;
GuiImportPicture.this.filesForCopy = 0;
filesToCopySize = 0;
GuiImportPicture.this.fileCopyList = new ArrayList<File>();
for (int i = 0; i < GuiImportPicture.this.listFiles.size(); i++) {
fName = GuiImportPicture.this.listFiles.get(i).getName();
start = fName.indexOf("full");
fName = fName.substring(0, start - 1) + fName.substring(start + 4, fName.length() - 4);
//fName = GuiDisplayUtil.cleanString(fName) + ".jpg";
final File file = new File(NewConstants.CACHE_CARD_PICS_DIR, fName);
if (!file.exists()) {
GuiImportPicture.this.filesForCopy = GuiImportPicture.this.filesForCopy + 1;
filesToCopySize = filesToCopySize + GuiImportPicture.this.listFiles.get(i).length();
GuiImportPicture.this.fileCopyList.add(GuiImportPicture.this.listFiles.get(i));
}
}
GuiImportPicture.this.jLabelTotalFiles.setText("Total files for copying: "
+ GuiImportPicture.this.filesForCopy);
GuiImportPicture.this.jLabelNeedSpace.setText("HDD Need Space: "
+ (filesToCopySize / 1024 / 1024) + " MB");
GuiImportPicture.this.jProgressBar.setValue(0);
if ((GuiImportPicture.this.freeSpaceM > (filesToCopySize / 1024 / 1024))
&& (GuiImportPicture.this.filesForCopy > 0)) {
GuiImportPicture.this.jButtonStart.setEnabled(true);
}
}
} else {
if (GuiImportPicture.this.oldText.equals("")) {
GuiImportPicture.this.jLabelSource.setText("");
} else {
GuiImportPicture.this.jLabelSource.setText(GuiImportPicture.this.oldText);
}
}
}
});
}
return this.jButtonSource;
}
private JPanel getJPanel() {
if (this.jPanel == null) {
final GridBagConstraints gridBagConstraints = new GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridwidth = 2;
gridBagConstraints.insets = new Insets(0, 0, 0, 120);
gridBagConstraints.gridy = 0;
this.jPanel = new JPanel();
this.jPanel.setLayout(new GridBagLayout());
this.jPanel.setBounds(new Rectangle(15, 74, 362, 31));
this.jPanel.setBorder(BorderFactory.createLineBorder(Color.black, 1));
this.jPanel.add(this.getJCheckBox(), gridBagConstraints);
}
return this.jPanel;
}
private JCheckBox getJCheckBox() {
if (this.jCheckBox == null) {
this.jCheckBox = new JCheckBox();
this.jCheckBox.setSelected(false);
this.jCheckBox.setText("Overwriting picture in resource folder");
this.jCheckBox.addMouseListener(new java.awt.event.MouseAdapter() {
@Override
public void mouseClicked(final java.awt.event.MouseEvent e) {
GuiImportPicture.this.jButtonStart.setEnabled(false);
if (GuiImportPicture.this.jLabelSource.getText().equals("")) {
final FileFinder ff = new FileFinder();
try {
GuiImportPicture.this.listFiles = ff.findFiles(GuiImportPicture.this.jLabelSource.getText()
.toString(), ".+\\.jpg");
} catch (final Exception e2) {
e2.printStackTrace();
}
if (GuiImportPicture.this.jCheckBox.isSelected()) {
GuiImportPicture.this.filesForCopy = ff.getFilesNumber();
GuiImportPicture.this.jLabelTotalFiles.setText("Total files for copying: "
+ GuiImportPicture.this.filesForCopy);
GuiImportPicture.this.jLabelNeedSpace.setText("HDD Need Space: "
+ (ff.getDirectorySize() / 1024 / 1024) + " MB");
GuiImportPicture.this.jProgressBar.setValue(0);
if ((GuiImportPicture.this.freeSpaceM > (ff.getDirectorySize() / 1024 / 1024))
&& (GuiImportPicture.this.filesForCopy > 0)) {
GuiImportPicture.this.jButtonStart.setEnabled(true);
}
} else {
String fName;
int start;
long filesToCopySize;
GuiImportPicture.this.filesForCopy = 0;
filesToCopySize = 0;
GuiImportPicture.this.fileCopyList = new ArrayList<File>();
for (int i = 0; i < GuiImportPicture.this.listFiles.size(); i++) {
fName = GuiImportPicture.this.listFiles.get(i).getName();
start = fName.indexOf("full");
fName = fName.substring(0, start - 1) + fName.substring(start + 4, fName.length() - 4);
//fName = GuiDisplayUtil.cleanString(fName) + ".jpg";
final File file = new File(NewConstants.CACHE_CARD_PICS_DIR, fName);
if (!file.exists()) {
GuiImportPicture.this.filesForCopy = GuiImportPicture.this.filesForCopy + 1;
filesToCopySize = filesToCopySize + GuiImportPicture.this.listFiles.get(i).length();
GuiImportPicture.this.fileCopyList.add(GuiImportPicture.this.listFiles.get(i));
}
}
GuiImportPicture.this.jLabelTotalFiles.setText("Total files for copying: "
+ GuiImportPicture.this.filesForCopy);
GuiImportPicture.this.jLabelNeedSpace.setText("HDD Need Space: "
+ (filesToCopySize / 1024 / 1024) + " MB");
GuiImportPicture.this.jProgressBar.setValue(0);
if ((GuiImportPicture.this.freeSpaceM > (filesToCopySize / 1024 / 1024))
&& (GuiImportPicture.this.filesForCopy > 0)) {
GuiImportPicture.this.jButtonStart.setEnabled(true);
}
}
}
}
});
}
return this.jCheckBox;
}
private JButton getJButtonStart() {
if (this.jButtonStart == null) {
this.jButtonStart = new JButton();
this.jButtonStart.setEnabled(false);
this.jButtonStart.setBounds(new Rectangle(136, 239, 123, 17));
this.jButtonStart.setText("Import");
// jButtonStart.addMouseListener(new CustomListener());
this.jButtonStart.addMouseListener(new MouseInputAdapter() {
@Override
public void mouseClicked(final MouseEvent e) {
if (GuiImportPicture.this.jButtonStart.isEnabled()) {
GuiImportPicture.this.jLabelTotalFiles.setText("Please wait while all files are copying.");
if (GuiImportPicture.this.jCheckBox.isSelected()) {
GuiImportPicture.this.jButtonStart.setEnabled(false);
GuiImportPicture.this.jCheckBox.setEnabled(false);
GuiImportPicture.this.jButtonSource.setEnabled(false);
final CopyFiles cFiles = new CopyFiles(GuiImportPicture.this.listFiles,
GuiImportPicture.this.jLabelTotalFiles, GuiImportPicture.this.jProgressBar,
GuiImportPicture.this.jCheckBox, GuiImportPicture.this.jButtonSource);
cFiles.addPropertyChangeListener(new PropertyChangeListener() {
@Override
public void propertyChange(final PropertyChangeEvent evt) {
if ("progress".equals(evt.getPropertyName())) {
GuiImportPicture.this.jProgressBar.setValue((Integer) evt.getNewValue());
}
}
});
cFiles.execute();
} else {
GuiImportPicture.this.jButtonStart.setEnabled(false);
GuiImportPicture.this.jCheckBox.setEnabled(false);
GuiImportPicture.this.jButtonSource.setEnabled(false);
final CopyFiles cFiles = new CopyFiles(GuiImportPicture.this.fileCopyList,
GuiImportPicture.this.jLabelTotalFiles, GuiImportPicture.this.jProgressBar,
GuiImportPicture.this.jCheckBox, GuiImportPicture.this.jButtonSource);
cFiles.addPropertyChangeListener(new PropertyChangeListener() {
@Override
public void propertyChange(final PropertyChangeEvent evt) {
if ("progress".equals(evt.getPropertyName())) {
GuiImportPicture.this.jProgressBar.setValue((Integer) evt.getNewValue());
}
}
});
}
}
}
});
}
return this.jButtonStart;
}
private JProgressBar getJProgressBar() {
if (this.jProgressBar == null) {
this.jProgressBar = new JProgressBar();
this.jProgressBar.setBounds(new Rectangle(15, 210, 363, 18));
this.jProgressBar.setMinimum(0);
this.jProgressBar.setMaximum(100);
}
return this.jProgressBar;
}
}

View File

@@ -76,7 +76,7 @@ public enum VCurrentDeck implements IVDoc<CCurrentDeck>, ITableContainer {
private final JLabel btnPrintProxies = new FLabel.Builder() private final JLabel btnPrintProxies = new FLabel.Builder()
.fontSize(14) .fontSize(14)
.tooltip("Print Proxies") .tooltip("Print to HTML file")
.iconInBackground(true) .iconInBackground(true)
.iconAlignX(SwingConstants.CENTER) .iconAlignX(SwingConstants.CENTER)
.icon(FSkin.getIcon(FSkin.InterfaceIcons.ICO_PRINT)) .icon(FSkin.getIcon(FSkin.InterfaceIcons.ICO_PRINT))

View File

@@ -4,7 +4,7 @@ import javax.swing.SwingUtilities;
import forge.Command; import forge.Command;
import forge.error.BugReporter; import forge.error.BugReporter;
import forge.gui.GuiImportPicture; import forge.gui.DialogMigrateProfile;
import forge.gui.download.GuiDownloadPicturesLQ; import forge.gui.download.GuiDownloadPicturesLQ;
import forge.gui.download.GuiDownloadPrices; import forge.gui.download.GuiDownloadPrices;
import forge.gui.download.GuiDownloadQuestImages; import forge.gui.download.GuiDownloadQuestImages;
@@ -33,19 +33,10 @@ public enum CSubmenuDownloaders implements ICDoc {
public void execute() { new GuiDownloadPrices(); } }; public void execute() { new GuiDownloadPrices(); } };
private final Command cmdHowToPlay = new Command() { @Override private final Command cmdHowToPlay = new Command() { @Override
public void execute() { VSubmenuDownloaders.SINGLETON_INSTANCE.showHowToPlay(); } }; public void execute() { VSubmenuDownloaders.SINGLETON_INSTANCE.showHowToPlay(); } };
private final Command cmdImportPictures = new Command() { @Override
private final Command cmdImportPictures = new Command() { public void execute() { new DialogMigrateProfile(null, false, null); } };
@Override
public void execute() {
final GuiImportPicture ip = new GuiImportPicture(null);
ip.setVisible(true);
}
};
private final Command cmdReportBug = new Command() { @Override private final Command cmdReportBug = new Command() { @Override
public void execute() { public void execute() { BugReporter.reportBug(null); }
BugReporter.reportBug(null);
}
}; };
/* (non-Javadoc) /* (non-Javadoc)

View File

@@ -141,7 +141,7 @@ public enum VSubmenuDownloaders implements IVSubmenu<CSubmenuDownloaders> {
public void actionPerformed(final ActionEvent arg0) { SOverlayUtils.hideOverlay(); } }); public void actionPerformed(final ActionEvent arg0) { SOverlayUtils.hideOverlay(); } });
p.add(c, "w 500!"); p.add(c, "w 500!");
p.add(btnClose, "w 200!, h pref+12, center, gaptop 30"); p.add(btnClose, "w 200!, h pref+12!, center, gaptop 30");
overlay.add(p, "gap 0 0 10% 10%"); overlay.add(p, "gap 0 0 10% 10%");
SOverlayUtils.showOverlay(); SOverlayUtils.showOverlay();

View File

@@ -73,6 +73,7 @@ public class FLabel extends JLabel implements ILocalRepaint {
private boolean bldIconScaleAuto = true; private boolean bldIconScaleAuto = true;
protected boolean bldReactOnMouseDown = false; protected boolean bldReactOnMouseDown = false;
private boolean bldUseSkinColors = true; private boolean bldUseSkinColors = true;
private boolean bldEnabled = true;
protected String bldText, bldToolTip; protected String bldText, bldToolTip;
private ImageIcon bldIcon; private ImageIcon bldIcon;
@@ -141,6 +142,10 @@ public class FLabel extends JLabel implements ILocalRepaint {
* @return {@link forge.gui.toolbox.Builder} */ * @return {@link forge.gui.toolbox.Builder} */
public Builder fontStyle(final int i0) { this.bldFontStyle = i0; return this; } public Builder fontStyle(final int i0) { this.bldFontStyle = i0; return this; }
/**@param b0 &emsp; boolean
* @return {@link forge.gui.toolbox.Builder} */
public Builder enabled(final boolean b0) { this.bldEnabled = b0; return this; }
/**@param b0 &emsp; boolean /**@param b0 &emsp; boolean
* @return {@link forge.gui.toolbox.Builder} */ * @return {@link forge.gui.toolbox.Builder} */
public Builder iconScaleAuto(final boolean b0) { this.bldIconScaleAuto = b0; return this; } public Builder iconScaleAuto(final boolean b0) { this.bldIconScaleAuto = b0; return this; }
@@ -193,6 +198,7 @@ public class FLabel extends JLabel implements ILocalRepaint {
this.iconAlignX = b0.bldIconAlignX; this.iconAlignX = b0.bldIconAlignX;
this.iconInsets = b0.bldIconInsets; this.iconInsets = b0.bldIconInsets;
this.setEnabled(b0.bldEnabled);
this.setFontStyle(b0.bldFontStyle); this.setFontStyle(b0.bldFontStyle);
this.setFontSize(b0.bldFontSize); this.setFontSize(b0.bldFontSize);
this.setUnhoveredAlpha(b0.bldUnhoveredAlpha); this.setUnhoveredAlpha(b0.bldUnhoveredAlpha);

View File

@@ -100,7 +100,7 @@ public enum FModel {
* if we could not find or write to the log file. * if we could not find or write to the log file.
*/ */
private FModel() { private FModel() {
// Fire up log file and exception handling // install our error reporter
ExceptionHandler.registerErrorHandling(); ExceptionHandler.registerErrorHandling();
// create profile dirs if they don't already exist // create profile dirs if they don't already exist
@@ -115,6 +115,7 @@ public enum FModel {
} }
} }
// initialize log file
final File logFile = new File(NewConstants.LOG_FILE); final File logFile = new File(NewConstants.LOG_FILE);
final boolean deleteSucceeded = logFile.delete(); final boolean deleteSucceeded = logFile.delete();

View File

@@ -59,13 +59,17 @@ public class ForgeProfileProperties {
private static String _getDir(Properties props, String propertyKey, String defaultVal) { private static String _getDir(Properties props, String propertyKey, String defaultVal) {
String retDir = props.getProperty(propertyKey, defaultVal).trim(); String retDir = props.getProperty(propertyKey, defaultVal).trim();
if (retDir.isEmpty()) { if (retDir.isEmpty()) {
// use default if dir is "defined" as an empty or whitespace string in the properties file // use default if dir is "defined" as an empty string in the properties file
return defaultVal; retDir = defaultVal;
} }
if (retDir.endsWith("/") || retDir.endsWith(File.pathSeparator)) {
// canonicalize
retDir = new File(retDir).getAbsolutePath();
if (retDir.endsWith(File.pathSeparator)) {
return retDir; return retDir;
} }
return retDir + "/"; return retDir + File.pathSeparator;
} }
// returns a pair <userDir, cacheDir> // returns a pair <userDir, cacheDir>

View File

@@ -47,21 +47,21 @@ public final class NewConstants {
public static final String DEFAULT_CHALLENGES_DIR = _QUEST_DIR + "challenges"; public static final String DEFAULT_CHALLENGES_DIR = _QUEST_DIR + "challenges";
// data tree roots // data tree roots
private static final String _USER_DIR; public static final String USER_DIR;
private static final String _CACHE_DIR; public static final String CACHE_DIR;
public static final String CACHE_CARD_PICS_DIR; public static final String CACHE_CARD_PICS_DIR;
static { static {
ForgeProfileProperties profileProps = new ForgeProfileProperties(PROFILE_FILE); ForgeProfileProperties profileProps = new ForgeProfileProperties(PROFILE_FILE);
_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;
} }
// data that is only in the profile dirs // data that is only in the profile dirs
private static final String _USER_QUEST_DIR = _USER_DIR + "quest/"; private static final String _USER_QUEST_DIR = USER_DIR + "quest/";
private static final String _USER_PREFS_DIR = _USER_DIR + "preferences/"; private static final String _USER_PREFS_DIR = USER_DIR + "preferences/";
public static final String LOG_FILE = _USER_DIR + "forge.log"; public static final String LOG_FILE = USER_DIR + "forge.log";
public static final String DECK_BASE_DIR = _USER_DIR + "decks/"; public static final String DECK_BASE_DIR = USER_DIR + "decks/";
public static final String DECK_CONSTRUCTED_DIR = DECK_BASE_DIR + "constructed/"; public static final String DECK_CONSTRUCTED_DIR = DECK_BASE_DIR + "constructed/";
public static final String DECK_DRAFT_DIR = DECK_BASE_DIR + "draft/"; public static final String DECK_DRAFT_DIR = DECK_BASE_DIR + "draft/";
public static final String DECK_SEALED_DIR = DECK_BASE_DIR + "sealed/"; public static final String DECK_SEALED_DIR = DECK_BASE_DIR + "sealed/";
@@ -80,8 +80,8 @@ public final class NewConstants {
public static final FileLocation EDITOR_LAYOUT_FILE = new FileLocation(_DEFAULTS_DIR, _USER_PREFS_DIR, "editor.xml"); public static final FileLocation EDITOR_LAYOUT_FILE = new FileLocation(_DEFAULTS_DIR, _USER_PREFS_DIR, "editor.xml");
// data that is only in the cached dir // data that is only in the cached dir
private static final String _DB_DIR = _CACHE_DIR + "db/"; private static final String _DB_DIR = CACHE_DIR + "db/";
private static final String _PICS_DIR = _CACHE_DIR + "pics/"; private static final String _PICS_DIR = CACHE_DIR + "pics/";
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_BOOSTER_PICS_DIR = _PICS_DIR + "boosters/"; public static final String CACHE_BOOSTER_PICS_DIR = _PICS_DIR + "boosters/";
@@ -92,6 +92,9 @@ public final class NewConstants {
public static final String CACHE_MORPH_IMAGE_FILE = "morph"; public static final String CACHE_MORPH_IMAGE_FILE = "morph";
public static final String[] PROFILE_DIRS = { public static final String[] PROFILE_DIRS = {
USER_DIR,
CACHE_DIR,
CACHE_CARD_PICS_DIR,
_USER_PREFS_DIR, _USER_PREFS_DIR,
_DB_DIR, _DB_DIR,
DECK_CONSTRUCTED_DIR, DECK_CONSTRUCTED_DIR,
@@ -100,7 +103,6 @@ public final class NewConstants {
DECK_SCHEME_DIR, DECK_SCHEME_DIR,
DECK_PLANE_DIR, DECK_PLANE_DIR,
QUEST_SAVE_DIR, QUEST_SAVE_DIR,
CACHE_CARD_PICS_DIR,
CACHE_TOKEN_PICS_DIR, CACHE_TOKEN_PICS_DIR,
CACHE_ICON_PICS_DIR, CACHE_ICON_PICS_DIR,
CACHE_BOOSTER_PICS_DIR, CACHE_BOOSTER_PICS_DIR,

View File

@@ -1,137 +0,0 @@
/*
* Forge: Play Magic: the Gathering.
* Copyright (C) 2011 Forge Team
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package forge.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JProgressBar;
import javax.swing.SwingWorker;
import forge.properties.NewConstants;
/**
* <p>
* CopyFiles class.
* </p>
*
* @author Forge
* @version $Id$
*/
public class CopyFiles extends SwingWorker<Void, Integer> {
private final List<File> fileList;
/** The j lb. */
private final JLabel jLabel;
/** The j b. */
private final JProgressBar jProgressBar;
/** The j check. */
private final JCheckBox jCheck;
/** The j source. */
private final JButton jSource;
/** The count. */
private int count;
/**
* <p>
* Constructor for CopyFiles.
* </p>
*
* @param fileList
* a {@link java.util.List} object.
* @param jLabelTotalFiles
* a {@link javax.swing.JLabel} object.
* @param jProgressBar
* a {@link javax.swing.JProgressBar} object.
* @param jCheckBox
* a {@link javax.swing.JCheckBox} object.
* @param jButtonSource
* a {@link javax.swing.JButton} object.
*/
public CopyFiles(final List<File> fileList, final JLabel jLabelTotalFiles, final JProgressBar jProgressBar,
final JCheckBox jCheckBox, final JButton jButtonSource) {
this.fileList = fileList;
this.jLabel = jLabelTotalFiles;
this.jProgressBar = jProgressBar;
this.jCheck = jCheckBox;
this.jSource = jButtonSource;
}
/** {@inheritDoc} */
@Override
protected final Void doInBackground() {
for (int i = 0; i < this.fileList.size(); i++) {
this.publish();
String cName, name, source;
name = this.fileList.get(i).getName();
source = this.fileList.get(i).getAbsolutePath();
cName = name.substring(0, name.length() - 8);
//cName = GuiDisplayUtil.cleanString(cName) + ".jpg";
final File sourceFile = new File(source);
final File reciever = new File(NewConstants.CACHE_CARD_PICS_DIR, cName);
reciever.delete();
try {
reciever.createNewFile();
final FileOutputStream fos = new FileOutputStream(reciever);
final FileInputStream fis = new FileInputStream(sourceFile);
final byte[] buff = new byte[32 * 1024];
int length;
while (fis.available() > 0) {
length = fis.read(buff);
if (length > 0) {
fos.write(buff, 0, length);
}
}
fos.flush();
fis.close();
fos.close();
this.count = ((i * 100) / this.fileList.size()) + 1;
this.setProgress(this.count);
} catch (final IOException e1) {
e1.printStackTrace();
}
}
return null;
}
/** {@inheritDoc} */
@Override
protected final void done() {
this.jLabel.setText("All files were copied successfully.");
this.jProgressBar.setIndeterminate(false);
this.jCheck.setEnabled(true);
this.jSource.setEnabled(true);
}
}

View File

@@ -1,220 +0,0 @@
/*
* Forge: Play Magic: the Gathering.
* Copyright (C) 2011 Forge Team
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package forge.util;
import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* <p>
* FileFinder class.
* </p>
*
* @author Forge
* @version $Id$
*/
public class FileFinder {
private Pattern p = null;
private Matcher m = null;
private long totalLength = 0;
private int filesNumber = 0;
private long directoriesNumber = 0;
/** Constant <code>FILES=0</code>. */
private static final int FILES = 0;
/** Constant <code>DIRECTORIES=1</code>. */
private static final int DIRECTORIES = 1;
private ArrayList<String> fileNames;
private ArrayList<String> fName;
/**
* <p>
* Constructor for FileFinder.
* </p>
*/
public FileFinder() {
}
/**
* <p>
* findFiles.
* </p>
*
* @param startPath
* a {@link java.lang.String} object.
* @param mask
* a {@link java.lang.String} object.
* @return a {@link java.util.List} object.
* @throws Exception
* the exception
*/
public final List<File> findFiles(final String startPath, final String mask) throws Exception {
this.fileNames = new ArrayList<String>();
this.fName = new ArrayList<String>();
return this.findWithFull(startPath, mask, FileFinder.FILES);
}
/**
* <p>
* getDirectorySize.
* </p>
*
* @return a long.
*/
public final long getDirectorySize() {
return this.totalLength;
}
/**
* <p>
* Getter for the field <code>filesNumber</code>.
* </p>
*
* @return a int.
*/
public final int getFilesNumber() {
return this.filesNumber;
}
/**
* <p>
* Getter for the field <code>directoriesNumber</code>.
* </p>
*
* @return a long.
*/
public final long getDirectoriesNumber() {
return this.directoriesNumber;
}
/**
* <p>
* accept.
* </p>
*
* @param name
* a {@link java.lang.String} object.
* @return a boolean.
*/
private boolean accept(final String name) {
if (this.p == null) {
return true;
}
this.m = this.p.matcher(name);
return this.m.matches();
}
/**
* <p>
* findWithFull.
* </p>
*
* @param startPath
* a {@link java.lang.String} object.
* @param mask
* a {@link java.lang.String} object.
* @param objectType
* a int.
* @return a {@link java.util.List} object.
* @throws java.lang.Exception
* if any.
*/
private List<File> findWithFull(final String startPath, final String mask, final int objectType) throws Exception {
if ((startPath == null) || (mask == null)) {
throw new Exception("Error");
}
final File topDirectory = new File(startPath);
if (!topDirectory.exists()) {
throw new Exception("Error");
}
if (!mask.equals("")) {
this.p = Pattern.compile(mask, Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE);
}
this.filesNumber = 0;
this.directoriesNumber = 0;
this.totalLength = 0;
final ArrayList<File> res = new ArrayList<File>(100);
this.searchWithFull(topDirectory, res, objectType);
this.p = null;
return res;
}
/**
* <p>
* searchWithFull.
* </p>
*
* @param topDirectory
* a {@link java.io.File} object.
* @param res
* a {@link java.util.List} object.
* @param objectType
* a int.
*/
private void searchWithFull(final File topDirectory, final List<File> res, final int objectType) {
final File[] list = topDirectory.listFiles();
for (final File element : list) {
if (element.isDirectory()) {
if ((objectType != FileFinder.FILES) && this.accept(element.getName())) {
this.directoriesNumber++;
res.add(element);
}
this.searchWithFull(element, res, objectType);
} else {
if ((objectType != FileFinder.DIRECTORIES) && this.accept(element.getName())) {
if (element.getName().contains("full")) {
if (this.fileNames.size() == 0) {
this.fileNames.add(element.getName());
this.filesNumber++;
this.totalLength += element.length();
res.add(element);
}
this.fName.add(element.getName());
if (this.fileNames.size() >= 1) {
if (Collections.indexOfSubList(this.fileNames, this.fName) == -1) {
this.fileNames.add(element.getName());
this.filesNumber++;
this.totalLength += element.length();
res.add(element);
}
this.fName.remove(0);
}
}
}
}
}
}
}

View File

@@ -5,8 +5,11 @@ import java.awt.Color;
import java.awt.Dimension; import java.awt.Dimension;
import java.awt.Frame; import java.awt.Frame;
import java.awt.Graphics; import java.awt.Graphics;
import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set;
import javax.swing.JFrame; import javax.swing.JFrame;
import javax.swing.JLayeredPane; import javax.swing.JLayeredPane;
@@ -16,8 +19,12 @@ import javax.swing.border.EmptyBorder;
import javax.swing.border.LineBorder; import javax.swing.border.LineBorder;
import net.miginfocom.swing.MigLayout; import net.miginfocom.swing.MigLayout;
import com.google.common.collect.Lists;
import forge.Singletons; import forge.Singletons;
import forge.control.FControl; import forge.control.FControl;
import forge.gui.DialogMigrateProfile;
import forge.gui.deckeditor.VDeckEditorUI; import forge.gui.deckeditor.VDeckEditorUI;
import forge.gui.framework.DragCell; import forge.gui.framework.DragCell;
import forge.gui.framework.EDocID; import forge.gui.framework.EDocID;
@@ -29,6 +36,7 @@ import forge.gui.toolbox.FOverlay;
import forge.gui.toolbox.FPanel; import forge.gui.toolbox.FPanel;
import forge.gui.toolbox.FSkin; import forge.gui.toolbox.FSkin;
import forge.model.BuildInfo; import forge.model.BuildInfo;
import forge.properties.NewConstants;
/** */ /** */
public enum FView { public enum FView {
@@ -108,7 +116,6 @@ public enum FView {
// All is ready to go - fire up home screen and discard splash frame. // All is ready to go - fire up home screen and discard splash frame.
Singletons.getControl().changeState(FControl.Screens.HOME_SCREEN); Singletons.getControl().changeState(FControl.Screens.HOME_SCREEN);
//CMainMenu.SINGLETON_INSTANCE.selectPrevious();
FView.this.frmSplash.dispose(); FView.this.frmSplash.dispose();
FView.this.frmSplash = null; FView.this.frmSplash = null;
@@ -116,6 +123,35 @@ public enum FView {
// Allow OS to set location. Hopefully this doesn't cause issues // Allow OS to set location. Hopefully this doesn't cause issues
frmDocument.setLocationByPlatform(true); frmDocument.setLocationByPlatform(true);
frmDocument.setVisible(true); frmDocument.setVisible(true);
// remove this once our userbase has been migrated to the profile layout
{
// get profile directories -- if one of them is actually under the res directory, don't
// try to migrate it
Set<File> profileDirs = new HashSet<File>();
for (String dname : NewConstants.PROFILE_DIRS) {
profileDirs.add(new File(dname));
}
// check quickly whether we have any data to migrate
boolean hasData = false;
for (String resDir : Lists.newArrayList("decks", "gauntlet", "pics", "pics_product", "preferences", "quest/data")) {
File f = new File("res", resDir);
if (f.exists() && !profileDirs.contains(f)) {
System.out.println("pre-profile data found: " + f.getAbsolutePath());
hasData = true;
break;
}
}
if (hasData) {
new DialogMigrateProfile("res", true, new Runnable() {
@Override public void run() {
// TODO: reload appropriate data structures
}
});
}
}
} }
/** @return {@link forge.view.SplashFrame} */ /** @return {@link forge.view.SplashFrame} */