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
55f3e931
Commit
55f3e931
authored
Mar 30, 2016
by
ctrlaltca
Browse files
Merge pull request #1859 from ctrlaltca/carddb
Rework some parts of the card database
parents
830a4c2f
e94f59d7
Changes
55
Show whitespace changes
Inline
Side-by-side
cockatrice/src/window_main.h
View file @
55f3e931
...
...
@@ -79,8 +79,19 @@ private slots:
void
cardUpdateError
(
QProcess
::
ProcessError
err
);
void
cardUpdateFinished
(
int
exitCode
,
QProcess
::
ExitStatus
exitStatus
);
void
refreshShortcuts
();
void
cardDatabaseLoadingFailed
();
void
cardDatabaseNewSetsFound
(
int
numUnknownSets
);
void
cardDatabaseAllNewSetsEnabled
();
void
actOpenCustomFolder
();
void
actOpenCustomsetsFolder
();
void
actAddCustomSet
();
void
actEditSets
();
void
actEditTokens
();
private:
static
const
QString
appName
;
static
const
QStringList
fileNameFilters
;
void
setClientStatusTitle
();
void
retranslateUi
();
void
createActions
();
...
...
@@ -88,13 +99,15 @@ private:
void
createTrayIcon
();
void
createTrayActions
();
int
getNextCustomSetPrefix
(
QDir
dataDir
);
// TODO: add a preference item to choose updater name for other games
inline
QString
getCardUpdaterBinaryName
()
{
return
"oracle"
;
};
QList
<
QMenu
*>
tabMenus
;
QMenu
*
cockatriceMenu
,
*
helpMenu
;
QMenu
*
cockatriceMenu
,
*
dbMenu
,
*
helpMenu
;
QAction
*
aConnect
,
*
aDisconnect
,
*
aSinglePlayer
,
*
aWatchReplay
,
*
aDeckEditor
,
*
aFullScreen
,
*
aSettings
,
*
aExit
,
*
aAbout
,
*
aCheckCardUpdates
,
*
aRegister
,
*
aUpdate
;
QAction
*
aEditSets
,
*
aEditTokens
,
*
aOpenCustomFolder
,
*
aOpenCustomsetsFolder
,
*
aAddCustomSet
;
TabSupervisor
*
tabSupervisor
;
QMenu
*
trayIconMenu
;
...
...
cockatrice/src/zoneviewzone.cpp
View file @
55f3e931
...
...
@@ -116,7 +116,7 @@ void ZoneViewZone::reorganizeCards()
QString
lastCardType
;
for
(
int
i
=
0
;
i
<
cardCount
;
i
++
)
{
CardItem
*
c
=
cardsToDisplay
.
at
(
i
);
QString
cardType
=
c
->
getInfo
()
->
getMainCardType
();
QString
cardType
=
c
->
getInfo
()
?
c
->
getInfo
()
->
getMainCardType
()
:
""
;
if
(
i
){
// if not the first card
if
(
cardType
==
lastCardType
)
...
...
common/CMakeLists.txt
View file @
55f3e931
...
...
@@ -2,7 +2,6 @@
#
# provides the common library
CMAKE_MINIMUM_REQUIRED
(
VERSION 2.6
)
add_subdirectory
(
pb
)
SET
(
common_SOURCES
...
...
common/pb/CMakeLists.txt
View file @
55f3e931
...
...
@@ -2,8 +2,6 @@
#
# provides the protobuf interfaces
CMAKE_MINIMUM_REQUIRED
(
VERSION 2.6
)
SET
(
PROTO_FILES
admin_commands.proto
card_attributes.proto
...
...
oracle/CMakeLists.txt
View file @
55f3e931
...
...
@@ -130,8 +130,6 @@ ENDIF()
# Build oracle binary and link it
ADD_EXECUTABLE
(
oracle WIN32 MACOSX_BUNDLE
${
oracle_SOURCES
}
${
oracle_QM
}
${
oracle_RESOURCES_RCC
}
${
oracle_MOC_SRCS
}
)
set_property
(
TARGET oracle PROPERTY CXX_STANDARD 11
)
set_property
(
TARGET oracle PROPERTY CXX_STANDARD_REQUIRED ON
)
if
(
Qt4_FOUND
)
if
(
MSVC
)
...
...
oracle/src/oraclewizard.cpp
View file @
55f3e931
...
...
@@ -48,19 +48,7 @@ OracleWizard::OracleWizard(QWidget *parent)
settings
=
new
QSettings
(
settingsCache
->
getSettingsPath
()
+
"global.ini"
,
QSettings
::
IniFormat
,
this
);
connect
(
settingsCache
,
SIGNAL
(
langChanged
()),
this
,
SLOT
(
updateLanguage
()));
QString
dataDir
;
#ifndef PORTABLE_BUILD
#if QT_VERSION < 0x050000
QDesktopServices
::
storageLocation
(
QDesktopServices
::
DataLocation
);
#else
QStandardPaths
::
standardLocations
(
QStandardPaths
::
DataLocation
).
first
();
#endif
#else
dataDir
.
append
(
"data"
);
#endif
importer
=
new
OracleImporter
(
dataDir
,
this
);
importer
=
new
OracleImporter
(
settingsCache
->
getDataPath
(),
this
);
addPage
(
new
IntroPage
);
addPage
(
new
LoadSetsPage
);
...
...
@@ -521,47 +509,19 @@ void SaveSetsPage::updateTotalProgress(int cardsImported, int /* setIndex */, co
bool
SaveSetsPage
::
validatePage
()
{
bool
ok
=
false
;
QString
dataDir
;
#ifndef PORTABLE_BUILD
#if QT_VERSION < 0x050000
dataDir
=
QDesktopServices
::
storageLocation
(
QDesktopServices
::
DataLocation
);
#else
dataDir
=
QStandardPaths
::
standardLocations
(
QStandardPaths
::
DataLocation
).
first
();
#endif
#else
dataDir
=
qApp
->
applicationDirPath
()
+
"/data"
;
#endif
#ifdef PORTABLE_BUILD
QSettings
*
settings
=
new
QSettings
(
"settings/global.ini"
,
QSettings
::
IniFormat
,
this
);
QString
defaultPath
=
"data/cards.xml"
;
settings
->
setValue
(
"paths/carddatabase"
,
defaultPath
);
#else
QSettings
*
settings
=
new
QSettings
(
settingsCache
->
getSettingsPath
()
+
"global.ini"
,
QSettings
::
IniFormat
,
this
);
QString
defaultPath
=
settings
->
value
(
"paths/carddatabase"
).
toString
();
#endif
QString
defaultPath
=
settingsCache
->
getCardDatabasePath
();
QString
windowName
=
tr
(
"Save card database"
);
QString
fileType
=
tr
(
"XML; card database (*.xml)"
);
do
{
QString
fileName
;
if
(
defaultPath
.
isEmpty
())
{
if
(
defaultPathCheckBox
->
isChecked
())
fileName
=
dataDir
+
"/cards.xml"
;
else
fileName
=
QFileDialog
::
getSaveFileName
(
this
,
windowName
,
dataDir
+
"/cards.xml"
,
fileType
);
settings
->
setValue
(
"paths/carddatabase"
,
fileName
);
}
else
{
if
(
defaultPathCheckBox
->
isChecked
())
fileName
=
defaultPath
;
else
fileName
=
QFileDialog
::
getSaveFileName
(
this
,
windowName
,
defaultPath
,
fileType
);
}
if
(
fileName
.
isEmpty
())
{
if
(
fileName
.
isEmpty
())
return
false
;
}
QFileInfo
fi
(
fileName
);
QDir
fileDir
(
fi
.
path
());
...
...
@@ -741,55 +701,24 @@ void SaveTokensPage::retranslateUi()
"Press
\"
Save
\"
to save the imported tokens to the Cockatrice tokens database."
));
defaultPathCheckBox
->
setText
(
tr
(
"Save to the default path (recommended)"
));
#ifdef PORTABLE_BUILD
defaultPathCheckBox
->
setEnabled
(
false
);
#endif
}
bool
SaveTokensPage
::
validatePage
()
{
bool
ok
=
false
;
QString
dataDir
;
#ifndef PORTABLE_BUILD
#if QT_VERSION < 0x050000
dataDir
=
QDesktopServices
::
storageLocation
(
QDesktopServices
::
DataLocation
);
#else
dataDir
=
QStandardPaths
::
standardLocations
(
QStandardPaths
::
DataLocation
).
first
();
#endif
#else
dataDir
=
qApp
->
applicationDirPath
()
+
"/data"
;
#endif
#ifdef PORTABLE_BUILD
QSettings
*
settings
=
new
QSettings
(
"settings/global.ini"
,
QSettings
::
IniFormat
,
this
);
QString
defaultPath
=
"data/tokens.xml"
;
settings
->
setValue
(
"paths/tokendatabase"
,
defaultPath
);
#else
QSettings
*
settings
=
new
QSettings
(
settingsCache
->
getSettingsPath
()
+
"global.ini"
,
QSettings
::
IniFormat
,
this
);
QString
defaultPath
=
settings
->
value
(
"paths/tokendatabase"
).
toString
();
#endif
QString
defaultPath
=
settingsCache
->
getTokenDatabasePath
();
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
())
{
if
(
fileName
.
isEmpty
())
return
false
;
}
QFileInfo
fi
(
fileName
);
QDir
fileDir
(
fi
.
path
());
...
...
servatrice/CMakeLists.txt
View file @
55f3e931
...
...
@@ -117,8 +117,6 @@ INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR})
# Build servatrice binary and link it
ADD_EXECUTABLE
(
servatrice MACOSX_BUNDLE
${
servatrice_SOURCES
}
${
servatrice_RESOURCES_RCC
}
${
servatrice_MOC_SRCS
}
)
set_property
(
TARGET servatrice PROPERTY CXX_STANDARD 11
)
set_property
(
TARGET servatrice PROPERTY CXX_STANDARD_REQUIRED ON
)
if
(
Qt4_FOUND
)
if
(
MSVC
)
...
...
tests/CMakeLists.txt
View file @
55f3e931
...
...
@@ -36,3 +36,5 @@ endif()
include_directories
(
${
GTEST_INCLUDE_DIRS
}
)
target_link_libraries
(
dummy_test
${
GTEST_BOTH_LIBRARIES
}
)
add_subdirectory
(
carddatabase
)
\ No newline at end of file
tests/carddatabase/CMakeLists.txt
0 → 100644
View file @
55f3e931
ADD_DEFINITIONS
(
"-DCARDDB_DATADIR=
\"
${
CMAKE_CURRENT_SOURCE_DIR
}
/data/
\"
"
)
add_executable
(
carddatabase_test
carddatabase_test.cpp
../../cockatrice/src/carddatabase.cpp
)
if
(
NOT GTEST_FOUND
)
add_dependencies
(
carddatabase_test gtest
)
endif
()
target_link_libraries
(
carddatabase_test
${
GTEST_BOTH_LIBRARIES
}
)
add_test
(
NAME carddatabase_test COMMAND carddatabase_test
)
# Qt4 stuff
if
(
Qt4_FOUND
)
SET
(
QT_USE_QTNETWORK TRUE
)
SET
(
QT_USE_QTMULTIMEDIA TRUE
)
# Include directories
INCLUDE
(
${
QT_USE_FILE
}
)
INCLUDE_DIRECTORIES
(
${
QT_INCLUDES
}
)
TARGET_LINK_LIBRARIES
(
carddatabase_test
${
QT_LIBRARIES
}
)
endif
()
# qt5 stuff
if
(
Qt5Widgets_FOUND
)
include_directories
(
${
Qt5Widgets_INCLUDE_DIRS
}
)
list
(
APPEND COCKATRICE_LIBS Widgets
)
# QtConcurrent
find_package
(
Qt5Concurrent
)
if
(
Qt5Concurrent_FOUND
)
include_directories
(
${
Qt5Concurrent_INCLUDE_DIRS
}
)
list
(
APPEND ORACLE_LIBS Concurrent
)
endif
()
# QtNetwork
find_package
(
Qt5Network
)
if
(
Qt5Network_FOUND
)
include_directories
(
${
Qt5Network_INCLUDE_DIRS
}
)
list
(
APPEND COCKATRICE_LIBS Network
)
endif
()
qt5_use_modules
(
carddatabase_test
${
COCKATRICE_LIBS
}
)
endif
()
\ No newline at end of file
tests/carddatabase/carddatabase_test.cpp
0 → 100644
View file @
55f3e931
#include
"gtest/gtest.h"
#include
"carddatabase_test.h"
void
CardDatabaseSettings
::
setSortKey
(
QString
/* shortName */
,
unsigned
int
/* sortKey */
)
{
};
void
CardDatabaseSettings
::
setEnabled
(
QString
/* shortName */
,
bool
/* enabled */
)
{
};
void
CardDatabaseSettings
::
setIsKnown
(
QString
/* shortName */
,
bool
/* isknown */
)
{
};
unsigned
int
CardDatabaseSettings
::
getSortKey
(
QString
/* shortName */
)
{
return
0
;
};
bool
CardDatabaseSettings
::
isEnabled
(
QString
/* shortName */
)
{
return
true
;
};
bool
CardDatabaseSettings
::
isKnown
(
QString
/* shortName */
)
{
return
true
;
};
SettingsCache
::
SettingsCache
()
{
cardDatabaseSettings
=
new
CardDatabaseSettings
();
};
SettingsCache
::~
SettingsCache
()
{
delete
cardDatabaseSettings
;
};
QString
SettingsCache
::
getCustomCardDatabasePath
()
const
{
return
QString
(
"%1/customsets/"
).
arg
(
CARDDB_DATADIR
);
}
QString
SettingsCache
::
getCardDatabasePath
()
const
{
return
QString
(
"%1/cards.xml"
).
arg
(
CARDDB_DATADIR
);
}
QString
SettingsCache
::
getTokenDatabasePath
()
const
{
return
QString
(
"%1/tokens.xml"
).
arg
(
CARDDB_DATADIR
);
}
CardDatabaseSettings
&
SettingsCache
::
cardDatabase
()
const
{
return
*
cardDatabaseSettings
;
}
SettingsCache
*
settingsCache
;
void
PictureLoader
::
clearPixmapCache
(
CardInfo
*
/* card */
)
{
}
// include out main header file _after_ the hack is complete
#include
"../../cockatrice/src/carddatabase.h"
namespace
{
TEST
(
CardDatabaseTest
,
LoadXml
)
{
settingsCache
=
new
SettingsCache
;
CardDatabase
*
db
=
new
CardDatabase
;
// ensure the card database is empty at start
ASSERT_EQ
(
0
,
db
->
getCardList
().
size
())
<<
"Cards not empty at start"
;
ASSERT_EQ
(
0
,
db
->
getSetList
().
size
())
<<
"Sets not empty at start"
;
ASSERT_EQ
(
0
,
db
->
getAllColors
().
size
())
<<
"Colors not empty at start"
;
ASSERT_EQ
(
0
,
db
->
getAllMainCardTypes
().
size
())
<<
"Types not empty at start"
;
ASSERT_EQ
(
NotLoaded
,
db
->
getLoadStatus
())
<<
"Incorrect status at start"
;
// load dummy cards and test result
db
->
loadCardDatabases
();
ASSERT_EQ
(
6
,
db
->
getCardList
().
size
())
<<
"Wrong card count after load"
;
ASSERT_EQ
(
3
,
db
->
getSetList
().
size
())
<<
"Wrong sets count after load"
;
ASSERT_EQ
(
4
,
db
->
getAllColors
().
size
())
<<
"Wrong colors count after load"
;
ASSERT_EQ
(
2
,
db
->
getAllMainCardTypes
().
size
())
<<
"Wrong types count after load"
;
ASSERT_EQ
(
Ok
,
db
->
getLoadStatus
())
<<
"Wrong status after load"
;
// ensure the card database is empty after clear()
db
->
clear
();
ASSERT_EQ
(
0
,
db
->
getCardList
().
size
())
<<
"Cards not empty after clear"
;
ASSERT_EQ
(
0
,
db
->
getSetList
().
size
())
<<
"Sets not empty after clear"
;
ASSERT_EQ
(
0
,
db
->
getAllColors
().
size
())
<<
"Colors not empty after clear"
;
ASSERT_EQ
(
0
,
db
->
getAllMainCardTypes
().
size
())
<<
"Types not empty after clear"
;
ASSERT_EQ
(
NotLoaded
,
db
->
getLoadStatus
())
<<
"Incorrect status after clear"
;
}
}
int
main
(
int
argc
,
char
**
argv
)
{
::
testing
::
InitGoogleTest
(
&
argc
,
argv
);
return
RUN_ALL_TESTS
();
}
\ No newline at end of file
tests/carddatabase/carddatabase_test.h
0 → 100644
View file @
55f3e931
/*
* Beware of this preprocessor hack used to redefine the settingCache class
* instead of including it and all of its dependencies.
*/
#include
<QObject>
#include
<QString>
#define SETTINGSCACHE_H
class
CardDatabaseSettings
{
public:
void
setSortKey
(
QString
shortName
,
unsigned
int
sortKey
);
void
setEnabled
(
QString
shortName
,
bool
enabled
);
void
setIsKnown
(
QString
shortName
,
bool
isknown
);
unsigned
int
getSortKey
(
QString
shortName
);
bool
isEnabled
(
QString
shortName
);
bool
isKnown
(
QString
shortName
);
};
class
SettingsCache
:
public
QObject
{
Q_OBJECT
private:
CardDatabaseSettings
*
cardDatabaseSettings
;
public:
SettingsCache
();
~
SettingsCache
();
QString
getCustomCardDatabasePath
()
const
;
QString
getCardDatabasePath
()
const
;
QString
getTokenDatabasePath
()
const
;
CardDatabaseSettings
&
cardDatabase
()
const
;
signals:
void
cardDatabasePathChanged
();
};
#define PICTURELOADER_H
class
CardInfo
;
class
PictureLoader
{
void
clearPixmapCache
(
CardInfo
*
card
);
};
tests/carddatabase/data/cards.xml
0 → 100644
View file @
55f3e931
<?xml version="1.0" encoding="UTF-8"?>
<cockatrice_carddatabase
version=
"3"
>
<cards>
<card>
<name>
Cat
</name>
<set
muId=
"111"
>
CAT
</set>
<color>
G
</color>
<manacost>
2G
</manacost>
<cmc>
2
</cmc>
<type>
Creature
</type>
<pt>
3/3
</pt>
<tablerow>
0
</tablerow>
<text>
Meow!
</text>
</card>
<card>
<name>
Dog
</name>
<set
muId=
"222"
>
DOG
</set>
<color>
R
</color>
<manacost>
2RR
</manacost>
<cmc>
4
</cmc>
<type>
Creature
</type>
<pt>
4/4
</pt>
<tablerow>
0
</tablerow>
<text>
Woof!
</text>
</card>
</cards>
</cockatrice_carddatabase>
tests/carddatabase/data/customsets/customset1.xml
0 → 100644
View file @
55f3e931
<?xml version="1.0" encoding="UTF-8"?>
<cockatrice_carddatabase
version=
"3"
>
<cards>
<card>
<name>
Sparrow
</name>
<set
muId=
"333"
>
BRD
</set>
<color>
W
</color>
<manacost>
W
</manacost>
<cmc>
1
</cmc>
<type>
Creature
</type>
<pt>
1/1
</pt>
<tablerow>
0
</tablerow>
<text></text>
</card>
<card>
<name>
Crow
</name>
<set
muId=
"334"
>
BRD
</set>
<color>
B
</color>
<manacost>
1B
</manacost>
<cmc>
2
</cmc>
<type>
Creature
</type>
<pt>
2/2
</pt>
<tablerow>
0
</tablerow>
<text></text>
</card>
</cards>
</cockatrice_carddatabase>
tests/carddatabase/data/tokens.xml
0 → 100644
View file @
55f3e931
<?xml version="1.0" encoding="UTF-8"?>
<cockatrice_carddatabase
version=
"3"
>
<cards>
<card>
<name>
Kitten
</name>
<set
muId=
"112"
>
CAT
</set>
<color>
G
</color>
<manacost></manacost>
<cmc></cmc>
<type>
Token
</type>
<pt>
1/1
</pt>
<tablerow>
0
</tablerow>
<text></text>
<token>
1
</token>
</card>
<card>
<name>
Puppy
</name>
<set
muId=
"223"
>
DOG
</set>
<color>
R
</color>
<manacost></manacost>
<cmc></cmc>
<type>
Token
</type>
<pt>
1/1
</pt>
<tablerow>
0
</tablerow>
<text></text>
<token>
1
</token>
</card>
</cards>
</cockatrice_carddatabase>
travis-dependencies.sh
View file @
55f3e931
...
...
@@ -11,9 +11,10 @@ if [[ $TRAVIS_OS_NAME == "osx" ]] ; then
brew upgrade cmake
else
# common prerequisites
sudo
add-apt-repository
-y
ppa:smspillaz/cmake-master
sudo
apt-get update
-qq
sudo
apt-get
-y
purge cmake
sudo
apt-get
install
-y
libprotobuf-dev protobuf-compiler cmake bc
if
((
QT4
))
;
then
...
...
@@ -28,15 +29,7 @@ else
# prerequisites for tests
if
[[
$BUILDTYPE
==
"Debug"
]]
;
then
if
[[
$DIST
==
"precise"
]]
;
then
sudo
add-apt-repository
-y
ppa:george-edison55/precise-backports
sudo
apt-get update
-qq
sudo
apt-get
install
-y
cmake cmake-data libgtest-dev
else
sudo
add-apt-repository
-y
ppa:george-edison55/cmake-3.x
sudo
apt-get update
-qq
sudo
apt-get
install
-y
cmake cmake-extras libgtest-dev
fi
sudo
apt-get
install
-y
libgtest-dev
sudo mkdir
/usr/src/gtest/build
cd
/usr/src/gtest/build
...
...
Prev
1
2
3
Next
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