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
3a5fce96
Commit
3a5fce96
authored
Feb 11, 2011
by
Max-Wilhelm Bruker
Browse files
new autodownloader partially done
parent
c20ca2d1
Changes
5
Hide whitespace changes
Inline
Side-by-side
cockatrice/src/carddatabase.cpp
View file @
3a5fce96
...
...
@@ -94,9 +94,9 @@ void PictureLoadingThread::run()
break
;
if
(
image
.
load
(
QString
(
"%1/%2/%3%4.full.jpg"
).
arg
(
picsPath
).
arg
(
sortedSets
[
i
]
->
getShortName
()).
arg
(
correctedName
).
arg
(
1
)))
break
;
if
(
image
.
load
(
QString
(
"%1/%2/%3/%4.full.jpg"
).
arg
(
picsPath
).
arg
(
"downloadedPics"
).
arg
(
sortedSets
[
i
]
->
getShortName
()).
arg
(
correctedName
)))
break
;
}
if
(
image
.
isNull
())
image
.
load
(
QString
(
"%1/%2/%3.full.jpg"
).
arg
(
picsPath
).
arg
(
"downloadedPics"
).
arg
(
correctedName
));
emit
imageLoaded
(
card
,
image
);
}
...
...
@@ -117,8 +117,8 @@ void PictureLoadingThread::setPicsPath(const QString &path)
_picsPath
=
path
;
}
CardInfo
::
CardInfo
(
CardDatabase
*
_db
,
const
QString
&
_name
,
const
QString
&
_manacost
,
const
QString
&
_cardtype
,
const
QString
&
_powtough
,
const
QString
&
_text
,
const
QStringList
&
_colors
,
bool
_cipt
,
int
_tableRow
,
const
SetList
&
_sets
,
const
QMap
<
QString
,
QString
>
&
_picURLs
)
:
db
(
_db
),
name
(
_name
),
sets
(
_sets
),
manacost
(
_manacost
),
cardtype
(
_cardtype
),
powtough
(
_powtough
),
text
(
_text
),
colors
(
_colors
),
picURLs
(
_picURLs
),
cipt
(
_cipt
),
tableRow
(
_tableRow
),
pixmap
(
NULL
)
CardInfo
::
CardInfo
(
CardDatabase
*
_db
,
const
QString
&
_name
,
const
QString
&
_manacost
,
const
QString
&
_cardtype
,
const
QString
&
_powtough
,
const
QString
&
_text
,
const
QStringList
&
_colors
,
bool
_cipt
,
int
_tableRow
,
const
SetList
&
_sets
,
const
QMap
<
QString
,
QString
>
&
_picURLs
,
const
QMap
<
QString
,
QString
>
&
_picURLsHq
,
const
QMap
<
QString
,
QString
>
&
_picURLsSt
)
:
db
(
_db
),
name
(
_name
),
sets
(
_sets
),
manacost
(
_manacost
),
cardtype
(
_cardtype
),
powtough
(
_powtough
),
text
(
_text
),
colors
(
_colors
),
picURLs
(
_picURLs
),
picURLsHq
(
_picURLsHq
),
picURLsSt
(
_picURLsSt
),
cipt
(
_cipt
),
tableRow
(
_tableRow
),
pixmap
(
NULL
)
{
for
(
int
i
=
0
;
i
<
sets
.
size
();
i
++
)
sets
[
i
]
->
append
(
this
);
...
...
@@ -198,7 +198,7 @@ void CardInfo::imageLoaded(const QImage &image)
*
pixmap
=
QPixmap
::
fromImage
(
image
);
emit
pixmapUpdated
();
}
else
if
(
settingsCache
->
getPicDownload
())
db
->
startPicDownload
(
this
);
db
->
startPicDownload
(
this
,
false
);
}
QPixmap
*
CardInfo
::
getPixmap
(
QSize
size
)
...
...
@@ -267,6 +267,8 @@ QXmlStreamWriter &operator<<(QXmlStreamWriter &xml, const CardInfo *info)
for
(
int
i
=
0
;
i
<
sets
.
size
();
i
++
)
{
xml
.
writeStartElement
(
"set"
);
xml
.
writeAttribute
(
"picURL"
,
info
->
getPicURL
(
sets
[
i
]
->
getShortName
()));
xml
.
writeAttribute
(
"picURLHq"
,
info
->
getPicURLHq
(
sets
[
i
]
->
getShortName
()));
xml
.
writeAttribute
(
"picURLSt"
,
info
->
getPicURLSt
(
sets
[
i
]
->
getShortName
()));
xml
.
writeCharacters
(
sets
[
i
]
->
getShortName
());
xml
.
writeEndElement
();
}
...
...
@@ -379,12 +381,16 @@ void CardDatabase::clearPixmapCache()
noCard
->
clearPixmapCache
();
}
void
CardDatabase
::
startPicDownload
(
CardInfo
*
card
)
void
CardDatabase
::
startPicDownload
(
CardInfo
*
card
,
bool
stripped
)
{
if
(
card
->
getPicURLs
().
isEmpty
())
SetList
sortedSets
=
card
->
getSets
();
if
(
sortedSets
.
isEmpty
())
return
;
sortedSets
.
sortByKey
();
for
(
int
i
=
0
;
i
<
sortedSets
.
size
();
++
i
)
qDebug
()
<<
sortedSets
[
i
]
->
getShortName
();
cardsToDownload
.
append
(
card
);
cardsToDownload
.
append
(
PictureToDownload
(
card
,
stripped
,
sortedSets
.
first
()
->
getShortName
())
);
if
(
!
downloadRunning
)
startNextPicDownload
();
}
...
...
@@ -400,7 +406,17 @@ void CardDatabase::startNextPicDownload()
downloadRunning
=
true
;
cardBeingDownloaded
=
cardsToDownload
.
takeFirst
();
QNetworkRequest
req
(
QUrl
(
cardBeingDownloaded
->
getPicURL
()));
QString
picUrl
;
if
(
cardBeingDownloaded
.
getStripped
())
picUrl
=
cardBeingDownloaded
.
getCard
()
->
getPicURLSt
(
cardBeingDownloaded
.
getSetName
());
else
if
(
cardBeingDownloaded
.
getHq
())
picUrl
=
cardBeingDownloaded
.
getCard
()
->
getPicURLHq
(
cardBeingDownloaded
.
getSetName
());
else
picUrl
=
cardBeingDownloaded
.
getCard
()
->
getPicURL
(
cardBeingDownloaded
.
getSetName
());
QUrl
url
(
picUrl
);
QNetworkRequest
req
(
url
);
qDebug
()
<<
"starting picture download:"
<<
req
.
url
();
networkManager
->
get
(
req
);
}
...
...
@@ -416,13 +432,26 @@ void CardDatabase::picDownloadFinished(QNetworkReply *reply)
return
;
dir
.
mkdir
(
"downloadedPics"
);
}
QFile
newPic
(
picsPath
+
"/downloadedPics/"
+
cardBeingDownloaded
->
getCorrectedName
()
+
".full.jpg"
);
if
(
!
QDir
(
QString
(
picsPath
+
"/downloadedPics/"
+
cardBeingDownloaded
.
getSetName
())).
exists
())
{
QDir
dir
(
QString
(
picsPath
+
"/downloadedPics"
));
dir
.
mkdir
(
cardBeingDownloaded
.
getSetName
());
}
QString
suffix
;
if
(
!
cardBeingDownloaded
.
getStripped
())
suffix
=
".full"
;
QFile
newPic
(
picsPath
+
"/downloadedPics/"
+
cardBeingDownloaded
.
getSetName
()
+
"/"
+
cardBeingDownloaded
.
getCard
()
->
getCorrectedName
()
+
suffix
+
".jpg"
);
if
(
!
newPic
.
open
(
QIODevice
::
WriteOnly
))
return
;
newPic
.
write
(
picData
);
newPic
.
close
();
cardBeingDownloaded
->
updatePixmapCache
();
cardBeingDownloaded
.
getCard
()
->
updatePixmapCache
();
}
else
{
qDebug
()
<<
"Download finished, received invalid picture. URL:"
<<
reply
->
request
().
url
();
cardBeingDownloaded
.
setHq
(
false
);
cardsToDownload
.
prepend
(
cardBeingDownloaded
);
}
reply
->
deleteLater
();
...
...
@@ -457,7 +486,7 @@ void CardDatabase::loadCardsFromXml(QXmlStreamReader &xml)
if
(
xml
.
name
()
==
"card"
)
{
QString
name
,
manacost
,
type
,
pt
,
text
;
QStringList
colors
;
QMap
<
QString
,
QString
>
picURLs
;
QMap
<
QString
,
QString
>
picURLs
,
picURLsHq
,
picURLsSt
;
SetList
sets
;
int
tableRow
=
0
;
bool
cipt
=
false
;
...
...
@@ -475,10 +504,14 @@ void CardDatabase::loadCardsFromXml(QXmlStreamReader &xml)
else
if
(
xml
.
name
()
==
"text"
)
text
=
xml
.
readElementText
();
else
if
(
xml
.
name
()
==
"set"
)
{
QString
url
=
xml
.
attributes
().
value
(
"picURL"
).
toString
();
QString
picURL
=
xml
.
attributes
().
value
(
"picURL"
).
toString
();
QString
picURLHq
=
xml
.
attributes
().
value
(
"picURLHq"
).
toString
();
QString
picURLSt
=
xml
.
attributes
().
value
(
"picURLSt"
).
toString
();
QString
setName
=
xml
.
readElementText
();
sets
.
append
(
getSet
(
setName
));
picURLs
.
insert
(
setName
,
url
);
picURLs
.
insert
(
setName
,
picURL
);
picURLsHq
.
insert
(
setName
,
picURLHq
);
picURLsSt
.
insert
(
setName
,
picURLSt
);
}
else
if
(
xml
.
name
()
==
"color"
)
colors
<<
xml
.
readElementText
();
else
if
(
xml
.
name
()
==
"tablerow"
)
...
...
@@ -486,7 +519,7 @@ void CardDatabase::loadCardsFromXml(QXmlStreamReader &xml)
else
if
(
xml
.
name
()
==
"cipt"
)
cipt
=
(
xml
.
readElementText
()
==
"1"
);
}
cardHash
.
insert
(
name
,
new
CardInfo
(
this
,
name
,
manacost
,
type
,
pt
,
text
,
colors
,
cipt
,
tableRow
,
sets
,
picURLs
));
cardHash
.
insert
(
name
,
new
CardInfo
(
this
,
name
,
manacost
,
type
,
pt
,
text
,
colors
,
cipt
,
tableRow
,
sets
,
picURLs
,
picURLsHq
,
picURLsSt
));
}
}
}
...
...
@@ -561,6 +594,17 @@ bool CardDatabase::loadCardDatabase(const QString &path)
if
(
!
path
.
isEmpty
())
loadSuccess
=
loadFromFile
(
path
);
else
loadSuccess
=
false
;
if
(
loadSuccess
)
{
SetList
allSets
;
QHashIterator
<
QString
,
CardSet
*>
setsIterator
(
setHash
);
while
(
setsIterator
.
hasNext
())
allSets
.
append
(
setsIterator
.
next
().
value
());
allSets
.
sortByKey
();
for
(
int
i
=
0
;
i
<
allSets
.
size
();
++
i
)
allSets
[
i
]
->
setSortKey
(
i
);
}
return
loadSuccess
;
}
...
...
cockatrice/src/carddatabase.h
View file @
3a5fce96
...
...
@@ -66,7 +66,7 @@ private:
QString
powtough
;
QString
text
;
QStringList
colors
;
QMap
<
QString
,
QString
>
picURLs
;
QMap
<
QString
,
QString
>
picURLs
,
picURLsHq
,
picURLsSt
;
bool
cipt
;
int
tableRow
;
QPixmap
*
pixmap
;
...
...
@@ -82,7 +82,9 @@ public:
bool
cipt
=
false
,
int
_tableRow
=
0
,
const
SetList
&
_sets
=
SetList
(),
const
QMap
<
QString
,
QString
>
&
_picURLs
=
QMap
<
QString
,
QString
>
());
const
QMap
<
QString
,
QString
>
&
_picURLs
=
QMap
<
QString
,
QString
>
(),
const
QMap
<
QString
,
QString
>
&
_picURLsHq
=
QMap
<
QString
,
QString
>
(),
const
QMap
<
QString
,
QString
>
&
_picURLsSt
=
QMap
<
QString
,
QString
>
());
~
CardInfo
();
const
QString
&
getName
()
const
{
return
name
;
}
const
SetList
&
getSets
()
const
{
return
sets
;
}
...
...
@@ -94,6 +96,8 @@ public:
void
setText
(
const
QString
&
_text
)
{
text
=
_text
;
}
const
QStringList
&
getColors
()
const
{
return
colors
;
}
QString
getPicURL
(
const
QString
&
set
)
const
{
return
picURLs
.
value
(
set
);
}
QString
getPicURLHq
(
const
QString
&
set
)
const
{
return
picURLsHq
.
value
(
set
);
}
QString
getPicURLSt
(
const
QString
&
set
)
const
{
return
picURLsSt
.
value
(
set
);
}
QString
getPicURL
()
const
;
const
QMap
<
QString
,
QString
>
&
getPicURLs
()
const
{
return
picURLs
;
}
QString
getMainCardType
()
const
;
...
...
@@ -101,6 +105,8 @@ public:
int
getTableRow
()
const
{
return
tableRow
;
}
void
setTableRow
(
int
_tableRow
)
{
tableRow
=
_tableRow
;
}
void
setPicURL
(
const
QString
&
_set
,
const
QString
&
_picURL
)
{
picURLs
.
insert
(
_set
,
_picURL
);
}
void
setPicURLHq
(
const
QString
&
_set
,
const
QString
&
_picURL
)
{
picURLsHq
.
insert
(
_set
,
_picURL
);
}
void
setPicURLSt
(
const
QString
&
_set
,
const
QString
&
_picURL
)
{
picURLsSt
.
insert
(
_set
,
_picURL
);
}
void
addToSet
(
CardSet
*
set
);
QPixmap
*
loadPixmap
();
QPixmap
*
getPixmap
(
QSize
size
);
...
...
@@ -113,14 +119,30 @@ signals:
void
pixmapUpdated
();
};
class
PictureToDownload
{
private:
CardInfo
*
card
;
bool
stripped
;
QString
setName
;
bool
hq
;
public:
PictureToDownload
(
CardInfo
*
_card
=
0
,
bool
_stripped
=
false
,
const
QString
&
_setName
=
QString
(),
bool
_hq
=
true
)
:
card
(
_card
),
stripped
(
_stripped
),
setName
(
_setName
),
hq
(
_hq
)
{
}
CardInfo
*
getCard
()
const
{
return
card
;
}
bool
getStripped
()
const
{
return
stripped
;
}
QString
getSetName
()
const
{
return
setName
;
}
bool
getHq
()
const
{
return
hq
;
}
void
setHq
(
bool
_hq
)
{
hq
=
_hq
;
}
};
class
CardDatabase
:
public
QObject
{
Q_OBJECT
protected:
QHash
<
QString
,
CardInfo
*>
cardHash
;
QHash
<
QString
,
CardSet
*>
setHash
;
QNetworkAccessManager
*
networkManager
;
QList
<
CardInfo
*
>
cardsToDownload
;
CardInfo
*
cardBeingDownloaded
;
QList
<
PictureToDownload
>
cardsToDownload
;
PictureToDownload
cardBeingDownloaded
;
bool
downloadRunning
;
bool
loadSuccess
;
CardInfo
*
noCard
;
...
...
@@ -139,7 +161,7 @@ public:
SetList
getSetList
()
const
;
bool
loadFromFile
(
const
QString
&
fileName
);
bool
saveToFile
(
const
QString
&
fileName
);
void
startPicDownload
(
CardInfo
*
card
);
void
startPicDownload
(
CardInfo
*
card
,
bool
stripped
);
QStringList
getAllColors
()
const
;
QStringList
getAllMainCardTypes
()
const
;
bool
getLoadSuccess
()
const
{
return
loadSuccess
;
}
...
...
oracle/sets.xml
View file @
3a5fce96
<?xml version="1.0" encoding="UTF-8"?>
<cockatrice_setdatabase
version=
"20110126"
>
<picture_url>
http://gatherer.wizards.com/Handlers/Image.ashx?multiverseid=%1
&
type=card
</picture_url>
<picture_url>
http://gatherer.wizards.com/Handlers/Image.ashx?multiverseid=!cardid!
&
type=card
</picture_url>
<picture_url_hq>
http://mtgpics.chutography.com/!set!/!name!.full.jpg
</picture_url_hq>
<picture_url_st>
http://mtgpics.chutography.com/!set!/!name!.jpg
</picture_url_st>
<set_url>
http://gatherer.wizards.com/Pages/Search/Default.aspx?output=spoiler
&
method=text
&
set=[
"
!longname!
"
]
</set_url>
<set
import=
"1"
>
<name>
ARB
</name>
...
...
oracle/src/oracleimporter.cpp
View file @
3a5fce96
...
...
@@ -3,6 +3,7 @@
#include
<QtNetwork>
#include
<QXmlStreamReader>
#include
<QDomDocument>
#include
<QDebug>
OracleImporter
::
OracleImporter
(
const
QString
&
_dataDir
,
QObject
*
parent
)
:
CardDatabase
(
parent
),
dataDir
(
_dataDir
),
setIndex
(
-
1
)
...
...
@@ -59,6 +60,10 @@ void OracleImporter::readSetsFromXml(QXmlStreamReader &xml)
edition
=
editionLong
=
editionURL
=
QString
();
}
else
if
(
xml
.
name
()
==
"picture_url"
)
pictureUrl
=
xml
.
readElementText
();
else
if
(
xml
.
name
()
==
"picture_url_hq"
)
pictureUrlHq
=
xml
.
readElementText
();
else
if
(
xml
.
name
()
==
"picture_url_st"
)
pictureUrlSt
=
xml
.
readElementText
();
else
if
(
xml
.
name
()
==
"set_url"
)
setUrl
=
xml
.
readElementText
();
}
...
...
@@ -82,7 +87,7 @@ CardInfo *OracleImporter::addCard(const QString &setName, QString cardName, int
// Workaround for card name weirdness
if
(
cardName
.
contains
(
"XX"
))
cardName
.
remove
(
"XX"
);
cardName
=
cardName
.
replace
(
"Æ"
,
"A
e
"
);
cardName
=
cardName
.
replace
(
"Æ"
,
"A
E
"
);
bool
mArtifact
=
false
;
if
(
cardType
.
endsWith
(
"Artifact"
))
...
...
@@ -122,7 +127,9 @@ CardInfo *OracleImporter::addCard(const QString &setName, QString cardName, int
cardHash
.
insert
(
cardName
,
card
);
}
card
->
setPicURL
(
setName
,
pictureUrl
.
arg
(
cardId
));
card
->
setPicURL
(
setName
,
getPictureUrl
(
pictureUrl
,
cardId
,
cardName
,
setName
));
card
->
setPicURLHq
(
setName
,
getPictureUrl
(
pictureUrlHq
,
cardId
,
cardName
,
setName
));
card
->
setPicURLSt
(
setName
,
getPictureUrl
(
pictureUrlSt
,
cardId
,
cardName
,
setName
));
return
card
;
}
...
...
@@ -145,7 +152,7 @@ int OracleImporter::importTextSpoiler(CardSet *set, const QByteArray &data)
QString
errorMsg
;
int
errorLine
,
errorColumn
;
if
(
!
doc
.
setContent
(
bufferContents
,
&
errorMsg
,
&
errorLine
,
&
errorColumn
))
qDebug
(
QString
(
"error: %1, line=%2, column=%3"
).
arg
(
errorMsg
).
arg
(
errorLine
).
arg
(
errorColumn
).
toLatin1
())
;
qDebug
(
)
<<
"error:"
<<
errorMsg
<<
"line:"
<<
errorLine
<<
"column:"
<<
errorColumn
;
QDomNodeList
divs
=
doc
.
elementsByTagName
(
"div"
);
for
(
int
i
=
0
;
i
<
divs
.
size
();
++
i
)
{
...
...
@@ -195,21 +202,19 @@ int OracleImporter::importTextSpoiler(CardSet *set, const QByteArray &data)
return
cards
;
}
QString
OracleImporter
::
get
URLFromName
(
QString
n
ame
)
const
QString
OracleImporter
::
get
PictureUrl
(
QString
url
,
int
cardId
,
QString
name
,
const
QString
&
setN
ame
)
const
{
return
pictureUrl
.
arg
(
name
.
replace
(
"Æther"
,
"Aether"
)
return
url
.
replace
(
"!cardid!"
,
QString
::
number
(
cardId
)).
replace
(
"!set!"
,
setName
).
replace
(
"!name!"
,
name
.
replace
(
"ö"
,
"o"
)
.
remove
(
'\''
)
.
remove
(
"//"
)
.
remove
(
','
)
.
remove
(
':'
)
.
remove
(
'.'
)
//
.remove('\'')
.
remove
(
"
//
"
)
//
.remove(',')
//
.remove(':')
//
.remove('.')
.
remove
(
QRegExp
(
"
\\
(.*
\\
)"
))
.
simplified
()
.
replace
(
' '
,
'_'
)
.
replace
(
'-'
,
'_'
)
//
.replace(' ', '_')
//
.replace('-', '_')
);
}
...
...
oracle/src/oracleimporter.h
View file @
3a5fce96
...
...
@@ -25,13 +25,13 @@ class OracleImporter : public CardDatabase {
Q_OBJECT
private:
QList
<
SetToDownload
>
allSets
,
setsToDownload
;
QString
pictureUrl
,
setUrl
;
QString
pictureUrl
,
pictureUrlHq
,
pictureUrlSt
,
setUrl
;
QString
dataDir
;
int
setIndex
;
int
reqId
;
QBuffer
*
buffer
;
QHttp
*
http
;
QString
get
URLFromName
(
QString
n
ame
)
const
;
QString
get
PictureUrl
(
QString
url
,
int
cardId
,
QString
name
,
const
QString
&
setN
ame
)
const
;
void
downloadNextFile
();
void
readSetsFromXml
(
QXmlStreamReader
&
xml
);
...
...
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