Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Donald Haase
Cockatrice
Commits
24aabc4c
Commit
24aabc4c
authored
Jul 07, 2015
by
Fabio Bas
Browse files
Oracle: download tokens; fix #915
parent
685aa99a
Changes
2
Show whitespace changes
Inline
Side-by-side
oracle/src/oraclewizard.cpp
View file @
24aabc4c
...
...
@@ -39,6 +39,8 @@
#define ALLSETS_URL "http://mtgjson.com/json/AllSets.json"
#endif
#define TOKENS_URL "https://raw.githubusercontent.com/Psithief/Cockatrice-tokens/master/tokens.xml"
OracleWizard
::
OracleWizard
(
QWidget
*
parent
)
:
QWizard
(
parent
)
...
...
@@ -57,6 +59,8 @@ OracleWizard::OracleWizard(QWidget *parent)
addPage
(
new
IntroPage
);
addPage
(
new
LoadSetsPage
);
addPage
(
new
SaveSetsPage
);
addPage
(
new
LoadTokensPage
);
addPage
(
new
SaveTokensPage
);
retranslateUi
();
}
...
...
@@ -100,6 +104,17 @@ void OracleWizard::disableButtons()
button
(
QWizard
::
BackButton
)
->
setDisabled
(
true
);
}
bool
OracleWizard
::
saveTokensToFile
(
const
QString
&
fileName
)
{
QFile
file
(
fileName
);
if
(
!
file
.
open
(
QIODevice
::
WriteOnly
))
return
false
;
if
(
file
.
write
(
tokensData
)
==
-
1
)
return
false
;
file
.
close
();
return
true
;
}
IntroPage
::
IntroPage
(
QWidget
*
parent
)
:
OracleWizardPage
(
parent
)
{
...
...
@@ -529,3 +544,203 @@ bool SaveSetsPage::validatePage()
return
true
;
}
LoadTokensPage
::
LoadTokensPage
(
QWidget
*
parent
)
:
OracleWizardPage
(
parent
),
nam
(
0
)
{
urlLabel
=
new
QLabel
(
this
);
urlLineEdit
=
new
QLineEdit
(
this
);
progressLabel
=
new
QLabel
(
this
);
progressBar
=
new
QProgressBar
(
this
);
urlButton
=
new
QPushButton
(
this
);
connect
(
urlButton
,
SIGNAL
(
clicked
()),
this
,
SLOT
(
actRestoreDefaultUrl
()));
QGridLayout
*
layout
=
new
QGridLayout
(
this
);
layout
->
addWidget
(
urlLabel
,
0
,
0
);
layout
->
addWidget
(
urlLineEdit
,
0
,
1
);
layout
->
addWidget
(
urlButton
,
1
,
1
,
Qt
::
AlignRight
);
layout
->
addWidget
(
progressLabel
,
2
,
0
);
layout
->
addWidget
(
progressBar
,
2
,
1
);
setLayout
(
layout
);
}
void
LoadTokensPage
::
initializePage
()
{
urlLineEdit
->
setText
(
wizard
()
->
settings
->
value
(
"tokensurl"
,
TOKENS_URL
).
toString
());
progressLabel
->
hide
();
progressBar
->
hide
();
}
void
LoadTokensPage
::
retranslateUi
()
{
setTitle
(
tr
(
"Tokens source selection"
));
setSubTitle
(
tr
(
"Please specify a source for the list of tokens. "
"You can specify an url address that will be download or "
"use an existing file from your computer."
));
urlLabel
->
setText
(
tr
(
"Download url:"
));
urlButton
->
setText
(
tr
(
"Restore default url"
));
}
void
LoadTokensPage
::
actRestoreDefaultUrl
()
{
urlLineEdit
->
setText
(
TOKENS_URL
);
}
bool
LoadTokensPage
::
validatePage
()
{
// once the import is finished, we call next(); skip validation
if
(
wizard
()
->
hasTokensData
())
return
true
;
QUrl
url
=
QUrl
::
fromUserInput
(
urlLineEdit
->
text
());
if
(
!
url
.
isValid
())
{
QMessageBox
::
critical
(
this
,
tr
(
"Error"
),
tr
(
"The provided url is not valid."
));
return
false
;
}
progressLabel
->
setText
(
tr
(
"Downloading (0MB)"
));
// show an infinite progressbar
progressBar
->
setMaximum
(
0
);
progressBar
->
setMinimum
(
0
);
progressBar
->
setValue
(
0
);
progressLabel
->
show
();
progressBar
->
show
();
wizard
()
->
disableButtons
();
setEnabled
(
false
);
if
(
!
nam
)
nam
=
new
QNetworkAccessManager
(
this
);
QNetworkReply
*
reply
=
nam
->
get
(
QNetworkRequest
(
url
));
connect
(
reply
,
SIGNAL
(
finished
()),
this
,
SLOT
(
actDownloadFinishedTokensFile
()));
connect
(
reply
,
SIGNAL
(
downloadProgress
(
qint64
,
qint64
)),
this
,
SLOT
(
actDownloadProgressTokensFile
(
qint64
,
qint64
)));
return
false
;
}
void
LoadTokensPage
::
actDownloadProgressTokensFile
(
qint64
received
,
qint64
total
)
{
if
(
total
>
0
)
{
progressBar
->
setMaximum
(
total
);
progressBar
->
setValue
(
received
);
}
progressLabel
->
setText
(
tr
(
"Downloading (%1MB)"
).
arg
((
int
)
received
/
1048576
));
}
void
LoadTokensPage
::
actDownloadFinishedTokensFile
()
{
progressLabel
->
hide
();
progressBar
->
hide
();
// check for a reply
QNetworkReply
*
reply
=
static_cast
<
QNetworkReply
*>
(
sender
());
QNetworkReply
::
NetworkError
errorCode
=
reply
->
error
();
if
(
errorCode
!=
QNetworkReply
::
NoError
)
{
QMessageBox
::
critical
(
this
,
tr
(
"Error"
),
tr
(
"Network error: %1."
).
arg
(
reply
->
errorString
()));
wizard
()
->
enableButtons
();
setEnabled
(
true
);
reply
->
deleteLater
();
return
;
}
// save allsets.json url, but only if the user customized it and download was successfull
if
(
urlLineEdit
->
text
()
!=
QString
(
TOKENS_URL
))
wizard
()
->
settings
->
setValue
(
"tokensurl"
,
urlLineEdit
->
text
());
else
wizard
()
->
settings
->
remove
(
"tokensurl"
);
wizard
()
->
setTokensData
(
reply
->
readAll
());
reply
->
deleteLater
();
wizard
()
->
enableButtons
();
setEnabled
(
true
);
progressLabel
->
hide
();
progressBar
->
hide
();
wizard
()
->
next
();
}
SaveTokensPage
::
SaveTokensPage
(
QWidget
*
parent
)
:
OracleWizardPage
(
parent
)
{
defaultPathCheckBox
=
new
QCheckBox
(
this
);
defaultPathCheckBox
->
setChecked
(
true
);
QGridLayout
*
layout
=
new
QGridLayout
(
this
);
layout
->
addWidget
(
defaultPathCheckBox
,
0
,
0
);
setLayout
(
layout
);
}
void
SaveTokensPage
::
retranslateUi
()
{
setTitle
(
tr
(
"Tokens imported"
));
setSubTitle
(
tr
(
"The tokens has been imported. "
"Press
\"
Save
\"
to save the imported tokens to the Cockatrice tokens database."
));
defaultPathCheckBox
->
setText
(
tr
(
"Save to the default path (recommended)"
));
}
bool
SaveTokensPage
::
validatePage
()
{
bool
ok
=
false
;
const
QString
dataDir
=
#if QT_VERSION < 0x050000
QDesktopServices
::
storageLocation
(
QDesktopServices
::
DataLocation
);
#else
QStandardPaths
::
standardLocations
(
QStandardPaths
::
DataLocation
).
first
();
#endif
QSettings
*
settings
=
new
QSettings
(
this
);
QString
defaultPath
=
settings
->
value
(
"paths/tokendatabase"
).
toString
();
QString
windowName
=
tr
(
"Save token database"
);
QString
fileType
=
tr
(
"XML; token database (*.xml)"
);
do
{
QString
fileName
;
if
(
defaultPath
.
isEmpty
())
{
if
(
defaultPathCheckBox
->
isChecked
())
fileName
=
dataDir
+
"/tokens.xml"
;
else
fileName
=
QFileDialog
::
getSaveFileName
(
this
,
windowName
,
dataDir
+
"/tokens.xml"
,
fileType
);
settings
->
setValue
(
"paths/tokendatabase"
,
fileName
);
}
else
{
if
(
defaultPathCheckBox
->
isChecked
())
fileName
=
defaultPath
;
else
fileName
=
QFileDialog
::
getSaveFileName
(
this
,
windowName
,
defaultPath
,
fileType
);
}
if
(
fileName
.
isEmpty
())
{
return
false
;
}
QFileInfo
fi
(
fileName
);
QDir
fileDir
(
fi
.
path
());
if
(
!
fileDir
.
exists
()
&&
!
fileDir
.
mkpath
(
fileDir
.
absolutePath
()))
{
return
false
;
}
if
(
wizard
()
->
saveTokensToFile
(
fileName
))
{
ok
=
true
;
QMessageBox
::
information
(
this
,
tr
(
"Success"
),
tr
(
"The token database has been saved successfully to
\n
%1"
).
arg
(
fileName
));
}
else
{
QMessageBox
::
critical
(
this
,
tr
(
"Error"
),
tr
(
"The file could not be saved to %1"
).
arg
(
fileName
));;
if
(
defaultPathCheckBox
->
isChecked
())
defaultPathCheckBox
->
setChecked
(
false
);
}
}
while
(
!
ok
);
return
true
;
}
oracle/src/oraclewizard.h
View file @
24aabc4c
...
...
@@ -27,6 +27,9 @@ public:
void
enableButtons
();
void
disableButtons
();
void
retranslateUi
();
void
setTokensData
(
QByteArray
_tokensData
)
{
tokensData
=
_tokensData
;
}
bool
hasTokensData
()
{
return
!
tokensData
.
isEmpty
();
}
bool
saveTokensToFile
(
const
QString
&
fileName
);
public:
OracleImporter
*
importer
;
QSettings
*
settings
;
...
...
@@ -35,6 +38,7 @@ private slots:
private:
QStringList
findQmFiles
();
QString
languageName
(
const
QString
&
qmFile
);
QByteArray
tokensData
;
protected:
void
changeEvent
(
QEvent
*
event
);
};
...
...
@@ -115,4 +119,38 @@ private slots:
void
updateTotalProgress
(
int
cardsImported
,
int
setIndex
,
const
QString
&
setName
);
};
class
LoadTokensPage
:
public
OracleWizardPage
{
Q_OBJECT
public:
LoadTokensPage
(
QWidget
*
parent
=
0
);
void
retranslateUi
();
protected:
void
initializePage
();
bool
validatePage
();
private:
QLabel
*
urlLabel
;
QLineEdit
*
urlLineEdit
;
QPushButton
*
urlButton
;
QLabel
*
progressLabel
;
QProgressBar
*
progressBar
;
QNetworkAccessManager
*
nam
;
private
slots
:
void
actRestoreDefaultUrl
();
void
actDownloadProgressTokensFile
(
qint64
received
,
qint64
total
);
void
actDownloadFinishedTokensFile
();
};
class
SaveTokensPage
:
public
OracleWizardPage
{
Q_OBJECT
public:
SaveTokensPage
(
QWidget
*
parent
=
0
);
void
retranslateUi
();
private:
QCheckBox
*
defaultPathCheckBox
;
protected:
bool
validatePage
();
};
#endif
\ No newline at end of file
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment