fix: conflicts && add: new translation

This commit is contained in:
Zack 2014-10-10 14:56:05 +02:00
commit 9169d3a804
62 changed files with 7058 additions and 907 deletions

View file

@ -21,7 +21,7 @@ Dependencies:
- [protobuf](http://code.google.com/p/protobuf/) - [protobuf](http://code.google.com/p/protobuf/)
- [CMake](http://www.cmake.org/) - [CMake](http://www.cmake.org/)
The server requires an additional dependency: The server requires an additional dependency when compiled under Qt4:
- [libgcrypt](http://www.gnu.org/software/libgcrypt/) - [libgcrypt](http://www.gnu.org/software/libgcrypt/)

View file

@ -51,21 +51,24 @@ Section "Application" SecApplication
SectionEnd SectionEnd
Section "Update configuration" SecUpdateConfig Section "Update configuration" SecUpdateConfig
WriteRegStr HKCU "Software\Cockatrice\Cockatrice\paths" "carddatabase" "$APPDATA\Cockatrice\cards.xml" SetShellVarContext current
WriteRegStr HKCU "Software\Cockatrice\Cockatrice\paths" "decks" "$APPDATA\Cockatrice\decks" WriteRegStr HKCU "Software\Cockatrice\Cockatrice\paths" "carddatabase" "$LOCALAPPDATA\Cockatrice\cards.xml"
WriteRegStr HKCU "Software\Cockatrice\Cockatrice\paths" "pics" "$APPDATA\Cockatrice\pics" WriteRegStr HKCU "Software\Cockatrice\Cockatrice\paths" "decks" "$LOCALAPPDATA\Cockatrice\decks"
WriteRegStr HKCU "Software\Cockatrice\Cockatrice\sound" "path" "$APPDATA\Cockatrice\sounds" WriteRegStr HKCU "Software\Cockatrice\Cockatrice\paths" "pics" "$LOCALAPPDATA\Cockatrice\pics"
WriteRegStr HKCU "Software\Cockatrice\Cockatrice\sound" "path" "$LOCALAPPDATA\Cockatrice\sounds"
SectionEnd SectionEnd
Section "Start menu item" SecStartMenu Section "Start menu item" SecStartMenu
SetShellVarContext all
createDirectory "$SMPROGRAMS\Cockatrice" createDirectory "$SMPROGRAMS\Cockatrice"
createShortCut "$SMPROGRAMS\Cockatrice\Cockatrice.lnk" "$INSTDIR\cockatrice.exe" '--debug-output' createShortCut "$SMPROGRAMS\Cockatrice\Cockatrice.lnk" "$INSTDIR\cockatrice.exe" '--debug-output'
createShortCut "$SMPROGRAMS\Cockatrice\Oracle.lnk" "$INSTDIR\oracle.exe" createShortCut "$SMPROGRAMS\Cockatrice\Oracle.lnk" "$INSTDIR\oracle.exe"
createShortCut "$SMPROGRAMS\Cockatrice\Servatrice.lnk" "$INSTDIR\servatrice.exe"
createShortCut "$SMPROGRAMS\Cockatrice\Usermanual.lnk" "$INSTDIR\Usermanual.pdf" createShortCut "$SMPROGRAMS\Cockatrice\Usermanual.lnk" "$INSTDIR\Usermanual.pdf"
SectionEnd SectionEnd
Section Uninstall Section Uninstall
SetShellVarContext all SetShellVarContext all
RMDir /r "$INSTDIR\zonebg" RMDir /r "$INSTDIR\zonebg"
RMDir /r "$INSTDIR\plugins" RMDir /r "$INSTDIR\plugins"
RMDir /r "$INSTDIR\sounds" RMDir /r "$INSTDIR\sounds"
@ -73,18 +76,23 @@ SetShellVarContext all
Delete "$INSTDIR\uninstall.exe" Delete "$INSTDIR\uninstall.exe"
Delete "$INSTDIR\cockatrice.exe" Delete "$INSTDIR\cockatrice.exe"
Delete "$INSTDIR\oracle.exe" Delete "$INSTDIR\oracle.exe"
Delete "$INSTDIR\servatrice.exe"
Delete "$INSTDIR\Usermanual.pdf" Delete "$INSTDIR\Usermanual.pdf"
Delete "$INSTDIR\libprotobuf.lib" Delete "$INSTDIR\libprotobuf.lib"
Delete "$INSTDIR\Qt*.dll" Delete "$INSTDIR\Qt*.dll"
Delete "$INSTDIR\icu*.dll" Delete "$INSTDIR\icu*.dll"
Delete "$INSTDIR\qt.conf" Delete "$INSTDIR\qt.conf"
Delete "$INSTDIR\qdebug.txt" Delete "$INSTDIR\qdebug.txt"
Delete "$INSTDIR\servatrice.sql"
Delete "$INSTDIR\servatrice.ini.example"
RMDir "$INSTDIR" RMDir "$INSTDIR"
RMDir "$SMPROGRAMS\Cockatrice" RMDir "$SMPROGRAMS\Cockatrice"
DeleteRegKey HKCU "Software\Cockatrice"
DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Cockatrice" DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Cockatrice"
SetShellVarContext current
DeleteRegKey HKCU "Software\Cockatrice"
SectionEnd SectionEnd
LangString DESC_SecApplication ${LANG_ENGLISH} "Cockatrice program files" LangString DESC_SecApplication ${LANG_ENGLISH} "Cockatrice program files"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 201 KiB

After

Width:  |  Height:  |  Size: 151 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 345 KiB

After

Width:  |  Height:  |  Size: 15 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 6.1 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 43 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 192 KiB

View file

@ -76,8 +76,8 @@ void SetList::sortByKey()
qSort(begin(), end(), CompareFunctor()); qSort(begin(), end(), CompareFunctor());
} }
PictureToLoad::PictureToLoad(CardInfo *_card, bool _stripped, bool _hq) PictureToLoad::PictureToLoad(CardInfo *_card, bool _hq)
: card(_card), stripped(_stripped), setIndex(0), hq(_hq) : card(_card), setIndex(0), hq(_hq)
{ {
if (card) { if (card) {
sortedSets = card->getSets(); sortedSets = card->getSets();
@ -135,14 +135,14 @@ void PictureLoader::processLoadQueue()
mutex.unlock(); mutex.unlock();
//The list of paths to the folders in which to search for images //The list of paths to the folders in which to search for images
QList<QString> picsPaths = QList<QString>() << _picsPath + "/CUSTOM/" + ptl.getCard()->getCorrectedName() + ".full"; QList<QString> picsPaths = QList<QString>() << _picsPath + "/CUSTOM/" + ptl.getCard()->getCorrectedName();
QString setName=ptl.getSetName(); QString setName=ptl.getSetName();
if(!setName.isEmpty()) if(!setName.isEmpty())
{ {
picsPaths << _picsPath + "/" + setName + "/" + ptl.getCard()->getCorrectedName() + ".full" picsPaths << _picsPath + "/" + setName + "/" + ptl.getCard()->getCorrectedName()
<< _picsPath + "/downloadedPics/" + setName + "/" + ptl.getCard()->getCorrectedName() + ".full"; << _picsPath + "/downloadedPics/" + setName + "/" + ptl.getCard()->getCorrectedName();
} }
QImage image; QImage image;
@ -153,6 +153,12 @@ void PictureLoader::processLoadQueue()
//Iterates through the list of paths, searching for images with the desired name with any QImageReader-supported extension //Iterates through the list of paths, searching for images with the desired name with any QImageReader-supported extension
for (int i = 0; i < picsPaths.length() && !found; i ++) { for (int i = 0; i < picsPaths.length() && !found; i ++) {
imgReader.setFileName(picsPaths.at(i)); imgReader.setFileName(picsPaths.at(i));
if (imgReader.read(&image)) {
emit imageLoaded(ptl.getCard(), image);
found = true;
break;
}
imgReader.setFileName(picsPaths.at(i) + ".full");
if (imgReader.read(&image)) { if (imgReader.read(&image)) {
emit imageLoaded(ptl.getCard(), image); emit imageLoaded(ptl.getCard(), image);
found = true; found = true;
@ -274,11 +280,7 @@ void PictureLoader::picDownloadFinished(QNetworkReply *reply)
return; return;
} }
QString suffix; QFile newPic(picsPath + "/downloadedPics/" + setName + "/" + cardBeingDownloaded.getCard()->getCorrectedName() + extension);
if (!cardBeingDownloaded.getStripped())
suffix = ".full";
QFile newPic(picsPath + "/downloadedPics/" + setName + "/" + cardBeingDownloaded.getCard()->getCorrectedName() + suffix + extension);
if (!newPic.open(QIODevice::WriteOnly)) if (!newPic.open(QIODevice::WriteOnly))
return; return;
newPic.write(picData); newPic.write(picData);
@ -306,11 +308,11 @@ void PictureLoader::picDownloadFinished(QNetworkReply *reply)
startNextPicDownload(); startNextPicDownload();
} }
void PictureLoader::loadImage(CardInfo *card, bool stripped) void PictureLoader::loadImage(CardInfo *card)
{ {
QMutexLocker locker(&mutex); QMutexLocker locker(&mutex);
loadQueue.append(PictureToLoad(card, stripped)); loadQueue.append(PictureToLoad(card));
emit startLoadQueue(); emit startLoadQueue();
} }
@ -708,7 +710,7 @@ void CardDatabase::loadSetsFromXml(QXmlStreamReader &xml)
} }
} }
void CardDatabase::loadCardsFromXml(QXmlStreamReader &xml) void CardDatabase::loadCardsFromXml(QXmlStreamReader &xml, bool tokens)
{ {
while (!xml.atEnd()) { while (!xml.atEnd()) {
if (xml.readNext() == QXmlStreamReader::EndElement) if (xml.readNext() == QXmlStreamReader::EndElement)
@ -760,16 +762,38 @@ void CardDatabase::loadCardsFromXml(QXmlStreamReader &xml)
else if (xml.name() == "token") else if (xml.name() == "token")
isToken = xml.readElementText().toInt(); isToken = xml.readElementText().toInt();
} }
addCard(new CardInfo(this, name, isToken, manacost, type, pt, text, colors, loyalty, cipt, tableRow, sets, customPicURLs, customPicURLsHq, muids));
if (isToken == tokens) {
addCard(new CardInfo(this, name, isToken, manacost, type, pt, text, colors, loyalty, cipt, tableRow, sets, customPicURLs, customPicURLsHq, muids));
}
} }
} }
} }
CardInfo *CardNameMap::findByPrefix(const std::string &prefix) {
int count = 0;
CardInfo *found;
for (CardNameMap::iterator it = this->begin(); it != this->end(); ++it) {
if (std::mismatch(prefix.begin(), prefix.end(),
it.key().toStdString().begin()).first == prefix.end()) {
count++;
found = it.value();
}
}
return (count == 1 ? found : NULL);
}
CardInfo *CardDatabase::getCardFromMap(CardNameMap &cardMap, const QString &cardName, bool createIfNotFound) { CardInfo *CardDatabase::getCardFromMap(CardNameMap &cardMap, const QString &cardName, bool createIfNotFound) {
CardInfo *foundCard;
if (cardName.isEmpty()) if (cardName.isEmpty())
return noCard; return noCard;
else if (cardMap.contains(cardName)) else if (cardMap.contains(cardName))
return cardMap.value(cardName); return cardMap.value(cardName);
else if ((foundCard = cardMap.findByPrefix(cardName.toStdString())))
return foundCard;
else if (createIfNotFound) { else if (createIfNotFound) {
CardInfo *newCard = new CardInfo(this, cardName, true); CardInfo *newCard = new CardInfo(this, cardName, true);
newCard->addToSet(getSet("TK")); newCard->addToSet(getSet("TK"));
@ -779,7 +803,7 @@ CardInfo *CardDatabase::getCardFromMap(CardNameMap &cardMap, const QString &card
return 0; return 0;
} }
LoadStatus CardDatabase::loadFromFile(const QString &fileName) LoadStatus CardDatabase::loadFromFile(const QString &fileName, bool tokens)
{ {
QFile file(fileName); QFile file(fileName);
file.open(QIODevice::ReadOnly); file.open(QIODevice::ReadOnly);
@ -802,7 +826,7 @@ LoadStatus CardDatabase::loadFromFile(const QString &fileName)
if (xml.name() == "sets") if (xml.name() == "sets")
loadSetsFromXml(xml); loadSetsFromXml(xml);
else if (xml.name() == "cards") else if (xml.name() == "cards")
loadCardsFromXml(xml); loadCardsFromXml(xml, tokens);
} }
} }
} }
@ -837,7 +861,9 @@ bool CardDatabase::saveToFile(const QString &fileName, bool tokens)
QHashIterator<QString, CardInfo *> cardIterator(cards); QHashIterator<QString, CardInfo *> cardIterator(cards);
while (cardIterator.hasNext()) { while (cardIterator.hasNext()) {
CardInfo *card = cardIterator.next().value(); CardInfo *card = cardIterator.next().value();
xml << card; if (tokens == card->getIsToken()) {
xml << card;
}
} }
xml.writeEndElement(); // cards xml.writeEndElement(); // cards
@ -871,7 +897,7 @@ LoadStatus CardDatabase::loadCardDatabase(const QString &path, bool tokens)
{ {
LoadStatus tempLoadStatus = NotLoaded; LoadStatus tempLoadStatus = NotLoaded;
if (!path.isEmpty()) if (!path.isEmpty())
tempLoadStatus = loadFromFile(path); tempLoadStatus = loadFromFile(path, tokens);
if (tempLoadStatus == Ok) { if (tempLoadStatus == Ok) {
SetList allSets; SetList allSets;
@ -936,7 +962,7 @@ void CardDatabase::cacheCardPixmaps(const QStringList &cardNames)
void CardDatabase::loadImage(CardInfo *card) void CardDatabase::loadImage(CardInfo *card)
{ {
pictureLoader->loadImage(card, false); pictureLoader->loadImage(card);
} }
void CardDatabase::imageLoaded(CardInfo *card, QImage image) void CardDatabase::imageLoaded(CardInfo *card, QImage image)

View file

@ -47,14 +47,12 @@ public:
class PictureToLoad { class PictureToLoad {
private: private:
CardInfo *card; CardInfo *card;
bool stripped;
SetList sortedSets; SetList sortedSets;
int setIndex; int setIndex;
bool hq; bool hq;
public: public:
PictureToLoad(CardInfo *_card = 0, bool _stripped = false, bool _hq = true); PictureToLoad(CardInfo *_card = 0, bool _hq = true);
CardInfo *getCard() const { return card; } CardInfo *getCard() const { return card; }
bool getStripped() const { return stripped; }
QString getSetName() const; QString getSetName() const;
bool nextSet(); bool nextSet();
bool getHq() const { return hq; } bool getHq() const { return hq; }
@ -79,7 +77,7 @@ public:
void setPicsPath(const QString &path); void setPicsPath(const QString &path);
void setPicDownload(bool _picDownload); void setPicDownload(bool _picDownload);
void setPicDownloadHq(bool _picDownloadHq); void setPicDownloadHq(bool _picDownloadHq);
void loadImage(CardInfo *card, bool stripped); void loadImage(CardInfo *card);
private slots: private slots:
void picDownloadFinished(QNetworkReply *reply); void picDownloadFinished(QNetworkReply *reply);
public slots: public slots:
@ -182,7 +180,13 @@ signals:
enum LoadStatus { Ok, VersionTooOld, Invalid, NotLoaded, FileError, NoCards }; enum LoadStatus { Ok, VersionTooOld, Invalid, NotLoaded, FileError, NoCards };
typedef QHash<QString, CardInfo *> CardNameMap;
class CardNameMap: public QHash<QString, CardInfo *>
{
public:
CardInfo *findByPrefix(const std::string &prefix);
};
typedef QHash<QString, CardSet *> SetNameMap; typedef QHash<QString, CardSet *> SetNameMap;
class CardDatabase : public QObject { class CardDatabase : public QObject {
@ -210,7 +214,7 @@ protected:
LoadStatus loadStatus; LoadStatus loadStatus;
private: private:
static const int versionNeeded; static const int versionNeeded;
void loadCardsFromXml(QXmlStreamReader &xml); void loadCardsFromXml(QXmlStreamReader &xml, bool tokens);
void loadSetsFromXml(QXmlStreamReader &xml); void loadSetsFromXml(QXmlStreamReader &xml);
CardInfo *getCardFromMap(CardNameMap &cardMap, const QString &cardName, bool createIfNotFound); CardInfo *getCardFromMap(CardNameMap &cardMap, const QString &cardName, bool createIfNotFound);
@ -231,7 +235,7 @@ public:
CardSet *getSet(const QString &setName); CardSet *getSet(const QString &setName);
QList<CardInfo *> getCardList() const { return cards.values(); } QList<CardInfo *> getCardList() const { return cards.values(); }
SetList getSetList() const; SetList getSetList() const;
LoadStatus loadFromFile(const QString &fileName); LoadStatus loadFromFile(const QString &fileName, bool tokens = false);
bool saveToFile(const QString &fileName, bool tokens = false); bool saveToFile(const QString &fileName, bool tokens = false);
QStringList getAllColors() const; QStringList getAllColors() const;
QStringList getAllMainCardTypes() const; QStringList getAllMainCardTypes() const;

View file

@ -84,7 +84,9 @@ void CardDragItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
sc->removeItem(c); sc->removeItem(c);
} }
} }
currentZone->handleDropEvent(dragItemList, startZone, (sp - currentZone->scenePos()).toPoint());
if(currentZone)
currentZone->handleDropEvent(dragItemList, startZone, (sp - currentZone->scenePos()).toPoint());
event->accept(); event->accept();
} }

View file

@ -4,6 +4,8 @@
#include <QGridLayout> #include <QGridLayout>
#include <QHBoxLayout> #include <QHBoxLayout>
#include <QDialogButtonBox> #include <QDialogButtonBox>
#include <QDebug>
#include <iostream>
#include "dlg_connect.h" #include "dlg_connect.h"
DlgConnect::DlgConnect(QWidget *parent) DlgConnect::DlgConnect(QWidget *parent)
@ -32,6 +34,19 @@ DlgConnect::DlgConnect(QWidget *parent)
savePasswordCheckBox = new QCheckBox(tr("&Save password")); savePasswordCheckBox = new QCheckBox(tr("&Save password"));
savePasswordCheckBox->setChecked(settings.value("save_password", 1).toInt()); savePasswordCheckBox->setChecked(settings.value("save_password", 1).toInt());
autoConnectCheckBox = new QCheckBox(tr("A&uto connect at start"));
if(savePasswordCheckBox->isChecked())
{
autoConnectCheckBox->setChecked(settings.value("auto_connect", 0).toInt());
autoConnectCheckBox->setEnabled(true);
} else {
settings.setValue("auto_connect", 0);
autoConnectCheckBox->setChecked(0);
autoConnectCheckBox->setEnabled(false);
}
connect(savePasswordCheckBox, SIGNAL(stateChanged(int)), this, SLOT(passwordSaved(int)));
QGridLayout *grid = new QGridLayout; QGridLayout *grid = new QGridLayout;
grid->addWidget(hostLabel, 0, 0); grid->addWidget(hostLabel, 0, 0);
grid->addWidget(hostEdit, 0, 1); grid->addWidget(hostEdit, 0, 1);
@ -42,10 +57,11 @@ DlgConnect::DlgConnect(QWidget *parent)
grid->addWidget(passwordLabel, 3, 0); grid->addWidget(passwordLabel, 3, 0);
grid->addWidget(passwordEdit, 3, 1); grid->addWidget(passwordEdit, 3, 1);
grid->addWidget(savePasswordCheckBox, 4, 0, 1, 2); grid->addWidget(savePasswordCheckBox, 4, 0, 1, 2);
grid->addWidget(autoConnectCheckBox, 5, 0, 1, 2);
QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
connect(buttonBox, SIGNAL(accepted()), this, SLOT(actOk())); connect(buttonBox, SIGNAL(accepted()), this, SLOT(actOk()));
connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject())); connect(buttonBox, SIGNAL(rejected()), this, SLOT(actCancel()));
QVBoxLayout *mainLayout = new QVBoxLayout; QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->addLayout(grid); mainLayout->addLayout(grid);
@ -57,6 +73,16 @@ DlgConnect::DlgConnect(QWidget *parent)
setMinimumWidth(300); setMinimumWidth(300);
} }
void DlgConnect::passwordSaved(int state)
{
if(savePasswordCheckBox->isChecked()) {
autoConnectCheckBox->setEnabled(true);
} else {
autoConnectCheckBox->setChecked(0);
autoConnectCheckBox->setEnabled(false);
}
}
void DlgConnect::actOk() void DlgConnect::actOk()
{ {
QSettings settings; QSettings settings;
@ -66,7 +92,19 @@ void DlgConnect::actOk()
settings.setValue("playername", playernameEdit->text()); settings.setValue("playername", playernameEdit->text());
settings.setValue("password", savePasswordCheckBox->isChecked() ? passwordEdit->text() : QString()); settings.setValue("password", savePasswordCheckBox->isChecked() ? passwordEdit->text() : QString());
settings.setValue("save_password", savePasswordCheckBox->isChecked() ? 1 : 0); settings.setValue("save_password", savePasswordCheckBox->isChecked() ? 1 : 0);
settings.setValue("auto_connect", autoConnectCheckBox->isChecked() ? 1 : 0);
settings.endGroup(); settings.endGroup();
accept(); accept();
} }
void DlgConnect::actCancel()
{
QSettings settings;
settings.beginGroup("server");
settings.setValue("save_password", savePasswordCheckBox->isChecked() ? 1 : 0);
settings.setValue("auto_connect", autoConnectCheckBox->isChecked() ? 1 : 0);
settings.endGroup();
reject();
}

View file

@ -18,10 +18,12 @@ public:
QString getPassword() const { return passwordEdit->text(); } QString getPassword() const { return passwordEdit->text(); }
private slots: private slots:
void actOk(); void actOk();
void actCancel();
void passwordSaved(int state);
private: private:
QLabel *hostLabel, *portLabel, *playernameLabel, *passwordLabel; QLabel *hostLabel, *portLabel, *playernameLabel, *passwordLabel;
QLineEdit *hostEdit, *portEdit, *playernameEdit, *passwordEdit; QLineEdit *hostEdit, *portEdit, *playernameEdit, *passwordEdit;
QCheckBox *savePasswordCheckBox; QCheckBox *savePasswordCheckBox, *autoConnectCheckBox;
}; };
#endif #endif

View file

@ -56,6 +56,10 @@ bool KeySignals::eventFilter(QObject * /*object*/, QEvent *event) {
&& kevent->modifiers().testFlag(Qt::ControlModifier) ) && kevent->modifiers().testFlag(Qt::ControlModifier) )
emit onCtrlAltRBracket(); emit onCtrlAltRBracket();
break;
case Qt::Key_S:
emit onS();
break; break;
default: default:
return false; return false;

View file

@ -18,6 +18,7 @@ signals:
void onCtrlAltEqual(); void onCtrlAltEqual();
void onCtrlAltLBracket(); void onCtrlAltLBracket();
void onCtrlAltRBracket(); void onCtrlAltRBracket();
void onS();
protected: protected:
virtual bool eventFilter(QObject *, QEvent *event); virtual bool eventFilter(QObject *, QEvent *event);

View file

@ -100,7 +100,7 @@ Player::Player(const ServerInfo_User &info, int _id, bool _local, TabGame *_pare
: QObject(_parent), : QObject(_parent),
game(_parent), game(_parent),
shortcutsActive(false), shortcutsActive(false),
defaultNumberTopCards(3), defaultNumberTopCards(1),
lastTokenDestroy(true), lastTokenDestroy(true),
id(_id), id(_id),
active(false), active(false),
@ -1092,8 +1092,12 @@ void Player::eventCreateToken(const Event_CreateToken &event)
return; return;
CardItem *card = new CardItem(this, QString::fromStdString(event.card_name()), event.card_id()); CardItem *card = new CardItem(this, QString::fromStdString(event.card_name()), event.card_id());
// use db PT if not provided in event
if (!QString::fromStdString(event.pt()).isEmpty())
card->setPT(QString::fromStdString(event.pt()));
else
card->setPT(db->getCard(QString::fromStdString(event.card_name()))->getPowTough());
card->setColor(QString::fromStdString(event.color())); card->setColor(QString::fromStdString(event.color()));
card->setPT(QString::fromStdString(event.pt()));
card->setAnnotation(QString::fromStdString(event.annotation())); card->setAnnotation(QString::fromStdString(event.annotation()));
card->setDestroyOnZoneChange(event.destroy_on_zone_change()); card->setDestroyOnZoneChange(event.destroy_on_zone_change());

View file

@ -48,6 +48,8 @@ SettingsCache::SettingsCache()
priceTagSource = settings->value("deckeditor/pricetagsource", 0).toInt(); priceTagSource = settings->value("deckeditor/pricetagsource", 0).toInt();
ignoreUnregisteredUsers = settings->value("chat/ignore_unregistered", false).toBool(); ignoreUnregisteredUsers = settings->value("chat/ignore_unregistered", false).toBool();
attemptAutoConnect = settings->value("server/auto_connect", 0).toBool();
} }
void SettingsCache::setLang(const QString &_lang) void SettingsCache::setLang(const QString &_lang)
@ -267,6 +269,12 @@ void SettingsCache::setMainWindowGeometry(const QByteArray &_mainWindowGeometry)
settings->setValue("interface/main_window_geometry", mainWindowGeometry); settings->setValue("interface/main_window_geometry", mainWindowGeometry);
} }
void SettingsCache::setAutoConnect(const bool &_autoConnect)
{
attemptAutoConnect = _autoConnect;
settings->setValue("server/auto_connect", attemptAutoConnect ? 1 : 0);
}
void SettingsCache::copyPath(const QString &src, const QString &dst) void SettingsCache::copyPath(const QString &src, const QString &dst)
{ {
// test source && return if inexistent // test source && return if inexistent

View file

@ -57,6 +57,7 @@ private:
bool ignoreUnregisteredUsers; bool ignoreUnregisteredUsers;
QString picUrl; QString picUrl;
QString picUrlHq; QString picUrlHq;
bool attemptAutoConnect;
public: public:
SettingsCache(); SettingsCache();
const QByteArray &getMainWindowGeometry() const { return mainWindowGeometry; } const QByteArray &getMainWindowGeometry() const { return mainWindowGeometry; }
@ -93,6 +94,7 @@ public:
QString getPicUrl() const { return picUrl; } QString getPicUrl() const { return picUrl; }
QString getPicUrlHq() const { return picUrlHq; } QString getPicUrlHq() const { return picUrlHq; }
void copyPath(const QString &src, const QString &dst); void copyPath(const QString &src, const QString &dst);
bool getAutoConnect() const { return attemptAutoConnect; }
public slots: public slots:
void setMainWindowGeometry(const QByteArray &_mainWindowGeometry); void setMainWindowGeometry(const QByteArray &_mainWindowGeometry);
void setLang(const QString &_lang); void setLang(const QString &_lang);
@ -127,6 +129,7 @@ public slots:
void setIgnoreUnregisteredUsers(bool _ignoreUnregisteredUsers); void setIgnoreUnregisteredUsers(bool _ignoreUnregisteredUsers);
void setPicUrl(const QString &_picUrl); void setPicUrl(const QString &_picUrl);
void setPicUrlHq(const QString &_picUrlHq); void setPicUrlHq(const QString &_picUrlHq);
void setAutoConnect(const bool &_autoConnect);
}; };
extern SettingsCache *settingsCache; extern SettingsCache *settingsCache;

View file

@ -141,6 +141,8 @@ TabDeckEditor::TabDeckEditor(TabSupervisor *_tabSupervisor, QWidget *parent)
#endif #endif
deckView->installEventFilter(&deckViewKeySignals); deckView->installEventFilter(&deckViewKeySignals);
connect(deckView->selectionModel(), SIGNAL(currentRowChanged(const QModelIndex &, const QModelIndex &)), this, SLOT(updateCardInfoRight(const QModelIndex &, const QModelIndex &))); connect(deckView->selectionModel(), SIGNAL(currentRowChanged(const QModelIndex &, const QModelIndex &)), this, SLOT(updateCardInfoRight(const QModelIndex &, const QModelIndex &)));
connect(deckView, SIGNAL(doubleClicked(const QModelIndex &)), this, SLOT(actSwapCard()));
connect(&deckViewKeySignals, SIGNAL(onS()), this, SLOT(actSwapCard()));
connect(&deckViewKeySignals, SIGNAL(onEnter()), this, SLOT(actIncrement())); connect(&deckViewKeySignals, SIGNAL(onEnter()), this, SLOT(actIncrement()));
connect(&deckViewKeySignals, SIGNAL(onCtrlAltEqual()), this, SLOT(actIncrement())); connect(&deckViewKeySignals, SIGNAL(onCtrlAltEqual()), this, SLOT(actIncrement()));
connect(&deckViewKeySignals, SIGNAL(onCtrlAltMinus()), this, SLOT(actDecrement())); connect(&deckViewKeySignals, SIGNAL(onCtrlAltMinus()), this, SLOT(actDecrement()));
@ -571,6 +573,27 @@ void TabDeckEditor::addCardHelper(QString zoneName)
setModified(true); setModified(true);
} }
void TabDeckEditor::actSwapCard()
{
const QModelIndex currentIndex = deckView->selectionModel()->currentIndex();
if (!currentIndex.isValid())
return;
const QString cardName = currentIndex.sibling(currentIndex.row(), 1).data().toString();
const QModelIndex gparent = currentIndex.parent().parent();
if (!gparent.isValid())
return;
const QString zoneName = gparent.sibling(gparent.row(), 1).data().toString();
actDecrement();
const QString otherZoneName = zoneName == "Maindeck" ? "side" : "main";
QModelIndex newCardIndex = deckModel->addCard(cardName, otherZoneName);
recursiveExpand(newCardIndex);
deckView->setCurrentIndex(newCardIndex);
setModified(true);
}
void TabDeckEditor::actAddCard() void TabDeckEditor::actAddCard()
{ {
addCardHelper("main"); addCardHelper("main");

View file

@ -53,6 +53,7 @@ private slots:
void actClearSearch(); void actClearSearch();
void actSwapCard();
void actAddCard(); void actAddCard();
void actAddCardToSideboard(); void actAddCardToSideboard();
void actRemoveCard(); void actRemoveCard();

View file

@ -359,7 +359,7 @@ void MainWindow::createMenus()
} }
MainWindow::MainWindow(QWidget *parent) MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent), localServer(0) : QMainWindow(parent), localServer(0), bHasActivated(false)
{ {
QPixmapCache::setCacheLimit(200000); QPixmapCache::setCacheLimit(200000);
@ -417,5 +417,16 @@ void MainWindow::changeEvent(QEvent *event)
{ {
if (event->type() == QEvent::LanguageChange) if (event->type() == QEvent::LanguageChange)
retranslateUi(); retranslateUi();
else if(event->type() == QEvent::ActivationChange) {
if(isActiveWindow() && !bHasActivated){
bHasActivated = true;
if(settingsCache->getAutoConnect()) {
qDebug() << "Attempting auto-connect...";
DlgConnect dlg(this);
client->connectToServer(dlg.getHost(), dlg.getPort(), dlg.getPlayerName(), dlg.getPassword());
}
}
}
QMainWindow::changeEvent(event); QMainWindow::changeEvent(event);
} }

View file

@ -71,6 +71,7 @@ private:
QThread *clientThread; QThread *clientThread;
LocalServer *localServer; LocalServer *localServer;
bool bHasActivated;
public: public:
MainWindow(QWidget *parent = 0); MainWindow(QWidget *parent = 0);
~MainWindow(); ~MainWindow();

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS> <!DOCTYPE TS>
<TS version="2.1" language="cs_CZ"> <TS version="2.0" language="cs_CZ">
<context> <context>
<name>AbstractCounter</name> <name>AbstractCounter</name>
<message> <message>
@ -43,23 +43,23 @@
</message> </message>
<message> <message>
<source>Path to hand background:</source> <source>Path to hand background:</source>
<translation type="vanished">Cesta k pozadí ruky:</translation> <translation type="obsolete">Cesta k pozadí ruky:</translation>
</message> </message>
<message> <message>
<source>Path to stack background:</source> <source>Path to stack background:</source>
<translation type="vanished">Cesta k pozadí stacku:</translation> <translation type="obsolete">Cesta k pozadí stacku:</translation>
</message> </message>
<message> <message>
<source>Path to table background:</source> <source>Path to table background:</source>
<translation type="vanished">Cesta k pozadí stolu:</translation> <translation type="obsolete">Cesta k pozadí stolu:</translation>
</message> </message>
<message> <message>
<source>Path to player info background:</source> <source>Path to player info background:</source>
<translation type="vanished">Cesta k pozadí informací o uživateli:</translation> <translation type="obsolete">Cesta k pozadí informací o uživateli:</translation>
</message> </message>
<message> <message>
<source>Path to picture of card back:</source> <source>Path to picture of card back:</source>
<translation type="vanished">Cesta k rubu karet:</translation> <translation type="obsolete">Cesta k rubu karet:</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="366"/> <location filename="../src/dlg_settings.cpp" line="366"/>
@ -1063,7 +1063,7 @@ This is only saved for moderators and cannot be seen by the banned person.</sour
<name>DeckEditorSettingsPage</name> <name>DeckEditorSettingsPage</name>
<message> <message>
<source>Enable &amp;price tag feature (using data from blacklotusproject.com)</source> <source>Enable &amp;price tag feature (using data from blacklotusproject.com)</source>
<translation type="vanished">&amp;Povolit zobrazovaní cen (použijí se data z blacklotusproject.com)</translation> <translation type="obsolete">&amp;Povolit zobrazovaní cen (použijí se data z blacklotusproject.com)</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="600"/> <location filename="../src/dlg_settings.cpp" line="600"/>
@ -1202,30 +1202,35 @@ This is only saved for moderators and cannot be seen by the banned person.</sour
<context> <context>
<name>DlgConnect</name> <name>DlgConnect</name>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="15"/> <location filename="../src/dlg_connect.cpp" line="17"/>
<source>&amp;Host:</source> <source>&amp;Host:</source>
<translation>&amp;Hostitel:</translation> <translation>&amp;Hostitel:</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="19"/> <location filename="../src/dlg_connect.cpp" line="21"/>
<source>&amp;Port:</source> <source>&amp;Port:</source>
<translation>&amp;Port:</translation> <translation>&amp;Port:</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="23"/> <location filename="../src/dlg_connect.cpp" line="25"/>
<source>Player &amp;name:</source> <source>Player &amp;name:</source>
<translation>Jméno &amp;hráče:</translation> <translation>Jméno &amp;hráče:</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="27"/> <location filename="../src/dlg_connect.cpp" line="29"/>
<source>P&amp;assword:</source> <source>P&amp;assword:</source>
<translation>H&amp;eslo:</translation> <translation>H&amp;eslo:</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="32"/> <location filename="../src/dlg_connect.cpp" line="34"/>
<source>&amp;Save password</source> <source>&amp;Save password</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../src/dlg_connect.cpp" line="37"/>
<source>A&amp;uto connect at start</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>&amp;OK</source> <source>&amp;OK</source>
<translation type="obsolete">&amp;OK</translation> <translation type="obsolete">&amp;OK</translation>
@ -1235,7 +1240,7 @@ This is only saved for moderators and cannot be seen by the banned person.</sour
<translation type="obsolete">&amp;Zrušit</translation> <translation type="obsolete">&amp;Zrušit</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="55"/> <location filename="../src/dlg_connect.cpp" line="71"/>
<source>Connect to server</source> <source>Connect to server</source>
<translation>Připojit k serveru</translation> <translation>Připojit k serveru</translation>
</message> </message>
@ -1636,7 +1641,7 @@ This is only saved for moderators and cannot be seen by the banned person.</sour
</message> </message>
<message> <message>
<source>Your card database is invalid. Would you like to go back and set the correct path?</source> <source>Your card database is invalid. Would you like to go back and set the correct path?</source>
<translation type="vanished">Cesta k databázi je neplatná. Chcete se vrátit a nastavit správnou?</translation> <translation type="obsolete">Cesta k databázi je neplatná. Chcete se vrátit a nastavit správnou?</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="776"/> <location filename="../src/dlg_settings.cpp" line="776"/>
@ -2022,7 +2027,7 @@ Would you like to change your database location setting?</source>
</message> </message>
<message> <message>
<source>Path to card database:</source> <source>Path to card database:</source>
<translation type="vanished">Karetní databáze:</translation> <translation type="obsolete">Karetní databáze:</translation>
</message> </message>
</context> </context>
<context> <context>
@ -2141,7 +2146,7 @@ Reason for shutdown: %1</source>
</message> </message>
<message> <message>
<source>Czech:</source> <source>Czech:</source>
<translation type="vanished">Čeština:</translation> <translation type="obsolete">Čeština:</translation>
</message> </message>
<message> <message>
<source>Slovak:</source> <source>Slovak:</source>
@ -2204,7 +2209,7 @@ Reason for shutdown: %1</source>
</message> </message>
<message> <message>
<source>Invalid login data.</source> <source>Invalid login data.</source>
<translation type="vanished">Nesprávné údaje uživatele.</translation> <translation type="obsolete">Nesprávné údaje uživatele.</translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="242"/> <location filename="../src/window_main.cpp" line="242"/>
@ -2518,12 +2523,12 @@ Lokální verze je %1, verze serveru je %2.</translation>
<message> <message>
<source>%1 has loaded a deck (%2).</source> <source>%1 has loaded a deck (%2).</source>
<comment>female</comment> <comment>female</comment>
<translation type="vanished">%1 nahrál balíček %2.</translation> <translation type="obsolete">%1 nahrál balíček %2.</translation>
</message> </message>
<message> <message>
<source>%1 has loaded a deck (%2).</source> <source>%1 has loaded a deck (%2).</source>
<comment>male</comment> <comment>male</comment>
<translation type="vanished">%1 nahrál balíček %2.</translation> <translation type="obsolete">%1 nahrál balíček %2.</translation>
</message> </message>
<message> <message>
<location filename="../src/messagelogwidget.cpp" line="93"/> <location filename="../src/messagelogwidget.cpp" line="93"/>
@ -4624,7 +4629,7 @@ Lokální verze je %1, verze serveru je %2.</translation>
</message> </message>
<message> <message>
<source>Administration</source> <source>Administration</source>
<translation type="vanished">Administrace</translation> <translation type="obsolete">Administrace</translation>
</message> </message>
</context> </context>
<context> <context>
@ -4933,7 +4938,7 @@ Prosím vložte jméno:</translation>
</message> </message>
<message> <message>
<source>Deck storage</source> <source>Deck storage</source>
<translation type="vanished">Uložiště balíčků</translation> <translation type="obsolete">Uložiště balíčků</translation>
</message> </message>
</context> </context>
<context> <context>
@ -5218,14 +5223,14 @@ Prosím vložte jméno:</translation>
<name>TabServer</name> <name>TabServer</name>
<message> <message>
<source>Server</source> <source>Server</source>
<translation type="vanished">Server</translation> <translation type="obsolete">Server</translation>
</message> </message>
</context> </context>
<context> <context>
<name>TabUserLists</name> <name>TabUserLists</name>
<message> <message>
<source>User lists</source> <source>User lists</source>
<translation type="vanished">Seznam uživatelů</translation> <translation type="obsolete">Seznam uživatelů</translation>
</message> </message>
<message> <message>
<location filename="../src/tab_userlists.cpp" line="48"/> <location filename="../src/tab_userlists.cpp" line="48"/>

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS> <!DOCTYPE TS>
<TS version="2.1" language="de_DE"> <TS version="2.0" language="de_DE">
<context> <context>
<name></name> <name></name>
<message> <message>
@ -66,23 +66,23 @@
</message> </message>
<message> <message>
<source>Path to hand background:</source> <source>Path to hand background:</source>
<translation type="vanished">Hintergrundbild für die Hand:</translation> <translation type="obsolete">Hintergrundbild für die Hand:</translation>
</message> </message>
<message> <message>
<source>Path to stack background:</source> <source>Path to stack background:</source>
<translation type="vanished">Hintergrundbild für den Stapel:</translation> <translation type="obsolete">Hintergrundbild für den Stapel:</translation>
</message> </message>
<message> <message>
<source>Path to table background:</source> <source>Path to table background:</source>
<translation type="vanished">Hintergrundbild für das Spielfeld:</translation> <translation type="obsolete">Hintergrundbild für das Spielfeld:</translation>
</message> </message>
<message> <message>
<source>Path to player info background:</source> <source>Path to player info background:</source>
<translation type="vanished">Hintergrundbild für den Spielerbereich:</translation> <translation type="obsolete">Hintergrundbild für den Spielerbereich:</translation>
</message> </message>
<message> <message>
<source>Path to picture of card back:</source> <source>Path to picture of card back:</source>
<translation type="vanished">Pfad zum Bild der Kartenrückseite:</translation> <translation type="obsolete">Pfad zum Bild der Kartenrückseite:</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="366"/> <location filename="../src/dlg_settings.cpp" line="366"/>
@ -1384,7 +1384,7 @@ Dies wird nur für Moderatoren gespeichert und kann von der gebannten Person nic
<name>DeckEditorSettingsPage</name> <name>DeckEditorSettingsPage</name>
<message> <message>
<source>Enable &amp;price tag feature (using data from blacklotusproject.com)</source> <source>Enable &amp;price tag feature (using data from blacklotusproject.com)</source>
<translation type="vanished">Karten&amp;preisfunktionen anschalten (benutzt Daten von blacklotusproject.com)</translation> <translation type="obsolete">Karten&amp;preisfunktionen anschalten (benutzt Daten von blacklotusproject.com)</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="600"/> <location filename="../src/dlg_settings.cpp" line="600"/>
@ -1545,30 +1545,35 @@ Dies wird nur für Moderatoren gespeichert und kann von der gebannten Person nic
<context> <context>
<name>DlgConnect</name> <name>DlgConnect</name>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="15"/> <location filename="../src/dlg_connect.cpp" line="17"/>
<source>&amp;Host:</source> <source>&amp;Host:</source>
<translation>&amp;Server:</translation> <translation>&amp;Server:</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="19"/> <location filename="../src/dlg_connect.cpp" line="21"/>
<source>&amp;Port:</source> <source>&amp;Port:</source>
<translation>&amp;Port:</translation> <translation>&amp;Port:</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="23"/> <location filename="../src/dlg_connect.cpp" line="25"/>
<source>Player &amp;name:</source> <source>Player &amp;name:</source>
<translation>Spieler&amp;name:</translation> <translation>Spieler&amp;name:</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="27"/> <location filename="../src/dlg_connect.cpp" line="29"/>
<source>P&amp;assword:</source> <source>P&amp;assword:</source>
<translation>P&amp;asswort:</translation> <translation>P&amp;asswort:</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="32"/> <location filename="../src/dlg_connect.cpp" line="34"/>
<source>&amp;Save password</source> <source>&amp;Save password</source>
<translation>Passwort &amp;speichern</translation> <translation>Passwort &amp;speichern</translation>
</message> </message>
<message>
<location filename="../src/dlg_connect.cpp" line="37"/>
<source>A&amp;uto connect at start</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>&amp;OK</source> <source>&amp;OK</source>
<translation type="obsolete">&amp;OK</translation> <translation type="obsolete">&amp;OK</translation>
@ -1578,7 +1583,7 @@ Dies wird nur für Moderatoren gespeichert und kann von der gebannten Person nic
<translation type="obsolete">&amp;Abbruch</translation> <translation type="obsolete">&amp;Abbruch</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="55"/> <location filename="../src/dlg_connect.cpp" line="71"/>
<source>Connect to server</source> <source>Connect to server</source>
<translation>Verbinde zum Server</translation> <translation>Verbinde zum Server</translation>
</message> </message>
@ -2030,7 +2035,7 @@ Dies wird nur für Moderatoren gespeichert und kann von der gebannten Person nic
</message> </message>
<message> <message>
<source>Your card database is invalid. Would you like to go back and set the correct path?</source> <source>Your card database is invalid. Would you like to go back and set the correct path?</source>
<translation type="vanished">Ihre Kartendatenbank ist ungültig. Möchten Sie zurückgehen und den korrekten Pfad einstellen?</translation> <translation type="obsolete">Ihre Kartendatenbank ist ungültig. Möchten Sie zurückgehen und den korrekten Pfad einstellen?</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="776"/> <location filename="../src/dlg_settings.cpp" line="776"/>
@ -2684,11 +2689,11 @@ Would you like to change your database location setting?</source>
</message> </message>
<message> <message>
<source>Path to card database:</source> <source>Path to card database:</source>
<translation type="vanished">Pfad zur Kartendatenbank:</translation> <translation type="obsolete">Pfad zur Kartendatenbank:</translation>
</message> </message>
<message> <message>
<source>Path to token database:</source> <source>Path to token database:</source>
<translation type="vanished">Pfad zur Spielsteindatenbank:</translation> <translation type="obsolete">Pfad zur Spielsteindatenbank:</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="39"/> <location filename="../src/dlg_settings.cpp" line="39"/>
@ -2842,7 +2847,7 @@ Grund für die Abschaltung: %1</numerusform>
</message> </message>
<message> <message>
<source>Czech:</source> <source>Czech:</source>
<translation type="vanished">Tschechisch:</translation> <translation type="obsolete">Tschechisch:</translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="228"/> <location filename="../src/window_main.cpp" line="228"/>
@ -2904,7 +2909,7 @@ Grund für die Abschaltung: %1</numerusform>
</message> </message>
<message> <message>
<source>Invalid login data.</source> <source>Invalid login data.</source>
<translation type="vanished">Ungültige Anmeldedaten.</translation> <translation type="obsolete">Ungültige Anmeldedaten.</translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="245"/> <location filename="../src/window_main.cpp" line="245"/>
@ -3709,12 +3714,12 @@ Lokale Version ist %1, Serverversion ist %2.</translation>
<message> <message>
<source>%1 has loaded a deck (%2).</source> <source>%1 has loaded a deck (%2).</source>
<comment>female</comment> <comment>female</comment>
<translation type="vanished">%1 hat ein Deck geladen (%2).</translation> <translation type="obsolete">%1 hat ein Deck geladen (%2).</translation>
</message> </message>
<message> <message>
<source>%1 has loaded a deck (%2).</source> <source>%1 has loaded a deck (%2).</source>
<comment>male</comment> <comment>male</comment>
<translation type="vanished">%1 hat ein Deck geladen (%2).</translation> <translation type="obsolete">%1 hat ein Deck geladen (%2).</translation>
</message> </message>
<message> <message>
<location filename="../src/messagelogwidget.cpp" line="93"/> <location filename="../src/messagelogwidget.cpp" line="93"/>
@ -4985,7 +4990,7 @@ Lokale Version ist %1, Serverversion ist %2.</translation>
</message> </message>
<message> <message>
<source>Ctrl+H</source> <source>Ctrl+H</source>
<translation type="vanished">Ctrl+H</translation> <translation type="obsolete">Ctrl+H</translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="648"/> <location filename="../src/player.cpp" line="648"/>
@ -5652,11 +5657,11 @@ Lokale Version ist %1, Serverversion ist %2.</translation>
</message> </message>
<message> <message>
<source>Cockatrice decks (*.cod)</source> <source>Cockatrice decks (*.cod)</source>
<translation type="vanished">Cockatrice Decks (*.cod)</translation> <translation type="obsolete">Cockatrice Decks (*.cod)</translation>
</message> </message>
<message> <message>
<source>Plain text decks (*.dec *.mwDeck)</source> <source>Plain text decks (*.dec *.mwDeck)</source>
<translation type="vanished">Text Decks (*.dec *.mwDeck)</translation> <translation type="obsolete">Text Decks (*.dec *.mwDeck)</translation>
</message> </message>
<message> <message>
<location filename="../src/deck_loader.cpp" line="8"/> <location filename="../src/deck_loader.cpp" line="8"/>
@ -5792,11 +5797,11 @@ Lokale Version ist %1, Serverversion ist %2.</translation>
</message> </message>
<message> <message>
<source>&amp;OK</source> <source>&amp;OK</source>
<translation type="vanished">&amp;OK</translation> <translation type="obsolete">&amp;OK</translation>
</message> </message>
<message> <message>
<source>&amp;Cancel</source> <source>&amp;Cancel</source>
<translation type="vanished">&amp;Abbrechen</translation> <translation type="obsolete">&amp;Abbrechen</translation>
</message> </message>
<message> <message>
<location filename="../src/tab_admin.cpp" line="40"/> <location filename="../src/tab_admin.cpp" line="40"/>
@ -5847,7 +5852,7 @@ Lokale Version ist %1, Serverversion ist %2.</translation>
</message> </message>
<message> <message>
<source>Administration</source> <source>Administration</source>
<translation type="vanished">Wartung</translation> <translation type="obsolete">Wartung</translation>
</message> </message>
</context> </context>
<context> <context>
@ -5897,7 +5902,7 @@ Lokale Version ist %1, Serverversion ist %2.</translation>
</message> </message>
<message> <message>
<source>&amp;Search...</source> <source>&amp;Search...</source>
<translation type="vanished">&amp;Suchen...</translation> <translation type="obsolete">&amp;Suchen...</translation>
</message> </message>
<message> <message>
<location filename="../src/tab_deck_editor.cpp" line="293"/> <location filename="../src/tab_deck_editor.cpp" line="293"/>
@ -5976,11 +5981,11 @@ Lokale Version ist %1, Serverversion ist %2.</translation>
</message> </message>
<message> <message>
<source>Return</source> <source>Return</source>
<translation type="vanished">Return</translation> <translation type="obsolete">Return</translation>
</message> </message>
<message> <message>
<source>Enter</source> <source>Enter</source>
<translation type="vanished">Enter</translation> <translation type="obsolete">Enter</translation>
</message> </message>
<message> <message>
<location filename="../src/tab_deck_editor.cpp" line="315"/> <location filename="../src/tab_deck_editor.cpp" line="315"/>
@ -5989,11 +5994,11 @@ Lokale Version ist %1, Serverversion ist %2.</translation>
</message> </message>
<message> <message>
<source>Ctrl+Return</source> <source>Ctrl+Return</source>
<translation type="vanished">Ctrl+Return</translation> <translation type="obsolete">Ctrl+Return</translation>
</message> </message>
<message> <message>
<source>Ctrl+Enter</source> <source>Ctrl+Enter</source>
<translation type="vanished">Ctrl+Enter</translation> <translation type="obsolete">Ctrl+Enter</translation>
</message> </message>
<message> <message>
<location filename="../src/tab_deck_editor.cpp" line="292"/> <location filename="../src/tab_deck_editor.cpp" line="292"/>
@ -6179,7 +6184,7 @@ Bitte geben Sie einen Namen ein:</translation>
</message> </message>
<message> <message>
<source>Deck storage</source> <source>Deck storage</source>
<translation type="vanished">Deckspeicherplatz</translation> <translation type="obsolete">Deckspeicherplatz</translation>
</message> </message>
</context> </context>
<context> <context>
@ -6456,7 +6461,7 @@ Bitte geben Sie einen Namen ein:</translation>
</message> </message>
<message> <message>
<source>Game replays</source> <source>Game replays</source>
<translation type="vanished">Replays</translation> <translation type="obsolete">Replays</translation>
</message> </message>
</context> </context>
<context> <context>
@ -6504,7 +6509,7 @@ Bitte geben Sie einen Namen ein:</translation>
<name>TabServer</name> <name>TabServer</name>
<message> <message>
<source>Server</source> <source>Server</source>
<translation type="vanished">Server</translation> <translation type="obsolete">Server</translation>
</message> </message>
</context> </context>
<context> <context>
@ -6526,7 +6531,7 @@ Bitte geben Sie einen Namen ein:</translation>
<name>TabUserLists</name> <name>TabUserLists</name>
<message> <message>
<source>User lists</source> <source>User lists</source>
<translation type="vanished">Benutzerlisten</translation> <translation type="obsolete">Benutzerlisten</translation>
</message> </message>
<message> <message>
<location filename="../src/tab_userlists.cpp" line="48"/> <location filename="../src/tab_userlists.cpp" line="48"/>

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS> <!DOCTYPE TS>
<TS version="2.1" language="en_US"> <TS version="2.0" language="en_US">
<context> <context>
<name>AbstractCounter</name> <name>AbstractCounter</name>
<message> <message>
@ -725,32 +725,37 @@ This is only saved for moderators and cannot be seen by the banned person.</sour
<context> <context>
<name>DlgConnect</name> <name>DlgConnect</name>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="15"/> <location filename="../src/dlg_connect.cpp" line="17"/>
<source>&amp;Host:</source> <source>&amp;Host:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="19"/> <location filename="../src/dlg_connect.cpp" line="21"/>
<source>&amp;Port:</source> <source>&amp;Port:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="23"/> <location filename="../src/dlg_connect.cpp" line="25"/>
<source>Player &amp;name:</source> <source>Player &amp;name:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="27"/> <location filename="../src/dlg_connect.cpp" line="29"/>
<source>P&amp;assword:</source> <source>P&amp;assword:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="32"/> <location filename="../src/dlg_connect.cpp" line="34"/>
<source>&amp;Save password</source> <source>&amp;Save password</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="55"/> <location filename="../src/dlg_connect.cpp" line="37"/>
<source>A&amp;uto connect at start</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/dlg_connect.cpp" line="71"/>
<source>Connect to server</source> <source>Connect to server</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS> <!DOCTYPE TS>
<TS version="2.1" language="es_ES"> <TS version="2.0" language="es_ES">
<context> <context>
<name>AbstractCounter</name> <name>AbstractCounter</name>
<message> <message>
@ -43,23 +43,23 @@
</message> </message>
<message> <message>
<source>Path to hand background:</source> <source>Path to hand background:</source>
<translation type="vanished">Ruta a la imagen de fondo de la mano:</translation> <translation type="obsolete">Ruta a la imagen de fondo de la mano:</translation>
</message> </message>
<message> <message>
<source>Path to stack background:</source> <source>Path to stack background:</source>
<translation type="vanished">Ruta a la imagen de fondo de la pila:</translation> <translation type="obsolete">Ruta a la imagen de fondo de la pila:</translation>
</message> </message>
<message> <message>
<source>Path to table background:</source> <source>Path to table background:</source>
<translation type="vanished">Ruta a la imagen de fondo de la mesa:</translation> <translation type="obsolete">Ruta a la imagen de fondo de la mesa:</translation>
</message> </message>
<message> <message>
<source>Path to player info background:</source> <source>Path to player info background:</source>
<translation type="vanished">Ruta a la imagen de fondo de la información del jugador:</translation> <translation type="obsolete">Ruta a la imagen de fondo de la información del jugador:</translation>
</message> </message>
<message> <message>
<source>Path to picture of card back:</source> <source>Path to picture of card back:</source>
<translation type="vanished">Ruta al reverso de las cartas:</translation> <translation type="obsolete">Ruta al reverso de las cartas:</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="366"/> <location filename="../src/dlg_settings.cpp" line="366"/>
@ -1315,7 +1315,7 @@ Se almacenará unicamente para moderadores y no podrá ser visto por la persona
<name>DeckEditorSettingsPage</name> <name>DeckEditorSettingsPage</name>
<message> <message>
<source>Enable &amp;price tag feature (using data from blacklotusproject.com)</source> <source>Enable &amp;price tag feature (using data from blacklotusproject.com)</source>
<translation type="vanished">Activar tag de &amp;precios (usando datos de blacklotusproject.com)</translation> <translation type="obsolete">Activar tag de &amp;precios (usando datos de blacklotusproject.com)</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="600"/> <location filename="../src/dlg_settings.cpp" line="600"/>
@ -1461,30 +1461,35 @@ Se almacenará unicamente para moderadores y no podrá ser visto por la persona
<context> <context>
<name>DlgConnect</name> <name>DlgConnect</name>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="15"/> <location filename="../src/dlg_connect.cpp" line="17"/>
<source>&amp;Host:</source> <source>&amp;Host:</source>
<translation>&amp;Dirección:</translation> <translation>&amp;Dirección:</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="19"/> <location filename="../src/dlg_connect.cpp" line="21"/>
<source>&amp;Port:</source> <source>&amp;Port:</source>
<translation>&amp;Puerto:</translation> <translation>&amp;Puerto:</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="23"/> <location filename="../src/dlg_connect.cpp" line="25"/>
<source>Player &amp;name:</source> <source>Player &amp;name:</source>
<translation>&amp;Nombre del jugador:</translation> <translation>&amp;Nombre del jugador:</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="27"/> <location filename="../src/dlg_connect.cpp" line="29"/>
<source>P&amp;assword:</source> <source>P&amp;assword:</source>
<translation>&amp;Contraseña:</translation> <translation>&amp;Contraseña:</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="32"/> <location filename="../src/dlg_connect.cpp" line="34"/>
<source>&amp;Save password</source> <source>&amp;Save password</source>
<translation>&amp;Guardar contraseña</translation> <translation>&amp;Guardar contraseña</translation>
</message> </message>
<message>
<location filename="../src/dlg_connect.cpp" line="37"/>
<source>A&amp;uto connect at start</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>&amp;OK</source> <source>&amp;OK</source>
<translation type="obsolete">&amp;Aceptar</translation> <translation type="obsolete">&amp;Aceptar</translation>
@ -1494,7 +1499,7 @@ Se almacenará unicamente para moderadores y no podrá ser visto por la persona
<translation type="obsolete">&amp;Cancelar</translation> <translation type="obsolete">&amp;Cancelar</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="55"/> <location filename="../src/dlg_connect.cpp" line="71"/>
<source>Connect to server</source> <source>Connect to server</source>
<translation>Conectar con el servidor</translation> <translation>Conectar con el servidor</translation>
</message> </message>
@ -1911,7 +1916,7 @@ Se almacenará unicamente para moderadores y no podrá ser visto por la persona
</message> </message>
<message> <message>
<source>Your card database is invalid. Would you like to go back and set the correct path?</source> <source>Your card database is invalid. Would you like to go back and set the correct path?</source>
<translation type="vanished">Tu base de datos de cartas es invalida. ¿Deseas volver y seleccionar la ruta correcta?</translation> <translation type="obsolete">Tu base de datos de cartas es invalida. ¿Deseas volver y seleccionar la ruta correcta?</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="776"/> <location filename="../src/dlg_settings.cpp" line="776"/>
@ -2299,11 +2304,11 @@ Would you like to change your database location setting?</source>
</message> </message>
<message> <message>
<source>Path to card database:</source> <source>Path to card database:</source>
<translation type="vanished">Ruta a la base de datos de las cartas:</translation> <translation type="obsolete">Ruta a la base de datos de las cartas:</translation>
</message> </message>
<message> <message>
<source>Path to token database:</source> <source>Path to token database:</source>
<translation type="vanished">Ruta a la base de datos de fichas:</translation> <translation type="obsolete">Ruta a la base de datos de fichas:</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="39"/> <location filename="../src/dlg_settings.cpp" line="39"/>
@ -2457,7 +2462,7 @@ Motivo para la desconexión: %1</numerusform>
</message> </message>
<message> <message>
<source>Czech:</source> <source>Czech:</source>
<translation type="vanished">Checo:</translation> <translation type="obsolete">Checo:</translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="228"/> <location filename="../src/window_main.cpp" line="228"/>
@ -2519,7 +2524,7 @@ Motivo para la desconexión: %1</numerusform>
</message> </message>
<message> <message>
<source>Invalid login data.</source> <source>Invalid login data.</source>
<translation type="vanished">Datos de conexión invalidos.</translation> <translation type="obsolete">Datos de conexión invalidos.</translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="245"/> <location filename="../src/window_main.cpp" line="245"/>
@ -3107,12 +3112,12 @@ La versión local es %1, la versión remota es %2.</translation>
<message> <message>
<source>%1 has loaded a deck (%2).</source> <source>%1 has loaded a deck (%2).</source>
<comment>female</comment> <comment>female</comment>
<translation type="vanished">%1 ha cargado el mazo %2.</translation> <translation type="obsolete">%1 ha cargado el mazo %2.</translation>
</message> </message>
<message> <message>
<source>%1 has loaded a deck (%2).</source> <source>%1 has loaded a deck (%2).</source>
<comment>male</comment> <comment>male</comment>
<translation type="vanished">%1 ha cargado el mazo %2.</translation> <translation type="obsolete">%1 ha cargado el mazo %2.</translation>
</message> </message>
<message> <message>
<location filename="../src/messagelogwidget.cpp" line="93"/> <location filename="../src/messagelogwidget.cpp" line="93"/>
@ -4482,7 +4487,7 @@ La versión local es %1, la versión remota es %2.</translation>
</message> </message>
<message> <message>
<source>Ctrl+H</source> <source>Ctrl+H</source>
<translation type="vanished">Ctrl+H</translation> <translation type="obsolete">Ctrl+H</translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="648"/> <location filename="../src/player.cpp" line="648"/>
@ -4782,11 +4787,11 @@ La versión local es %1, la versión remota es %2.</translation>
</message> </message>
<message> <message>
<source>Cockatrice decks (*.cod)</source> <source>Cockatrice decks (*.cod)</source>
<translation type="vanished">Mazos de Cockatrice (*.cod)</translation> <translation type="obsolete">Mazos de Cockatrice (*.cod)</translation>
</message> </message>
<message> <message>
<source>Plain text decks (*.dec *.mwDeck)</source> <source>Plain text decks (*.dec *.mwDeck)</source>
<translation type="vanished">Archivos de texto plano (*.dec *.mwDeck)</translation> <translation type="obsolete">Archivos de texto plano (*.dec *.mwDeck)</translation>
</message> </message>
<message> <message>
<location filename="../src/deck_loader.cpp" line="8"/> <location filename="../src/deck_loader.cpp" line="8"/>
@ -4922,11 +4927,11 @@ La versión local es %1, la versión remota es %2.</translation>
</message> </message>
<message> <message>
<source>&amp;OK</source> <source>&amp;OK</source>
<translation type="vanished">&amp;Aceptar</translation> <translation type="obsolete">&amp;Aceptar</translation>
</message> </message>
<message> <message>
<source>&amp;Cancel</source> <source>&amp;Cancel</source>
<translation type="vanished">&amp;Cancelar</translation> <translation type="obsolete">&amp;Cancelar</translation>
</message> </message>
<message> <message>
<location filename="../src/tab_admin.cpp" line="40"/> <location filename="../src/tab_admin.cpp" line="40"/>
@ -4973,7 +4978,7 @@ La versión local es %1, la versión remota es %2.</translation>
</message> </message>
<message> <message>
<source>Administration</source> <source>Administration</source>
<translation type="vanished">Administración</translation> <translation type="obsolete">Administración</translation>
</message> </message>
</context> </context>
<context> <context>
@ -4999,7 +5004,7 @@ La versión local es %1, la versión remota es %2.</translation>
<name>TabDeckEditor</name> <name>TabDeckEditor</name>
<message> <message>
<source>&amp;Search...</source> <source>&amp;Search...</source>
<translation type="vanished">&amp;Buscar...</translation> <translation type="obsolete">&amp;Buscar...</translation>
</message> </message>
<message> <message>
<location filename="../src/tab_deck_editor.cpp" line="292"/> <location filename="../src/tab_deck_editor.cpp" line="292"/>
@ -5098,11 +5103,11 @@ La versión local es %1, la versión remota es %2.</translation>
</message> </message>
<message> <message>
<source>Return</source> <source>Return</source>
<translation type="vanished">Return</translation> <translation type="obsolete">Return</translation>
</message> </message>
<message> <message>
<source>Enter</source> <source>Enter</source>
<translation type="vanished">Enter</translation> <translation type="obsolete">Enter</translation>
</message> </message>
<message> <message>
<location filename="../src/tab_deck_editor.cpp" line="315"/> <location filename="../src/tab_deck_editor.cpp" line="315"/>
@ -5111,11 +5116,11 @@ La versión local es %1, la versión remota es %2.</translation>
</message> </message>
<message> <message>
<source>Ctrl+Return</source> <source>Ctrl+Return</source>
<translation type="vanished">Ctrl+Return</translation> <translation type="obsolete">Ctrl+Return</translation>
</message> </message>
<message> <message>
<source>Ctrl+Enter</source> <source>Ctrl+Enter</source>
<translation type="vanished">Ctrl+Enter</translation> <translation type="obsolete">Ctrl+Enter</translation>
</message> </message>
<message> <message>
<location filename="../src/tab_deck_editor.cpp" line="317"/> <location filename="../src/tab_deck_editor.cpp" line="317"/>
@ -5301,7 +5306,7 @@ Por favor, introduzca un nombre:</translation>
</message> </message>
<message> <message>
<source>Deck storage</source> <source>Deck storage</source>
<translation type="vanished">Almacen de mazos</translation> <translation type="obsolete">Almacen de mazos</translation>
</message> </message>
</context> </context>
<context> <context>
@ -5550,7 +5555,7 @@ Por favor, introduzca un nombre:</translation>
</message> </message>
<message> <message>
<source>Game replays</source> <source>Game replays</source>
<translation type="vanished">Replays de partidas</translation> <translation type="obsolete">Replays de partidas</translation>
</message> </message>
</context> </context>
<context> <context>
@ -5598,14 +5603,14 @@ Por favor, introduzca un nombre:</translation>
<name>TabServer</name> <name>TabServer</name>
<message> <message>
<source>Server</source> <source>Server</source>
<translation type="vanished">Servidor</translation> <translation type="obsolete">Servidor</translation>
</message> </message>
</context> </context>
<context> <context>
<name>TabUserLists</name> <name>TabUserLists</name>
<message> <message>
<source>User lists</source> <source>User lists</source>
<translation type="vanished">Lista de usuarios</translation> <translation type="obsolete">Lista de usuarios</translation>
</message> </message>
<message> <message>
<location filename="../src/tab_userlists.cpp" line="48"/> <location filename="../src/tab_userlists.cpp" line="48"/>

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS> <!DOCTYPE TS>
<TS version="2.1" language="fr_FR"> <TS version="2.0" language="fr_FR">
<context> <context>
<name>AbstractCounter</name> <name>AbstractCounter</name>
<message> <message>
@ -55,11 +55,35 @@
</message> </message>
<message> <message>
<source>Path to player info background:</source> <source>Path to player info background:</source>
<translation>Chemin vers l&apos;image de fond d&apos;affichage d&apos;informations:</translation> <translation>Chemin vers l&apos;image de fond d&apos;informations joueur:</translation>
</message> </message>
<message> <message>
<source>Path to picture of card back:</source> <source>Path to picture of card back:</source>
<translation>Chemin vers l&apos;image de dos des cartes:</translation> <translation>Chemin vers l&apos;image de dos des cartes:</translation>
<message>
<location filename="../src/dlg_settings.cpp" line="366"/>
<source>Hand background:</source>
<translation>Image de fond de la zone de main:</translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="367"/>
<source>Stack background:</source>
<translation>Image de fond de la pile:</translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="368"/>
<source>Table background:</source>
<translation>Image de fond de la zone de jeu:</translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="369"/>
<source>Player info background:</source>
<translation>Image de fond de la zone d&apos;informations joueur:</translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="370"/>
<source>Card back:</source>
<translation>Dos de carte:</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="372"/> <location filename="../src/dlg_settings.cpp" line="372"/>
@ -1154,7 +1178,7 @@ Cette information sera consultable uniquement par les modérateurs.</translation
<name>DeckEditorSettingsPage</name> <name>DeckEditorSettingsPage</name>
<message> <message>
<source>Enable &amp;price tag feature (using data from blacklotusproject.com)</source> <source>Enable &amp;price tag feature (using data from blacklotusproject.com)</source>
<translation type="vanished">Activer le guide de &amp;prix des cartes (source : blacklotusproject.com)</translation> <translation type="obsolete">Activer le guide de &amp;prix des cartes (source : blacklotusproject.com)</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="600"/> <location filename="../src/dlg_settings.cpp" line="600"/>
@ -1300,30 +1324,35 @@ Cette information sera consultable uniquement par les modérateurs.</translation
<context> <context>
<name>DlgConnect</name> <name>DlgConnect</name>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="15"/> <location filename="../src/dlg_connect.cpp" line="17"/>
<source>&amp;Host:</source> <source>&amp;Host:</source>
<translation>&amp;Hôte:</translation> <translation>&amp;Hôte:</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="19"/> <location filename="../src/dlg_connect.cpp" line="21"/>
<source>&amp;Port:</source> <source>&amp;Port:</source>
<translation>&amp;Port:</translation> <translation>&amp;Port:</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="23"/> <location filename="../src/dlg_connect.cpp" line="25"/>
<source>Player &amp;name:</source> <source>Player &amp;name:</source>
<translation>&amp;Nom du joueur:</translation> <translation>&amp;Nom du joueur:</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="27"/> <location filename="../src/dlg_connect.cpp" line="29"/>
<source>P&amp;assword:</source> <source>P&amp;assword:</source>
<translation>Mot de p&amp;asse:</translation> <translation>Mot de p&amp;asse:</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="32"/> <location filename="../src/dlg_connect.cpp" line="34"/>
<source>&amp;Save password</source> <source>&amp;Save password</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../src/dlg_connect.cpp" line="37"/>
<source>A&amp;uto connect at start</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>&amp;OK</source> <source>&amp;OK</source>
<translation type="obsolete">&amp;OK</translation> <translation type="obsolete">&amp;OK</translation>
@ -1333,7 +1362,7 @@ Cette information sera consultable uniquement par les modérateurs.</translation
<translation type="obsolete">&amp;Annuler</translation> <translation type="obsolete">&amp;Annuler</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="55"/> <location filename="../src/dlg_connect.cpp" line="71"/>
<source>Connect to server</source> <source>Connect to server</source>
<translation>Connexion au serveur</translation> <translation>Connexion au serveur</translation>
</message> </message>
@ -1738,7 +1767,7 @@ Cette information sera consultable uniquement par les modérateurs.</translation
</message> </message>
<message> <message>
<source>Your card database is invalid. Would you like to go back and set the correct path?</source> <source>Your card database is invalid. Would you like to go back and set the correct path?</source>
<translation type="vanished">Votre base de carte est invalide. Souhaitez-vous redéfinir le chemin d&apos;accès?</translation> <translation type="obsolete">Votre base de carte est invalide. Souhaitez-vous redéfinir le chemin d&apos;accès?</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="776"/> <location filename="../src/dlg_settings.cpp" line="776"/>
@ -2133,7 +2162,7 @@ Would you like to change your database location setting?</source>
</message> </message>
<message> <message>
<source>Path to card database:</source> <source>Path to card database:</source>
<translation type="vanished">Chemin vers la base de cartes:</translation> <translation type="obsolete">Chemin vers la base de cartes:</translation>
</message> </message>
</context> </context>
<context> <context>
@ -2229,7 +2258,7 @@ Would you like to change your database location setting?</source>
</message> </message>
<message> <message>
<source>Invalid login data.</source> <source>Invalid login data.</source>
<translation type="vanished">Information de connexion érronée.</translation> <translation type="obsolete">Information de connexion érronée.</translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="250"/> <location filename="../src/window_main.cpp" line="250"/>
@ -2312,7 +2341,7 @@ Raison de la fermeture : %1</numerusform>
</message> </message>
<message> <message>
<source>Czech:</source> <source>Czech:</source>
<translation type="vanished">Tchèque :</translation> <translation type="obsolete">Tchèque :</translation>
</message> </message>
<message> <message>
<source>Slovak:</source> <source>Slovak:</source>
@ -2961,12 +2990,12 @@ La version la plus récente est %1, l&apos;ancienne version est %2.</translation
<message> <message>
<source>%1 has loaded a deck (%2).</source> <source>%1 has loaded a deck (%2).</source>
<comment>female</comment> <comment>female</comment>
<translation type="vanished">%1 a chargé le deck %2.</translation> <translation type="obsolete">%1 a chargé le deck %2.</translation>
</message> </message>
<message> <message>
<source>%1 has loaded a deck (%2).</source> <source>%1 has loaded a deck (%2).</source>
<comment>male</comment> <comment>male</comment>
<translation type="vanished">%1 a chargé le deck %2.</translation> <translation type="obsolete">%1 a chargé le deck %2.</translation>
</message> </message>
<message> <message>
<location filename="../src/messagelogwidget.cpp" line="93"/> <location filename="../src/messagelogwidget.cpp" line="93"/>
@ -4750,11 +4779,11 @@ La version la plus récente est %1, l&apos;ancienne version est %2.</translation
</message> </message>
<message> <message>
<source>&amp;OK</source> <source>&amp;OK</source>
<translation type="vanished">&amp;OK</translation> <translation type="obsolete">&amp;OK</translation>
</message> </message>
<message> <message>
<source>&amp;Cancel</source> <source>&amp;Cancel</source>
<translation type="vanished">&amp;Annuler</translation> <translation type="obsolete">&amp;Annuler</translation>
</message> </message>
<message> <message>
<location filename="../src/tab_admin.cpp" line="40"/> <location filename="../src/tab_admin.cpp" line="40"/>
@ -4801,7 +4830,7 @@ La version la plus récente est %1, l&apos;ancienne version est %2.</translation
</message> </message>
<message> <message>
<source>Administration</source> <source>Administration</source>
<translation type="vanished">Administration</translation> <translation type="obsolete">Administration</translation>
</message> </message>
</context> </context>
<context> <context>
@ -5129,7 +5158,7 @@ Entrez un nom s&apos;il vous plaît:</translation>
</message> </message>
<message> <message>
<source>Deck storage</source> <source>Deck storage</source>
<translation type="vanished">Stockage de deck</translation> <translation type="obsolete">Stockage de deck</translation>
</message> </message>
</context> </context>
<context> <context>
@ -5423,14 +5452,14 @@ Entrez un nom s&apos;il vous plaît:</translation>
<name>TabServer</name> <name>TabServer</name>
<message> <message>
<source>Server</source> <source>Server</source>
<translation type="vanished">Serveur</translation> <translation type="obsolete">Serveur</translation>
</message> </message>
</context> </context>
<context> <context>
<name>TabUserLists</name> <name>TabUserLists</name>
<message> <message>
<source>User lists</source> <source>User lists</source>
<translation type="vanished">Listes de l&apos;utilisateur</translation> <translation type="obsolete">Listes de l&apos;utilisateur</translation>
</message> </message>
<message> <message>
<location filename="../src/tab_userlists.cpp" line="48"/> <location filename="../src/tab_userlists.cpp" line="48"/>

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS> <!DOCTYPE TS>
<TS version="2.1" language="en" sourcelanguage="en"> <TS version="2.0" language="en" sourcelanguage="en">
<context> <context>
<name>AbstractCounter</name> <name>AbstractCounter</name>
<message> <message>
@ -755,30 +755,35 @@ This is only saved for moderators and cannot be seen by the banned person.</sour
<context> <context>
<name>DlgConnect</name> <name>DlgConnect</name>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="15"/> <location filename="../src/dlg_connect.cpp" line="17"/>
<source>&amp;Host:</source> <source>&amp;Host:</source>
<translation>Ò&amp;stair:</translation> <translation>Ò&amp;stair:</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="19"/> <location filename="../src/dlg_connect.cpp" line="21"/>
<source>&amp;Port:</source> <source>&amp;Port:</source>
<translation>&amp;Port:</translation> <translation>&amp;Port:</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="23"/> <location filename="../src/dlg_connect.cpp" line="25"/>
<source>Player &amp;name:</source> <source>Player &amp;name:</source>
<translation>&amp;Ainm a&apos; chluicheadair:</translation> <translation>&amp;Ainm a&apos; chluicheadair:</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="27"/> <location filename="../src/dlg_connect.cpp" line="29"/>
<source>P&amp;assword:</source> <source>P&amp;assword:</source>
<translation>&amp;Facal-faire:</translation> <translation>&amp;Facal-faire:</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="32"/> <location filename="../src/dlg_connect.cpp" line="34"/>
<source>&amp;Save password</source> <source>&amp;Save password</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../src/dlg_connect.cpp" line="37"/>
<source>A&amp;uto connect at start</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>&amp;OK</source> <source>&amp;OK</source>
<translation type="obsolete">&amp;Ceart ma-thà</translation> <translation type="obsolete">&amp;Ceart ma-thà</translation>
@ -788,7 +793,7 @@ This is only saved for moderators and cannot be seen by the banned person.</sour
<translation type="obsolete">&amp;Sguir dheth</translation> <translation type="obsolete">&amp;Sguir dheth</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="55"/> <location filename="../src/dlg_connect.cpp" line="71"/>
<source>Connect to server</source> <source>Connect to server</source>
<translation>Dèan ceangal ris an fhrithealaiche</translation> <translation>Dèan ceangal ris an fhrithealaiche</translation>
</message> </message>
@ -3786,11 +3791,11 @@ Local version is %1, remote version is %2.</source>
</message> </message>
<message> <message>
<source>&amp;OK</source> <source>&amp;OK</source>
<translation type="vanished">&amp;Ceart ma-thà</translation> <translation type="obsolete">&amp;Ceart ma-thà</translation>
</message> </message>
<message> <message>
<source>&amp;Cancel</source> <source>&amp;Cancel</source>
<translation type="vanished">&amp;Sguir dheth</translation> <translation type="obsolete">&amp;Sguir dheth</translation>
</message> </message>
<message> <message>
<location filename="../src/tab_admin.cpp" line="40"/> <location filename="../src/tab_admin.cpp" line="40"/>
@ -4404,7 +4409,7 @@ Please enter a name:</source>
<name>TabServer</name> <name>TabServer</name>
<message> <message>
<source>Server</source> <source>Server</source>
<translation type="vanished">Fhrithealaiche</translation> <translation type="obsolete">Fhrithealaiche</translation>
</message> </message>
</context> </context>
<context> <context>

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS> <!DOCTYPE TS>
<TS version="2.1" language="it_IT"> <TS version="2.0" language="it_IT">
<context> <context>
<name>AbstractCounter</name> <name>AbstractCounter</name>
<message> <message>
@ -43,23 +43,23 @@
</message> </message>
<message> <message>
<source>Path to hand background:</source> <source>Path to hand background:</source>
<translation type="vanished">Percorso sfondo della mano:</translation> <translation type="obsolete">Percorso sfondo della mano:</translation>
</message> </message>
<message> <message>
<source>Path to stack background:</source> <source>Path to stack background:</source>
<translation type="vanished">Percorso sfondo della pila:</translation> <translation type="obsolete">Percorso sfondo della pila:</translation>
</message> </message>
<message> <message>
<source>Path to table background:</source> <source>Path to table background:</source>
<translation type="vanished">Percorso sfondo del tavolo:</translation> <translation type="obsolete">Percorso sfondo del tavolo:</translation>
</message> </message>
<message> <message>
<source>Path to player info background:</source> <source>Path to player info background:</source>
<translation type="vanished">Percorso sfondo info giocatore:</translation> <translation type="obsolete">Percorso sfondo info giocatore:</translation>
</message> </message>
<message> <message>
<source>Path to picture of card back:</source> <source>Path to picture of card back:</source>
<translation type="vanished">Percorso sfondo retro delle carte:</translation> <translation type="obsolete">Percorso sfondo retro delle carte:</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="366"/> <location filename="../src/dlg_settings.cpp" line="366"/>
@ -959,7 +959,7 @@ Questo è solo visibile ai moderatori e non alla persona bannata.</translation>
<name>DeckEditorSettingsPage</name> <name>DeckEditorSettingsPage</name>
<message> <message>
<source>Enable &amp;price tag feature (using data from blacklotusproject.com)</source> <source>Enable &amp;price tag feature (using data from blacklotusproject.com)</source>
<translation type="vanished">Abilita la &amp;ricerca del costo (utilizzando i dati di blacklotusproject.com)</translation> <translation type="obsolete">Abilita la &amp;ricerca del costo (utilizzando i dati di blacklotusproject.com)</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="600"/> <location filename="../src/dlg_settings.cpp" line="600"/>
@ -1098,30 +1098,35 @@ Questo è solo visibile ai moderatori e non alla persona bannata.</translation>
<context> <context>
<name>DlgConnect</name> <name>DlgConnect</name>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="15"/> <location filename="../src/dlg_connect.cpp" line="17"/>
<source>&amp;Host:</source> <source>&amp;Host:</source>
<translation>&amp;Host:</translation> <translation>&amp;Host:</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="19"/> <location filename="../src/dlg_connect.cpp" line="21"/>
<source>&amp;Port:</source> <source>&amp;Port:</source>
<translation>&amp;Porta:</translation> <translation>&amp;Porta:</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="23"/> <location filename="../src/dlg_connect.cpp" line="25"/>
<source>Player &amp;name:</source> <source>Player &amp;name:</source>
<translation>Nome &amp;Giocatore:</translation> <translation>Nome &amp;Giocatore:</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="27"/> <location filename="../src/dlg_connect.cpp" line="29"/>
<source>P&amp;assword:</source> <source>P&amp;assword:</source>
<translation>P&amp;assword:</translation> <translation>P&amp;assword:</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="32"/> <location filename="../src/dlg_connect.cpp" line="34"/>
<source>&amp;Save password</source> <source>&amp;Save password</source>
<translation>&amp;Salva password</translation> <translation>&amp;Salva password</translation>
</message> </message>
<message>
<location filename="../src/dlg_connect.cpp" line="37"/>
<source>A&amp;uto connect at start</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>&amp;OK</source> <source>&amp;OK</source>
<translation type="obsolete">&amp;OK</translation> <translation type="obsolete">&amp;OK</translation>
@ -1131,7 +1136,7 @@ Questo è solo visibile ai moderatori e non alla persona bannata.</translation>
<translation type="obsolete">&amp;Annulla</translation> <translation type="obsolete">&amp;Annulla</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="55"/> <location filename="../src/dlg_connect.cpp" line="71"/>
<source>Connect to server</source> <source>Connect to server</source>
<translation>Connetti al server</translation> <translation>Connetti al server</translation>
</message> </message>
@ -1532,7 +1537,7 @@ Questo è solo visibile ai moderatori e non alla persona bannata.</translation>
</message> </message>
<message> <message>
<source>Your card database is invalid. Would you like to go back and set the correct path?</source> <source>Your card database is invalid. Would you like to go back and set the correct path?</source>
<translation type="vanished">Il tuo database è invalido. Vuoi tornare indietro e impostare il percorso corretto?</translation> <translation type="obsolete">Il tuo database è invalido. Vuoi tornare indietro e impostare il percorso corretto?</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="776"/> <location filename="../src/dlg_settings.cpp" line="776"/>
@ -1922,11 +1927,11 @@ Would you like to change your database location setting?</source>
</message> </message>
<message> <message>
<source>Path to card database:</source> <source>Path to card database:</source>
<translation type="vanished">Percorso database delle carte:</translation> <translation type="obsolete">Percorso database delle carte:</translation>
</message> </message>
<message> <message>
<source>Path to token database:</source> <source>Path to token database:</source>
<translation type="vanished">Percorso database pedine:</translation> <translation type="obsolete">Percorso database pedine:</translation>
</message> </message>
</context> </context>
<context> <context>
@ -2048,7 +2053,7 @@ Ragione dello spegnimento: %1</numerusform>
</message> </message>
<message> <message>
<source>Czech:</source> <source>Czech:</source>
<translation type="vanished">Ceco:</translation> <translation type="obsolete">Ceco:</translation>
</message> </message>
<message> <message>
<source>Slovak:</source> <source>Slovak:</source>
@ -2111,7 +2116,7 @@ Ragione dello spegnimento: %1</numerusform>
</message> </message>
<message> <message>
<source>Invalid login data.</source> <source>Invalid login data.</source>
<translation type="vanished">Dati login non validi.</translation> <translation type="obsolete">Dati login non validi.</translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="242"/> <location filename="../src/window_main.cpp" line="242"/>
@ -2348,12 +2353,12 @@ La tua versione è la %1, la versione online è la %2.</translation>
<message> <message>
<source>%1 has loaded a deck (%2).</source> <source>%1 has loaded a deck (%2).</source>
<comment>female</comment> <comment>female</comment>
<translation type="vanished">%1 ha aperto un mazzo %2.</translation> <translation type="obsolete">%1 ha aperto un mazzo %2.</translation>
</message> </message>
<message> <message>
<source>%1 has loaded a deck (%2).</source> <source>%1 has loaded a deck (%2).</source>
<comment>male</comment> <comment>male</comment>
<translation type="vanished">%1 ha aperto un mazzo %2.</translation> <translation type="obsolete">%1 ha aperto un mazzo %2.</translation>
</message> </message>
<message> <message>
<location filename="../src/messagelogwidget.cpp" line="93"/> <location filename="../src/messagelogwidget.cpp" line="93"/>
@ -3792,7 +3797,7 @@ La tua versione è la %1, la versione online è la %2.</translation>
</message> </message>
<message> <message>
<source>Ctrl+H</source> <source>Ctrl+H</source>
<translation type="vanished">Ctrl+H</translation> <translation type="obsolete">Ctrl+H</translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="647"/> <location filename="../src/player.cpp" line="647"/>
@ -4134,11 +4139,11 @@ La tua versione è la %1, la versione online è la %2.</translation>
</message> </message>
<message> <message>
<source>Cockatrice decks (*.cod)</source> <source>Cockatrice decks (*.cod)</source>
<translation type="vanished">Mazzi Cockatrice (*.cod)</translation> <translation type="obsolete">Mazzi Cockatrice (*.cod)</translation>
</message> </message>
<message> <message>
<source>Plain text decks (*.dec *.mwDeck)</source> <source>Plain text decks (*.dec *.mwDeck)</source>
<translation type="vanished">Mazzi in formato testo (*.dec *.mwDeck)</translation> <translation type="obsolete">Mazzi in formato testo (*.dec *.mwDeck)</translation>
</message> </message>
<message> <message>
<location filename="../src/deck_loader.cpp" line="8"/> <location filename="../src/deck_loader.cpp" line="8"/>
@ -4267,11 +4272,11 @@ La tua versione è la %1, la versione online è la %2.</translation>
</message> </message>
<message> <message>
<source>&amp;OK</source> <source>&amp;OK</source>
<translation type="vanished">&amp;OK</translation> <translation type="obsolete">&amp;OK</translation>
</message> </message>
<message> <message>
<source>&amp;Cancel</source> <source>&amp;Cancel</source>
<translation type="vanished">&amp;Annulla</translation> <translation type="obsolete">&amp;Annulla</translation>
</message> </message>
<message> <message>
<location filename="../src/tab_admin.cpp" line="40"/> <location filename="../src/tab_admin.cpp" line="40"/>
@ -4318,14 +4323,14 @@ La tua versione è la %1, la versione online è la %2.</translation>
</message> </message>
<message> <message>
<source>Administration</source> <source>Administration</source>
<translation type="vanished">Amministrazione</translation> <translation type="obsolete">Amministrazione</translation>
</message> </message>
</context> </context>
<context> <context>
<name>TabDeckEditor</name> <name>TabDeckEditor</name>
<message> <message>
<source>&amp;Search...</source> <source>&amp;Search...</source>
<translation type="vanished">&amp;Cerca...</translation> <translation type="obsolete">&amp;Cerca...</translation>
</message> </message>
<message> <message>
<location filename="../src/tab_deck_editor.cpp" line="292"/> <location filename="../src/tab_deck_editor.cpp" line="292"/>
@ -4424,11 +4429,11 @@ La tua versione è la %1, la versione online è la %2.</translation>
</message> </message>
<message> <message>
<source>Return</source> <source>Return</source>
<translation type="vanished">Return</translation> <translation type="obsolete">Return</translation>
</message> </message>
<message> <message>
<source>Enter</source> <source>Enter</source>
<translation type="vanished">Invio</translation> <translation type="obsolete">Invio</translation>
</message> </message>
<message> <message>
<location filename="../src/tab_deck_editor.cpp" line="315"/> <location filename="../src/tab_deck_editor.cpp" line="315"/>
@ -4437,11 +4442,11 @@ La tua versione è la %1, la versione online è la %2.</translation>
</message> </message>
<message> <message>
<source>Ctrl+Return</source> <source>Ctrl+Return</source>
<translation type="vanished">Ctrl+Return</translation> <translation type="obsolete">Ctrl+Return</translation>
</message> </message>
<message> <message>
<source>Ctrl+Enter</source> <source>Ctrl+Enter</source>
<translation type="vanished">Ctrl+Invio</translation> <translation type="obsolete">Ctrl+Invio</translation>
</message> </message>
<message> <message>
<location filename="../src/tab_deck_editor.cpp" line="317"/> <location filename="../src/tab_deck_editor.cpp" line="317"/>
@ -4626,7 +4631,7 @@ Please enter a name:</source>
</message> </message>
<message> <message>
<source>Deck storage</source> <source>Deck storage</source>
<translation type="vanished">Cartella mazzi</translation> <translation type="obsolete">Cartella mazzi</translation>
</message> </message>
</context> </context>
<context> <context>
@ -4875,7 +4880,7 @@ Please enter a name:</source>
</message> </message>
<message> <message>
<source>Game replays</source> <source>Game replays</source>
<translation type="vanished">Replay partite</translation> <translation type="obsolete">Replay partite</translation>
</message> </message>
</context> </context>
<context> <context>
@ -4915,14 +4920,14 @@ Please enter a name:</source>
<name>TabServer</name> <name>TabServer</name>
<message> <message>
<source>Server</source> <source>Server</source>
<translation type="vanished">Server</translation> <translation type="obsolete">Server</translation>
</message> </message>
</context> </context>
<context> <context>
<name>TabUserLists</name> <name>TabUserLists</name>
<message> <message>
<source>User lists</source> <source>User lists</source>
<translation type="vanished">Lista utenti</translation> <translation type="obsolete">Lista utenti</translation>
</message> </message>
<message> <message>
<location filename="../src/tab_userlists.cpp" line="48"/> <location filename="../src/tab_userlists.cpp" line="48"/>

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS> <!DOCTYPE TS>
<TS version="2.1" language="ja_JP"> <TS version="2.0" language="ja_JP">
<context> <context>
<name>AbstractCounter</name> <name>AbstractCounter</name>
<message> <message>
@ -43,23 +43,23 @@
</message> </message>
<message> <message>
<source>Path to hand background:</source> <source>Path to hand background:</source>
<translation type="vanished">:</translation> <translation type="obsolete">:</translation>
</message> </message>
<message> <message>
<source>Path to stack background:</source> <source>Path to stack background:</source>
<translation type="vanished">:</translation> <translation type="obsolete">:</translation>
</message> </message>
<message> <message>
<source>Path to table background:</source> <source>Path to table background:</source>
<translation type="vanished">:</translation> <translation type="obsolete">:</translation>
</message> </message>
<message> <message>
<source>Path to player info background:</source> <source>Path to player info background:</source>
<translation type="vanished">:</translation> <translation type="obsolete">:</translation>
</message> </message>
<message> <message>
<source>Path to picture of card back:</source> <source>Path to picture of card back:</source>
<translation type="vanished">:</translation> <translation type="obsolete">:</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="372"/> <location filename="../src/dlg_settings.cpp" line="372"/>
@ -780,7 +780,7 @@ This is only saved for moderators and cannot be seen by the banned person.</sour
<name>DeckEditorSettingsPage</name> <name>DeckEditorSettingsPage</name>
<message> <message>
<source>Enable &amp;price tag feature (using data from blacklotusproject.com)</source> <source>Enable &amp;price tag feature (using data from blacklotusproject.com)</source>
<translation type="vanished">blacklotusproject.comからのデータを使用</translation> <translation type="obsolete">blacklotusproject.comからのデータを使用</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="600"/> <location filename="../src/dlg_settings.cpp" line="600"/>
@ -919,32 +919,37 @@ This is only saved for moderators and cannot be seen by the banned person.</sour
<context> <context>
<name>DlgConnect</name> <name>DlgConnect</name>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="15"/> <location filename="../src/dlg_connect.cpp" line="17"/>
<source>&amp;Host:</source> <source>&amp;Host:</source>
<translation>IP:</translation> <translation>IP:</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="19"/> <location filename="../src/dlg_connect.cpp" line="21"/>
<source>&amp;Port:</source> <source>&amp;Port:</source>
<translation>:</translation> <translation>:</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="23"/> <location filename="../src/dlg_connect.cpp" line="25"/>
<source>Player &amp;name:</source> <source>Player &amp;name:</source>
<translation>:</translation> <translation>:</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="27"/> <location filename="../src/dlg_connect.cpp" line="29"/>
<source>P&amp;assword:</source> <source>P&amp;assword:</source>
<translation>:</translation> <translation>:</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="32"/> <location filename="../src/dlg_connect.cpp" line="34"/>
<source>&amp;Save password</source> <source>&amp;Save password</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="55"/> <location filename="../src/dlg_connect.cpp" line="37"/>
<source>A&amp;uto connect at start</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/dlg_connect.cpp" line="71"/>
<source>Connect to server</source> <source>Connect to server</source>
<translation></translation> <translation></translation>
</message> </message>
@ -1309,7 +1314,7 @@ This is only saved for moderators and cannot be seen by the banned person.</sour
</message> </message>
<message> <message>
<source>Your card database is invalid. Would you like to go back and set the correct path?</source> <source>Your card database is invalid. Would you like to go back and set the correct path?</source>
<translation type="vanished">..</translation> <translation type="obsolete">..</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="776"/> <location filename="../src/dlg_settings.cpp" line="776"/>
@ -1697,7 +1702,7 @@ Would you like to change your database location setting?</source>
</message> </message>
<message> <message>
<source>Path to card database:</source> <source>Path to card database:</source>
<translation type="vanished">:</translation> <translation type="obsolete">:</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="39"/> <location filename="../src/dlg_settings.cpp" line="39"/>
@ -1823,7 +1828,7 @@ Reason for shutdown: %1</source>
</message> </message>
<message> <message>
<source>Czech:</source> <source>Czech:</source>
<translation type="vanished">:</translation> <translation type="obsolete">:</translation>
</message> </message>
<message> <message>
<source>Slovak:</source> <source>Slovak:</source>
@ -1886,7 +1891,7 @@ Reason for shutdown: %1</source>
</message> </message>
<message> <message>
<source>Invalid login data.</source> <source>Invalid login data.</source>
<translation type="vanished">.</translation> <translation type="obsolete">.</translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="242"/> <location filename="../src/window_main.cpp" line="242"/>
@ -3148,12 +3153,12 @@ Local version is %1, remote version is %2.</source>
<message> <message>
<source>%1 has loaded a deck (%2).</source> <source>%1 has loaded a deck (%2).</source>
<comment>female</comment> <comment>female</comment>
<translation type="vanished">%1%2.</translation> <translation type="obsolete">%1%2.</translation>
</message> </message>
<message> <message>
<source>%1 has loaded a deck (%2).</source> <source>%1 has loaded a deck (%2).</source>
<comment>male</comment> <comment>male</comment>
<translation type="vanished">%1%2.</translation> <translation type="obsolete">%1%2.</translation>
</message> </message>
<message> <message>
<location filename="../src/messagelogwidget.cpp" line="381"/> <location filename="../src/messagelogwidget.cpp" line="381"/>
@ -4039,11 +4044,11 @@ Local version is %1, remote version is %2.</source>
</message> </message>
<message> <message>
<source>&amp;OK</source> <source>&amp;OK</source>
<translation type="vanished">OK</translation> <translation type="obsolete">OK</translation>
</message> </message>
<message> <message>
<source>&amp;Cancel</source> <source>&amp;Cancel</source>
<translation type="vanished">Cancel</translation> <translation type="obsolete">Cancel</translation>
</message> </message>
<message> <message>
<location filename="../src/tab_admin.cpp" line="40"/> <location filename="../src/tab_admin.cpp" line="40"/>
@ -4090,7 +4095,7 @@ Local version is %1, remote version is %2.</source>
</message> </message>
<message> <message>
<source>Administration</source> <source>Administration</source>
<translation type="vanished"></translation> <translation type="obsolete"></translation>
</message> </message>
</context> </context>
<context> <context>
@ -4399,7 +4404,7 @@ Please enter a name:</source>
</message> </message>
<message> <message>
<source>Deck storage</source> <source>Deck storage</source>
<translation type="vanished"></translation> <translation type="obsolete"></translation>
</message> </message>
</context> </context>
<context> <context>
@ -4692,14 +4697,14 @@ Please enter a name:</source>
<name>TabServer</name> <name>TabServer</name>
<message> <message>
<source>Server</source> <source>Server</source>
<translation type="vanished"></translation> <translation type="obsolete"></translation>
</message> </message>
</context> </context>
<context> <context>
<name>TabUserLists</name> <name>TabUserLists</name>
<message> <message>
<source>User lists</source> <source>User lists</source>
<translation type="vanished"></translation> <translation type="obsolete"></translation>
</message> </message>
<message> <message>
<location filename="../src/tab_userlists.cpp" line="48"/> <location filename="../src/tab_userlists.cpp" line="48"/>

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS> <!DOCTYPE TS>
<TS version="2.1" language="pl_PL"> <TS version="2.0" language="pl_PL">
<context> <context>
<name>AbstractCounter</name> <name>AbstractCounter</name>
<message> <message>
@ -670,7 +670,7 @@ This is only saved for moderators and cannot be seen by the banned person.</sour
<name>DeckEditorSettingsPage</name> <name>DeckEditorSettingsPage</name>
<message> <message>
<source>Enable &amp;price tag feature (using data from blacklotusproject.com)</source> <source>Enable &amp;price tag feature (using data from blacklotusproject.com)</source>
<translation type="vanished">Włącz oznaczenia &amp;ceny (korzystając z danych z blacklotusproject.com)</translation> <translation type="obsolete">Włącz oznaczenia &amp;ceny (korzystając z danych z blacklotusproject.com)</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="600"/> <location filename="../src/dlg_settings.cpp" line="600"/>
@ -809,32 +809,37 @@ This is only saved for moderators and cannot be seen by the banned person.</sour
<context> <context>
<name>DlgConnect</name> <name>DlgConnect</name>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="15"/> <location filename="../src/dlg_connect.cpp" line="17"/>
<source>&amp;Host:</source> <source>&amp;Host:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="19"/> <location filename="../src/dlg_connect.cpp" line="21"/>
<source>&amp;Port:</source> <source>&amp;Port:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="23"/> <location filename="../src/dlg_connect.cpp" line="25"/>
<source>Player &amp;name:</source> <source>Player &amp;name:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="27"/> <location filename="../src/dlg_connect.cpp" line="29"/>
<source>P&amp;assword:</source> <source>P&amp;assword:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="32"/> <location filename="../src/dlg_connect.cpp" line="34"/>
<source>&amp;Save password</source> <source>&amp;Save password</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="55"/> <location filename="../src/dlg_connect.cpp" line="37"/>
<source>A&amp;uto connect at start</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/dlg_connect.cpp" line="71"/>
<source>Connect to server</source> <source>Connect to server</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -1605,7 +1610,7 @@ Would you like to change your database location setting?</source>
</message> </message>
<message> <message>
<source>Path to card database:</source> <source>Path to card database:</source>
<translation type="vanished">Ścieżka do bazy kart:</translation> <translation type="obsolete">Ścieżka do bazy kart:</translation>
</message> </message>
</context> </context>
<context> <context>
@ -4454,14 +4459,14 @@ Please enter a name:</source>
<name>TabServer</name> <name>TabServer</name>
<message> <message>
<source>Server</source> <source>Server</source>
<translation type="vanished">Serwer</translation> <translation type="obsolete">Serwer</translation>
</message> </message>
</context> </context>
<context> <context>
<name>TabUserLists</name> <name>TabUserLists</name>
<message> <message>
<source>User lists</source> <source>User lists</source>
<translation type="vanished">Lista użytkowników</translation> <translation type="obsolete">Lista użytkowników</translation>
</message> </message>
<message> <message>
<location filename="../src/tab_userlists.cpp" line="48"/> <location filename="../src/tab_userlists.cpp" line="48"/>

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS> <!DOCTYPE TS>
<TS version="2.1" language="pt_BR" sourcelanguage="en_US"> <TS version="2.0" language="pt_BR" sourcelanguage="en_US">
<context> <context>
<name>AbstractCounter</name> <name>AbstractCounter</name>
<message> <message>
@ -43,23 +43,23 @@
</message> </message>
<message> <message>
<source>Path to hand background:</source> <source>Path to hand background:</source>
<translation type="vanished">Caminho para o fundo da mão:</translation> <translation type="obsolete">Caminho para o fundo da mão:</translation>
</message> </message>
<message> <message>
<source>Path to stack background:</source> <source>Path to stack background:</source>
<translation type="vanished">Caminho para o fundo da pilha:</translation> <translation type="obsolete">Caminho para o fundo da pilha:</translation>
</message> </message>
<message> <message>
<source>Path to table background:</source> <source>Path to table background:</source>
<translation type="vanished">Caminho para o fundo da mesa:</translation> <translation type="obsolete">Caminho para o fundo da mesa:</translation>
</message> </message>
<message> <message>
<source>Path to player info background:</source> <source>Path to player info background:</source>
<translation type="vanished">Caminho para o fundo das informações do jogador:</translation> <translation type="obsolete">Caminho para o fundo das informações do jogador:</translation>
</message> </message>
<message> <message>
<source>Path to picture of card back:</source> <source>Path to picture of card back:</source>
<translation type="vanished">Caminho para a imagem do verso dos cards:</translation> <translation type="obsolete">Caminho para a imagem do verso dos cards:</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="372"/> <location filename="../src/dlg_settings.cpp" line="372"/>
@ -1264,30 +1264,35 @@ This is only saved for moderators and cannot be seen by the banned person.</sour
<context> <context>
<name>DlgConnect</name> <name>DlgConnect</name>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="15"/> <location filename="../src/dlg_connect.cpp" line="17"/>
<source>&amp;Host:</source> <source>&amp;Host:</source>
<translation>&amp;Servidor:</translation> <translation>&amp;Servidor:</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="19"/> <location filename="../src/dlg_connect.cpp" line="21"/>
<source>&amp;Port:</source> <source>&amp;Port:</source>
<translation>&amp;Porta:</translation> <translation>&amp;Porta:</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="23"/> <location filename="../src/dlg_connect.cpp" line="25"/>
<source>Player &amp;name:</source> <source>Player &amp;name:</source>
<translation>Nome do &amp;jogador:</translation> <translation>Nome do &amp;jogador:</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="27"/> <location filename="../src/dlg_connect.cpp" line="29"/>
<source>P&amp;assword:</source> <source>P&amp;assword:</source>
<translation>S&amp;enha:</translation> <translation>S&amp;enha:</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="32"/> <location filename="../src/dlg_connect.cpp" line="34"/>
<source>&amp;Save password</source> <source>&amp;Save password</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../src/dlg_connect.cpp" line="37"/>
<source>A&amp;uto connect at start</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>&amp;OK</source> <source>&amp;OK</source>
<translation type="obsolete">&amp;OK</translation> <translation type="obsolete">&amp;OK</translation>
@ -1297,7 +1302,7 @@ This is only saved for moderators and cannot be seen by the banned person.</sour
<translation type="obsolete">&amp;Cancelar</translation> <translation type="obsolete">&amp;Cancelar</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="55"/> <location filename="../src/dlg_connect.cpp" line="71"/>
<source>Connect to server</source> <source>Connect to server</source>
<translation>Conectar ao servidor</translation> <translation>Conectar ao servidor</translation>
</message> </message>
@ -1702,7 +1707,7 @@ This is only saved for moderators and cannot be seen by the banned person.</sour
</message> </message>
<message> <message>
<source>Your card database is invalid. Would you like to go back and set the correct path?</source> <source>Your card database is invalid. Would you like to go back and set the correct path?</source>
<translation type="vanished">O seu banco de dados de cards é inválido. Você gostaria de voltar e corrigir o caminho?</translation> <translation type="obsolete">O seu banco de dados de cards é inválido. Você gostaria de voltar e corrigir o caminho?</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="776"/> <location filename="../src/dlg_settings.cpp" line="776"/>
@ -2086,7 +2091,7 @@ Would you like to change your database location setting?</source>
</message> </message>
<message> <message>
<source>Path to card database:</source> <source>Path to card database:</source>
<translation type="vanished">Caminho para o banco de dados dos cards:</translation> <translation type="obsolete">Caminho para o banco de dados dos cards:</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="39"/> <location filename="../src/dlg_settings.cpp" line="39"/>
@ -2193,7 +2198,7 @@ Would you like to change your database location setting?</source>
</message> </message>
<message> <message>
<source>Invalid login data.</source> <source>Invalid login data.</source>
<translation type="vanished">Informações de login inválidas.</translation> <translation type="obsolete">Informações de login inválidas.</translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="250"/> <location filename="../src/window_main.cpp" line="250"/>
@ -2882,7 +2887,7 @@ A versão local é %1 e a versão remota é %2.</translation>
<message> <message>
<source>%1 has loaded a deck (%2).</source> <source>%1 has loaded a deck (%2).</source>
<comment>female</comment> <comment>female</comment>
<translation type="vanished">%1 carregou o deck %2.</translation> <translation type="obsolete">%1 carregou o deck %2.</translation>
</message> </message>
<message> <message>
<source>%1 has loaded a deck (%2).</source> <source>%1 has loaded a deck (%2).</source>
@ -4732,7 +4737,7 @@ A versão local é %1 e a versão remota é %2.</translation>
</message> </message>
<message> <message>
<source>Administration</source> <source>Administration</source>
<translation type="vanished">Administração</translation> <translation type="obsolete">Administração</translation>
</message> </message>
</context> </context>
<context> <context>
@ -5060,7 +5065,7 @@ Por favor, entre um nome:</translation>
</message> </message>
<message> <message>
<source>Deck storage</source> <source>Deck storage</source>
<translation type="vanished">Armazenamento de decks</translation> <translation type="obsolete">Armazenamento de decks</translation>
</message> </message>
</context> </context>
<context> <context>
@ -5353,14 +5358,14 @@ Por favor, entre um nome:</translation>
<name>TabServer</name> <name>TabServer</name>
<message> <message>
<source>Server</source> <source>Server</source>
<translation type="vanished">Servidor</translation> <translation type="obsolete">Servidor</translation>
</message> </message>
</context> </context>
<context> <context>
<name>TabUserLists</name> <name>TabUserLists</name>
<message> <message>
<source>User lists</source> <source>User lists</source>
<translation type="vanished">Listas de usuários</translation> <translation type="obsolete">Listas de usuários</translation>
</message> </message>
<message> <message>
<location filename="../src/tab_userlists.cpp" line="48"/> <location filename="../src/tab_userlists.cpp" line="48"/>

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS> <!DOCTYPE TS>
<TS version="2.1" language="pt_PT"> <TS version="2.0" language="pt_PT">
<context> <context>
<name>AbstractCounter</name> <name>AbstractCounter</name>
<message> <message>
@ -43,23 +43,23 @@
</message> </message>
<message> <message>
<source>Path to hand background:</source> <source>Path to hand background:</source>
<translation type="vanished">Directório da imagem de fundo da mão:</translation> <translation type="obsolete">Directório da imagem de fundo da mão:</translation>
</message> </message>
<message> <message>
<source>Path to stack background:</source> <source>Path to stack background:</source>
<translation type="vanished">Directório da imagem de fundo da pilha:</translation> <translation type="obsolete">Directório da imagem de fundo da pilha:</translation>
</message> </message>
<message> <message>
<source>Path to table background:</source> <source>Path to table background:</source>
<translation type="vanished">Directório da imagem de fundo do campo de batalha:</translation> <translation type="obsolete">Directório da imagem de fundo do campo de batalha:</translation>
</message> </message>
<message> <message>
<source>Path to player info background:</source> <source>Path to player info background:</source>
<translation type="vanished">Directório da imagem de fundo da informação de jogador:</translation> <translation type="obsolete">Directório da imagem de fundo da informação de jogador:</translation>
</message> </message>
<message> <message>
<source>Path to picture of card back:</source> <source>Path to picture of card back:</source>
<translation type="vanished">Directório da imagem do verso da carta:</translation> <translation type="obsolete">Directório da imagem do verso da carta:</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="372"/> <location filename="../src/dlg_settings.cpp" line="372"/>
@ -1181,7 +1181,7 @@ Isto apenas é guardado para os moderadores e não é visível para a pessoa ban
<name>DeckEditorSettingsPage</name> <name>DeckEditorSettingsPage</name>
<message> <message>
<source>Enable &amp;price tag feature (using data from blacklotusproject.com)</source> <source>Enable &amp;price tag feature (using data from blacklotusproject.com)</source>
<translation type="vanished">&amp;Permitir função de tag de preços (utilizando informação de blacklotusproject.com)</translation> <translation type="obsolete">&amp;Permitir função de tag de preços (utilizando informação de blacklotusproject.com)</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="600"/> <location filename="../src/dlg_settings.cpp" line="600"/>
@ -1327,30 +1327,35 @@ Isto apenas é guardado para os moderadores e não é visível para a pessoa ban
<context> <context>
<name>DlgConnect</name> <name>DlgConnect</name>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="15"/> <location filename="../src/dlg_connect.cpp" line="17"/>
<source>&amp;Host:</source> <source>&amp;Host:</source>
<translation>&amp;Servidor:</translation> <translation>&amp;Servidor:</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="19"/> <location filename="../src/dlg_connect.cpp" line="21"/>
<source>&amp;Port:</source> <source>&amp;Port:</source>
<translation>&amp;Porta:</translation> <translation>&amp;Porta:</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="23"/> <location filename="../src/dlg_connect.cpp" line="25"/>
<source>Player &amp;name:</source> <source>Player &amp;name:</source>
<translation>&amp;Nome do jogador:</translation> <translation>&amp;Nome do jogador:</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="27"/> <location filename="../src/dlg_connect.cpp" line="29"/>
<source>P&amp;assword:</source> <source>P&amp;assword:</source>
<translation>P&amp;assword:</translation> <translation>P&amp;assword:</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="32"/> <location filename="../src/dlg_connect.cpp" line="34"/>
<source>&amp;Save password</source> <source>&amp;Save password</source>
<translation>&amp;Guardar password</translation> <translation>&amp;Guardar password</translation>
</message> </message>
<message>
<location filename="../src/dlg_connect.cpp" line="37"/>
<source>A&amp;uto connect at start</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>&amp;OK</source> <source>&amp;OK</source>
<translation type="obsolete">&amp;OK</translation> <translation type="obsolete">&amp;OK</translation>
@ -1360,7 +1365,7 @@ Isto apenas é guardado para os moderadores e não é visível para a pessoa ban
<translation type="obsolete">&amp;Cancelar</translation> <translation type="obsolete">&amp;Cancelar</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="55"/> <location filename="../src/dlg_connect.cpp" line="71"/>
<source>Connect to server</source> <source>Connect to server</source>
<translation>Ligar ao servidor</translation> <translation>Ligar ao servidor</translation>
</message> </message>
@ -1761,7 +1766,7 @@ Isto apenas é guardado para os moderadores e não é visível para a pessoa ban
</message> </message>
<message> <message>
<source>Your card database is invalid. Would you like to go back and set the correct path?</source> <source>Your card database is invalid. Would you like to go back and set the correct path?</source>
<translation type="vanished">A sua base de dados é inválida. Gostaria de voltar atrás e corrigir o directório?</translation> <translation type="obsolete">A sua base de dados é inválida. Gostaria de voltar atrás e corrigir o directório?</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="776"/> <location filename="../src/dlg_settings.cpp" line="776"/>
@ -2155,11 +2160,11 @@ Would you like to change your database location setting?</source>
</message> </message>
<message> <message>
<source>Path to card database:</source> <source>Path to card database:</source>
<translation type="vanished">Directório da base de dados de cartas:</translation> <translation type="obsolete">Directório da base de dados de cartas:</translation>
</message> </message>
<message> <message>
<source>Path to token database:</source> <source>Path to token database:</source>
<translation type="vanished">Directório da base de dados de fichas:</translation> <translation type="obsolete">Directório da base de dados de fichas:</translation>
</message> </message>
</context> </context>
<context> <context>
@ -2264,7 +2269,7 @@ Would you like to change your database location setting?</source>
</message> </message>
<message> <message>
<source>Invalid login data.</source> <source>Invalid login data.</source>
<translation type="vanished">Informação de login incorrecta.</translation> <translation type="obsolete">Informação de login incorrecta.</translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="250"/> <location filename="../src/window_main.cpp" line="250"/>
@ -2339,7 +2344,7 @@ Motivo para o encerramento: %1</numerusform>
</message> </message>
<message> <message>
<source>Czech:</source> <source>Czech:</source>
<translation type="vanished">Checo:</translation> <translation type="obsolete">Checo:</translation>
</message> </message>
<message> <message>
<source>Slovak:</source> <source>Slovak:</source>
@ -3662,12 +3667,12 @@ Versão local é %1, versão remota é %2.</translation>
<message> <message>
<source>%1 has loaded a deck (%2).</source> <source>%1 has loaded a deck (%2).</source>
<comment>female</comment> <comment>female</comment>
<translation type="vanished">%1 carregou o deck %2.</translation> <translation type="obsolete">%1 carregou o deck %2.</translation>
</message> </message>
<message> <message>
<source>%1 has loaded a deck (%2).</source> <source>%1 has loaded a deck (%2).</source>
<comment>male</comment> <comment>male</comment>
<translation type="vanished">%1 carregou o deck %2.</translation> <translation type="obsolete">%1 carregou o deck %2.</translation>
</message> </message>
<message> <message>
<location filename="../src/messagelogwidget.cpp" line="350"/> <location filename="../src/messagelogwidget.cpp" line="350"/>
@ -4260,7 +4265,7 @@ Versão local é %1, versão remota é %2.</translation>
</message> </message>
<message> <message>
<source>Ctrl+H</source> <source>Ctrl+H</source>
<translation type="vanished">Ctrl+H</translation> <translation type="obsolete">Ctrl+H</translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="647"/> <location filename="../src/player.cpp" line="647"/>
@ -4622,11 +4627,11 @@ Versão local é %1, versão remota é %2.</translation>
</message> </message>
<message> <message>
<source>Cockatrice decks (*.cod)</source> <source>Cockatrice decks (*.cod)</source>
<translation type="vanished">Decks do Cockatrice (*.cod)</translation> <translation type="obsolete">Decks do Cockatrice (*.cod)</translation>
</message> </message>
<message> <message>
<source>Plain text decks (*.dec *.mwDeck)</source> <source>Plain text decks (*.dec *.mwDeck)</source>
<translation type="vanished">Decks baseados em texto simples (*.dec *.mwDeck)</translation> <translation type="obsolete">Decks baseados em texto simples (*.dec *.mwDeck)</translation>
</message> </message>
<message> <message>
<location filename="../src/deck_loader.cpp" line="8"/> <location filename="../src/deck_loader.cpp" line="8"/>
@ -4762,11 +4767,11 @@ Versão local é %1, versão remota é %2.</translation>
</message> </message>
<message> <message>
<source>&amp;OK</source> <source>&amp;OK</source>
<translation type="vanished">&amp;OK</translation> <translation type="obsolete">&amp;OK</translation>
</message> </message>
<message> <message>
<source>&amp;Cancel</source> <source>&amp;Cancel</source>
<translation type="vanished">&amp;Cancelar</translation> <translation type="obsolete">&amp;Cancelar</translation>
</message> </message>
<message> <message>
<location filename="../src/tab_admin.cpp" line="40"/> <location filename="../src/tab_admin.cpp" line="40"/>
@ -4813,7 +4818,7 @@ Versão local é %1, versão remota é %2.</translation>
</message> </message>
<message> <message>
<source>Administration</source> <source>Administration</source>
<translation type="vanished">Administração</translation> <translation type="obsolete">Administração</translation>
</message> </message>
</context> </context>
<context> <context>
@ -4839,7 +4844,7 @@ Versão local é %1, versão remota é %2.</translation>
<name>TabDeckEditor</name> <name>TabDeckEditor</name>
<message> <message>
<source>&amp;Search...</source> <source>&amp;Search...</source>
<translation type="vanished">&amp;Procurar...</translation> <translation type="obsolete">&amp;Procurar...</translation>
</message> </message>
<message> <message>
<location filename="../src/tab_deck_editor.cpp" line="292"/> <location filename="../src/tab_deck_editor.cpp" line="292"/>
@ -4938,11 +4943,11 @@ Versão local é %1, versão remota é %2.</translation>
</message> </message>
<message> <message>
<source>Return</source> <source>Return</source>
<translation type="vanished">Return</translation> <translation type="obsolete">Return</translation>
</message> </message>
<message> <message>
<source>Enter</source> <source>Enter</source>
<translation type="vanished">Enter</translation> <translation type="obsolete">Enter</translation>
</message> </message>
<message> <message>
<location filename="../src/tab_deck_editor.cpp" line="315"/> <location filename="../src/tab_deck_editor.cpp" line="315"/>
@ -4951,11 +4956,11 @@ Versão local é %1, versão remota é %2.</translation>
</message> </message>
<message> <message>
<source>Ctrl+Return</source> <source>Ctrl+Return</source>
<translation type="vanished">Ctrl+Return</translation> <translation type="obsolete">Ctrl+Return</translation>
</message> </message>
<message> <message>
<source>Ctrl+Enter</source> <source>Ctrl+Enter</source>
<translation type="vanished">Ctrl+Enter</translation> <translation type="obsolete">Ctrl+Enter</translation>
</message> </message>
<message> <message>
<location filename="../src/tab_deck_editor.cpp" line="317"/> <location filename="../src/tab_deck_editor.cpp" line="317"/>
@ -5141,7 +5146,7 @@ Por favor introduza um nome:</translation>
</message> </message>
<message> <message>
<source>Deck storage</source> <source>Deck storage</source>
<translation type="vanished">Armazenamento de decks</translation> <translation type="obsolete">Armazenamento de decks</translation>
</message> </message>
</context> </context>
<context> <context>
@ -5390,7 +5395,7 @@ Por favor introduza um nome:</translation>
</message> </message>
<message> <message>
<source>Game replays</source> <source>Game replays</source>
<translation type="vanished">Replays de jogos</translation> <translation type="obsolete">Replays de jogos</translation>
</message> </message>
</context> </context>
<context> <context>
@ -5438,14 +5443,14 @@ Por favor introduza um nome:</translation>
<name>TabServer</name> <name>TabServer</name>
<message> <message>
<source>Server</source> <source>Server</source>
<translation type="vanished">Servidor</translation> <translation type="obsolete">Servidor</translation>
</message> </message>
</context> </context>
<context> <context>
<name>TabUserLists</name> <name>TabUserLists</name>
<message> <message>
<source>User lists</source> <source>User lists</source>
<translation type="vanished">Lista de utilizadores</translation> <translation type="obsolete">Lista de utilizadores</translation>
</message> </message>
<message> <message>
<location filename="../src/tab_userlists.cpp" line="48"/> <location filename="../src/tab_userlists.cpp" line="48"/>

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS> <!DOCTYPE TS>
<TS version="2.1" language="ru_RU"> <TS version="2.0" language="ru_RU">
<context> <context>
<name>AbstractCounter</name> <name>AbstractCounter</name>
<message> <message>
@ -43,23 +43,23 @@
</message> </message>
<message> <message>
<source>Path to hand background:</source> <source>Path to hand background:</source>
<translation type="vanished">Рука:</translation> <translation type="obsolete">Рука:</translation>
</message> </message>
<message> <message>
<source>Path to stack background:</source> <source>Path to stack background:</source>
<translation type="vanished">Стек:</translation> <translation type="obsolete">Стек:</translation>
</message> </message>
<message> <message>
<source>Path to table background:</source> <source>Path to table background:</source>
<translation type="vanished">Поле битвы:</translation> <translation type="obsolete">Поле битвы:</translation>
</message> </message>
<message> <message>
<source>Path to player info background:</source> <source>Path to player info background:</source>
<translation type="vanished">Панель игрока:</translation> <translation type="obsolete">Панель игрока:</translation>
</message> </message>
<message> <message>
<source>Path to picture of card back:</source> <source>Path to picture of card back:</source>
<translation type="vanished">Рубашки карт:</translation> <translation type="obsolete">Рубашки карт:</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="366"/> <location filename="../src/dlg_settings.cpp" line="366"/>
@ -1091,7 +1091,7 @@ This is only saved for moderators and cannot be seen by the banned person.</sour
<name>DeckEditorSettingsPage</name> <name>DeckEditorSettingsPage</name>
<message> <message>
<source>Enable &amp;price tag feature (using data from blacklotusproject.com)</source> <source>Enable &amp;price tag feature (using data from blacklotusproject.com)</source>
<translation type="vanished">Подписывать &amp;цены (по данным blacklotusproject.com)</translation> <translation type="obsolete">Подписывать &amp;цены (по данным blacklotusproject.com)</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="600"/> <location filename="../src/dlg_settings.cpp" line="600"/>
@ -1230,30 +1230,35 @@ This is only saved for moderators and cannot be seen by the banned person.</sour
<context> <context>
<name>DlgConnect</name> <name>DlgConnect</name>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="15"/> <location filename="../src/dlg_connect.cpp" line="17"/>
<source>&amp;Host:</source> <source>&amp;Host:</source>
<translation>&amp;Хост:</translation> <translation>&amp;Хост:</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="19"/> <location filename="../src/dlg_connect.cpp" line="21"/>
<source>&amp;Port:</source> <source>&amp;Port:</source>
<translation>&amp;Порт:</translation> <translation>&amp;Порт:</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="23"/> <location filename="../src/dlg_connect.cpp" line="25"/>
<source>Player &amp;name:</source> <source>Player &amp;name:</source>
<translation>&amp;Ник:</translation> <translation>&amp;Ник:</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="27"/> <location filename="../src/dlg_connect.cpp" line="29"/>
<source>P&amp;assword:</source> <source>P&amp;assword:</source>
<translation>П&amp;ароль:</translation> <translation>П&amp;ароль:</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="32"/> <location filename="../src/dlg_connect.cpp" line="34"/>
<source>&amp;Save password</source> <source>&amp;Save password</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../src/dlg_connect.cpp" line="37"/>
<source>A&amp;uto connect at start</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>&amp;OK</source> <source>&amp;OK</source>
<translation type="obsolete">&amp;Ок</translation> <translation type="obsolete">&amp;Ок</translation>
@ -1263,7 +1268,7 @@ This is only saved for moderators and cannot be seen by the banned person.</sour
<translation type="obsolete">&amp;Отмена</translation> <translation type="obsolete">&amp;Отмена</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="55"/> <location filename="../src/dlg_connect.cpp" line="71"/>
<source>Connect to server</source> <source>Connect to server</source>
<translation>Соединение</translation> <translation>Соединение</translation>
</message> </message>
@ -1668,7 +1673,7 @@ This is only saved for moderators and cannot be seen by the banned person.</sour
</message> </message>
<message> <message>
<source>Your card database is invalid. Would you like to go back and set the correct path?</source> <source>Your card database is invalid. Would you like to go back and set the correct path?</source>
<translation type="vanished">База карт не найдена. Вернуться и задать правильный путь?</translation> <translation type="obsolete">База карт не найдена. Вернуться и задать правильный путь?</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="776"/> <location filename="../src/dlg_settings.cpp" line="776"/>
@ -2058,7 +2063,7 @@ Would you like to change your database location setting?</source>
</message> </message>
<message> <message>
<source>Path to card database:</source> <source>Path to card database:</source>
<translation type="vanished">Путь к базе карт:</translation> <translation type="obsolete">Путь к базе карт:</translation>
</message> </message>
</context> </context>
<context> <context>
@ -2179,7 +2184,7 @@ Reason for shutdown: %1</source>
</message> </message>
<message> <message>
<source>Czech:</source> <source>Czech:</source>
<translation type="vanished">Чешский:</translation> <translation type="obsolete">Чешский:</translation>
</message> </message>
<message> <message>
<source>Slovak:</source> <source>Slovak:</source>
@ -2242,7 +2247,7 @@ Reason for shutdown: %1</source>
</message> </message>
<message> <message>
<source>Invalid login data.</source> <source>Invalid login data.</source>
<translation type="vanished">Неверный логин/пароль.</translation> <translation type="obsolete">Неверный логин/пароль.</translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="242"/> <location filename="../src/window_main.cpp" line="242"/>
@ -2852,12 +2857,12 @@ Local version is %1, remote version is %2.</source>
<message> <message>
<source>%1 has loaded a deck (%2).</source> <source>%1 has loaded a deck (%2).</source>
<comment>female</comment> <comment>female</comment>
<translation type="vanished">%1 загрузила колоду %2.</translation> <translation type="obsolete">%1 загрузила колоду %2.</translation>
</message> </message>
<message> <message>
<source>%1 has loaded a deck (%2).</source> <source>%1 has loaded a deck (%2).</source>
<comment>male</comment> <comment>male</comment>
<translation type="vanished">%1 загрузил колоду %2.</translation> <translation type="obsolete">%1 загрузил колоду %2.</translation>
</message> </message>
<message> <message>
<location filename="../src/messagelogwidget.cpp" line="93"/> <location filename="../src/messagelogwidget.cpp" line="93"/>
@ -4653,11 +4658,11 @@ Local version is %1, remote version is %2.</source>
</message> </message>
<message> <message>
<source>&amp;OK</source> <source>&amp;OK</source>
<translation type="vanished">&amp;Ок</translation> <translation type="obsolete">&amp;Ок</translation>
</message> </message>
<message> <message>
<source>&amp;Cancel</source> <source>&amp;Cancel</source>
<translation type="vanished">&amp;Отмена</translation> <translation type="obsolete">&amp;Отмена</translation>
</message> </message>
<message> <message>
<location filename="../src/tab_admin.cpp" line="40"/> <location filename="../src/tab_admin.cpp" line="40"/>
@ -4704,7 +4709,7 @@ Local version is %1, remote version is %2.</source>
</message> </message>
<message> <message>
<source>Administration</source> <source>Administration</source>
<translation type="vanished">Администрирование</translation> <translation type="obsolete">Администрирование</translation>
</message> </message>
</context> </context>
<context> <context>
@ -4997,7 +5002,7 @@ Please enter a name:</source>
</message> </message>
<message> <message>
<source>Deck storage</source> <source>Deck storage</source>
<translation type="vanished">Хранилище колод</translation> <translation type="obsolete">Хранилище колод</translation>
</message> </message>
</context> </context>
<context> <context>
@ -5282,14 +5287,14 @@ Please enter a name:</source>
<name>TabServer</name> <name>TabServer</name>
<message> <message>
<source>Server</source> <source>Server</source>
<translation type="vanished">Сервер</translation> <translation type="obsolete">Сервер</translation>
</message> </message>
</context> </context>
<context> <context>
<name>TabUserLists</name> <name>TabUserLists</name>
<message> <message>
<source>User lists</source> <source>User lists</source>
<translation type="vanished">Панели пользователей</translation> <translation type="obsolete">Панели пользователей</translation>
</message> </message>
<message> <message>
<location filename="../src/tab_userlists.cpp" line="48"/> <location filename="../src/tab_userlists.cpp" line="48"/>

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS> <!DOCTYPE TS>
<TS version="2.1" language="sk_SK"> <TS version="2.0" language="sk_SK">
<context> <context>
<name>AbstractCounter</name> <name>AbstractCounter</name>
<message> <message>
@ -725,32 +725,37 @@ This is only saved for moderators and cannot be seen by the banned person.</sour
<context> <context>
<name>DlgConnect</name> <name>DlgConnect</name>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="15"/> <location filename="../src/dlg_connect.cpp" line="17"/>
<source>&amp;Host:</source> <source>&amp;Host:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="19"/> <location filename="../src/dlg_connect.cpp" line="21"/>
<source>&amp;Port:</source> <source>&amp;Port:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="23"/> <location filename="../src/dlg_connect.cpp" line="25"/>
<source>Player &amp;name:</source> <source>Player &amp;name:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="27"/> <location filename="../src/dlg_connect.cpp" line="29"/>
<source>P&amp;assword:</source> <source>P&amp;assword:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="32"/> <location filename="../src/dlg_connect.cpp" line="34"/>
<source>&amp;Save password</source> <source>&amp;Save password</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="55"/> <location filename="../src/dlg_connect.cpp" line="37"/>
<source>A&amp;uto connect at start</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/dlg_connect.cpp" line="71"/>
<source>Connect to server</source> <source>Connect to server</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS> <!DOCTYPE TS>
<TS version="2.1" language="sv_SE"> <TS version="2.0" language="sv_SE">
<context> <context>
<name>AbstractCounter</name> <name>AbstractCounter</name>
<message> <message>
@ -43,23 +43,23 @@
</message> </message>
<message> <message>
<source>Path to hand background:</source> <source>Path to hand background:</source>
<translation type="vanished">Sökväg till handbakgrund:</translation> <translation type="obsolete">Sökväg till handbakgrund:</translation>
</message> </message>
<message> <message>
<source>Path to stack background:</source> <source>Path to stack background:</source>
<translation type="vanished">Sökväg till stapelbakgrund:</translation> <translation type="obsolete">Sökväg till stapelbakgrund:</translation>
</message> </message>
<message> <message>
<source>Path to table background:</source> <source>Path to table background:</source>
<translation type="vanished">Sökväg till bordbakgrund:</translation> <translation type="obsolete">Sökväg till bordbakgrund:</translation>
</message> </message>
<message> <message>
<source>Path to player info background:</source> <source>Path to player info background:</source>
<translation type="vanished">Sökväg till spelarinfobakgrund:</translation> <translation type="obsolete">Sökväg till spelarinfobakgrund:</translation>
</message> </message>
<message> <message>
<source>Path to picture of card back:</source> <source>Path to picture of card back:</source>
<translation type="vanished">Sökväg till kortbaksidans bild:</translation> <translation type="obsolete">Sökväg till kortbaksidans bild:</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="366"/> <location filename="../src/dlg_settings.cpp" line="366"/>
@ -923,7 +923,7 @@ Detta sparas endast för moderatorer och kan inte ses av den bannlysta personen.
<name>DeckEditorSettingsPage</name> <name>DeckEditorSettingsPage</name>
<message> <message>
<source>Enable &amp;price tag feature (using data from blacklotusproject.com)</source> <source>Enable &amp;price tag feature (using data from blacklotusproject.com)</source>
<translation type="vanished">Aktivera &amp;prislappsfunktionen (använder data från blacklotusproject.com)</translation> <translation type="obsolete">Aktivera &amp;prislappsfunktionen (använder data från blacklotusproject.com)</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="600"/> <location filename="../src/dlg_settings.cpp" line="600"/>
@ -1062,30 +1062,35 @@ Detta sparas endast för moderatorer och kan inte ses av den bannlysta personen.
<context> <context>
<name>DlgConnect</name> <name>DlgConnect</name>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="15"/> <location filename="../src/dlg_connect.cpp" line="17"/>
<source>&amp;Host:</source> <source>&amp;Host:</source>
<translation>&amp;Värd:</translation> <translation>&amp;Värd:</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="19"/> <location filename="../src/dlg_connect.cpp" line="21"/>
<source>&amp;Port:</source> <source>&amp;Port:</source>
<translation>&amp;Port:</translation> <translation>&amp;Port:</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="23"/> <location filename="../src/dlg_connect.cpp" line="25"/>
<source>Player &amp;name:</source> <source>Player &amp;name:</source>
<translation>Spelar&amp;namn:</translation> <translation>Spelar&amp;namn:</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="27"/> <location filename="../src/dlg_connect.cpp" line="29"/>
<source>P&amp;assword:</source> <source>P&amp;assword:</source>
<translation>&amp;Lösenord:</translation> <translation>&amp;Lösenord:</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="32"/> <location filename="../src/dlg_connect.cpp" line="34"/>
<source>&amp;Save password</source> <source>&amp;Save password</source>
<translation>&amp;Spara lösenord</translation> <translation>&amp;Spara lösenord</translation>
</message> </message>
<message>
<location filename="../src/dlg_connect.cpp" line="37"/>
<source>A&amp;uto connect at start</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>&amp;OK</source> <source>&amp;OK</source>
<translation type="obsolete">&amp;OK</translation> <translation type="obsolete">&amp;OK</translation>
@ -1095,7 +1100,7 @@ Detta sparas endast för moderatorer och kan inte ses av den bannlysta personen.
<translation type="obsolete">&amp;Avbryt</translation> <translation type="obsolete">&amp;Avbryt</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="55"/> <location filename="../src/dlg_connect.cpp" line="71"/>
<source>Connect to server</source> <source>Connect to server</source>
<translation>Anslut till server</translation> <translation>Anslut till server</translation>
</message> </message>
@ -1492,7 +1497,7 @@ Detta sparas endast för moderatorer och kan inte ses av den bannlysta personen.
</message> </message>
<message> <message>
<source>Your card database is invalid. Would you like to go back and set the correct path?</source> <source>Your card database is invalid. Would you like to go back and set the correct path?</source>
<translation type="vanished">Din kortdatabas är ogiltig. Vill du tillbaka och ange den korrekta sökvägen?</translation> <translation type="obsolete">Din kortdatabas är ogiltig. Vill du tillbaka och ange den korrekta sökvägen?</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="776"/> <location filename="../src/dlg_settings.cpp" line="776"/>
@ -1878,11 +1883,11 @@ Would you like to change your database location setting?</source>
</message> </message>
<message> <message>
<source>Path to card database:</source> <source>Path to card database:</source>
<translation type="vanished">Sökväg till kortdatabas:</translation> <translation type="obsolete">Sökväg till kortdatabas:</translation>
</message> </message>
<message> <message>
<source>Path to token database:</source> <source>Path to token database:</source>
<translation type="vanished">Sökväg till jetongdatabas:</translation> <translation type="obsolete">Sökväg till jetongdatabas:</translation>
</message> </message>
</context> </context>
<context> <context>
@ -2030,7 +2035,7 @@ Anledning till nedstängning: %1</numerusform>
</message> </message>
<message> <message>
<source>Czech:</source> <source>Czech:</source>
<translation type="vanished">Tjeckiska:</translation> <translation type="obsolete">Tjeckiska:</translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="228"/> <location filename="../src/window_main.cpp" line="228"/>
@ -2063,7 +2068,7 @@ Anledning till nedstängning: %1</numerusform>
</message> </message>
<message> <message>
<source>Invalid login data.</source> <source>Invalid login data.</source>
<translation type="vanished">Ogiltig inloggningsdata.</translation> <translation type="obsolete">Ogiltig inloggningsdata.</translation>
</message> </message>
<message> <message>
<location filename="../src/window_main.cpp" line="242"/> <location filename="../src/window_main.cpp" line="242"/>
@ -2280,12 +2285,12 @@ Lokal version är %1, avlägsen version är %2.</translation>
<message> <message>
<source>%1 has loaded a deck (%2).</source> <source>%1 has loaded a deck (%2).</source>
<comment>female</comment> <comment>female</comment>
<translation type="vanished">%1 har laddat en lek (%2).</translation> <translation type="obsolete">%1 har laddat en lek (%2).</translation>
</message> </message>
<message> <message>
<source>%1 has loaded a deck (%2).</source> <source>%1 has loaded a deck (%2).</source>
<comment>male</comment> <comment>male</comment>
<translation type="vanished">%1 har laddat en lek (%2).</translation> <translation type="obsolete">%1 har laddat en lek (%2).</translation>
</message> </message>
<message> <message>
<location filename="../src/messagelogwidget.cpp" line="93"/> <location filename="../src/messagelogwidget.cpp" line="93"/>
@ -4054,11 +4059,11 @@ Lokal version är %1, avlägsen version är %2.</translation>
</message> </message>
<message> <message>
<source>Cockatrice decks (*.cod)</source> <source>Cockatrice decks (*.cod)</source>
<translation type="vanished">Cockatricelekar (*.cod)</translation> <translation type="obsolete">Cockatricelekar (*.cod)</translation>
</message> </message>
<message> <message>
<source>Plain text decks (*.dec *.mwDeck)</source> <source>Plain text decks (*.dec *.mwDeck)</source>
<translation type="vanished">Klartextlekar (*.dec *.mwDeck)</translation> <translation type="obsolete">Klartextlekar (*.dec *.mwDeck)</translation>
</message> </message>
<message> <message>
<location filename="../src/deck_loader.cpp" line="8"/> <location filename="../src/deck_loader.cpp" line="8"/>
@ -4187,11 +4192,11 @@ Lokal version är %1, avlägsen version är %2.</translation>
</message> </message>
<message> <message>
<source>&amp;OK</source> <source>&amp;OK</source>
<translation type="vanished">&amp;OK</translation> <translation type="obsolete">&amp;OK</translation>
</message> </message>
<message> <message>
<source>&amp;Cancel</source> <source>&amp;Cancel</source>
<translation type="vanished">&amp;Avbryt</translation> <translation type="obsolete">&amp;Avbryt</translation>
</message> </message>
<message> <message>
<location filename="../src/tab_admin.cpp" line="40"/> <location filename="../src/tab_admin.cpp" line="40"/>
@ -4238,14 +4243,14 @@ Lokal version är %1, avlägsen version är %2.</translation>
</message> </message>
<message> <message>
<source>Administration</source> <source>Administration</source>
<translation type="vanished">Administration</translation> <translation type="obsolete">Administration</translation>
</message> </message>
</context> </context>
<context> <context>
<name>TabDeckEditor</name> <name>TabDeckEditor</name>
<message> <message>
<source>&amp;Search...</source> <source>&amp;Search...</source>
<translation type="vanished">&amp;Sök...</translation> <translation type="obsolete">&amp;Sök...</translation>
</message> </message>
<message> <message>
<location filename="../src/tab_deck_editor.cpp" line="292"/> <location filename="../src/tab_deck_editor.cpp" line="292"/>
@ -4529,7 +4534,7 @@ Please enter a name:</source>
</message> </message>
<message> <message>
<source>Deck storage</source> <source>Deck storage</source>
<translation type="vanished">Leklagring</translation> <translation type="obsolete">Leklagring</translation>
</message> </message>
</context> </context>
<context> <context>
@ -4778,7 +4783,7 @@ Please enter a name:</source>
</message> </message>
<message> <message>
<source>Game replays</source> <source>Game replays</source>
<translation type="vanished">Spelrepriser</translation> <translation type="obsolete">Spelrepriser</translation>
</message> </message>
</context> </context>
<context> <context>
@ -4818,14 +4823,14 @@ Please enter a name:</source>
<name>TabServer</name> <name>TabServer</name>
<message> <message>
<source>Server</source> <source>Server</source>
<translation type="vanished">Server</translation> <translation type="obsolete">Server</translation>
</message> </message>
</context> </context>
<context> <context>
<name>TabUserLists</name> <name>TabUserLists</name>
<message> <message>
<source>User lists</source> <source>User lists</source>
<translation type="vanished">Användarlistor</translation> <translation type="obsolete">Användarlistor</translation>
</message> </message>
<message> <message>
<location filename="../src/tab_userlists.cpp" line="48"/> <location filename="../src/tab_userlists.cpp" line="48"/>

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS> <!DOCTYPE TS>
<TS version="2.1" language="zh_CN"> <TS version="2.0" language="zh_CN">
<context> <context>
<name>AbstractCounter</name> <name>AbstractCounter</name>
<message> <message>
@ -725,32 +725,37 @@ This is only saved for moderators and cannot be seen by the banned person.</sour
<context> <context>
<name>DlgConnect</name> <name>DlgConnect</name>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="15"/> <location filename="../src/dlg_connect.cpp" line="17"/>
<source>&amp;Host:</source> <source>&amp;Host:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="19"/> <location filename="../src/dlg_connect.cpp" line="21"/>
<source>&amp;Port:</source> <source>&amp;Port:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="23"/> <location filename="../src/dlg_connect.cpp" line="25"/>
<source>Player &amp;name:</source> <source>Player &amp;name:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="27"/> <location filename="../src/dlg_connect.cpp" line="29"/>
<source>P&amp;assword:</source> <source>P&amp;assword:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="32"/> <location filename="../src/dlg_connect.cpp" line="34"/>
<source>&amp;Save password</source> <source>&amp;Save password</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_connect.cpp" line="55"/> <location filename="../src/dlg_connect.cpp" line="37"/>
<source>A&amp;uto connect at start</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/dlg_connect.cpp" line="71"/>
<source>Connect to server</source> <source>Connect to server</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

View file

@ -34,7 +34,6 @@
#include <QCoreApplication> #include <QCoreApplication>
#include <QThread> #include <QThread>
#include <QDebug> #include <QDebug>
#include <QSettings>
Server::Server(bool _threaded, QObject *parent) Server::Server(bool _threaded, QObject *parent)
: QObject(parent), threaded(_threaded), nextLocalGameId(0) : QObject(parent), threaded(_threaded), nextLocalGameId(0)
@ -132,8 +131,7 @@ AuthenticationResult Server::loginUser(Server_ProtocolHandler *session, QString
} else if (authState == UnknownUser) { } else if (authState == UnknownUser) {
// Change user name so that no two users have the same names, // Change user name so that no two users have the same names,
// don't interfere with registered user names though. // don't interfere with registered user names though.
QSettings settings("servatrice.ini", QSettings::IniFormat); bool requireReg = databaseInterface->getRequireRegistration();
bool requireReg = settings.value("authentication/regonly", 0).toBool();
if (requireReg) { if (requireReg) {
qDebug("Login denied: registration required"); qDebug("Login denied: registration required");
databaseInterface->unlockSessionTables(); databaseInterface->unlockSessionTables();

View file

@ -2,6 +2,7 @@
#define SERVER_DATABASE_INTERFACE_H #define SERVER_DATABASE_INTERFACE_H
#include <QObject> #include <QObject>
#include <QSettings>
#include "server.h" #include "server.h"
@ -32,6 +33,8 @@ public:
virtual void lockSessionTables() { } virtual void lockSessionTables() { }
virtual void unlockSessionTables() { } virtual void unlockSessionTables() { }
virtual bool userSessionExists(const QString & /* userName */) { return false; } virtual bool userSessionExists(const QString & /* userName */) { return false; }
virtual bool getRequireRegistration() { return false; }
}; };
#endif #endif

View file

@ -210,11 +210,13 @@ int OracleImporter::importTextSpoiler(CardSet *set, const QVariant &data)
} }
} }
CardInfo *card = addCard(set->getShortName(), cardName, cardIsToken, cardId, cardCost, cardType, cardPT, cardLoyalty, cardText.split("\n")); if (!cardIsToken) {
CardInfo *card = addCard(set->getShortName(), cardName, cardIsToken, cardId, cardCost, cardType, cardPT, cardLoyalty, cardText.split("\n"));
if (!set->contains(card)) { if (!set->contains(card)) {
card->addToSet(set); card->addToSet(set);
cards++; cards++;
}
} }
} }

View file

@ -7,6 +7,7 @@
#endif #endif
#include <QAbstractButton> #include <QAbstractButton>
#include <QCheckBox> #include <QCheckBox>
#include <QDir>
#include <QFileDialog> #include <QFileDialog>
#include <QGridLayout> #include <QGridLayout>
#include <QLabel> #include <QLabel>
@ -403,15 +404,13 @@ bool SaveSetsPage::validatePage()
QStandardPaths::standardLocations(QStandardPaths::DataLocation).first(); QStandardPaths::standardLocations(QStandardPaths::DataLocation).first();
#endif #endif
QSettings* settings = new QSettings(this); QSettings* settings = new QSettings(this);
QString savePath = settings->value("paths/carddatabase").toString(); QString defaultPath = settings->value("paths/carddatabase").toString();
if (savePath.isEmpty()) {
QDir().mkpath(dataDir);
}
QString windowName = tr("Save card database"); QString windowName = tr("Save card database");
QString fileType = tr("XML; card database (*.xml)"); QString fileType = tr("XML; card database (*.xml)");
do { do {
QString fileName; QString fileName;
if (savePath.isEmpty()) { if (defaultPath.isEmpty()) {
if (defaultPathCheckBox->isChecked()) if (defaultPathCheckBox->isChecked())
fileName = dataDir + "/cards.xml"; fileName = dataDir + "/cards.xml";
else else
@ -420,19 +419,25 @@ bool SaveSetsPage::validatePage()
} }
else { else {
if (defaultPathCheckBox->isChecked()) if (defaultPathCheckBox->isChecked())
fileName = savePath; fileName = defaultPath;
else else
fileName = QFileDialog::getSaveFileName(this, windowName, savePath, fileType); fileName = QFileDialog::getSaveFileName(this, windowName, defaultPath, fileType);
} }
if (fileName.isEmpty()) { if (fileName.isEmpty()) {
return false; return false;
} }
QFileInfo fi(fileName);
QDir fileDir(fi.path());
if (!fileDir.exists() && !fileDir.mkpath(fileDir.absolutePath())) {
return false;
}
if (wizard()->importer->saveToFile(fileName)) if (wizard()->importer->saveToFile(fileName))
{ {
ok = true; ok = true;
QMessageBox::information(this, tr("Success"), tr("The card database has been saved successfully.")); QMessageBox::information(this, tr("Success"), tr("The card database has been saved successfully."));
} else { } else {
QMessageBox::critical(this, tr("Error"), tr("The file could not be saved to the desired location.")); QMessageBox::critical(this, tr("Error"), tr("The file could not be saved to %1").arg(fileName));;
if (defaultPathCheckBox->isChecked()) if (defaultPathCheckBox->isChecked())
defaultPathCheckBox->setChecked(false); defaultPathCheckBox->setChecked(false);
} }

View file

@ -4,8 +4,6 @@
PROJECT(servatrice) PROJECT(servatrice)
FIND_PACKAGE(Libgcrypt REQUIRED)
SET(servatrice_SOURCES SET(servatrice_SOURCES
src/main.cpp src/main.cpp
src/passwordhasher.cpp src/passwordhasher.cpp
@ -14,10 +12,24 @@ SET(servatrice_SOURCES
src/servatrice_database_interface.cpp src/servatrice_database_interface.cpp
src/server_logger.cpp src/server_logger.cpp
src/serversocketinterface.cpp src/serversocketinterface.cpp
src/settingscache.cpp
src/isl_interface.cpp src/isl_interface.cpp
${VERSION_STRING_CPP} ${VERSION_STRING_CPP}
) )
set(servatrice_RESOURCES servatrice.qrc)
if(WIN32)
set(servatrice_SOURCES ${servatrice_SOURCES} servatrice.rc)
endif(WIN32)
if(APPLE)
set(MACOSX_BUNDLE_ICON_FILE appicon.icns)
set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/resources/appicon.icns PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
set(servatrice_SOURCES ${servatrice_SOURCES} ${CMAKE_CURRENT_SOURCE_DIR}/resources/appicon.icns)
ENDIF(APPLE)
set(SERVATRICE_LIBS) set(SERVATRICE_LIBS)
# Qt4 stuff # Qt4 stuff
@ -29,6 +41,11 @@ if(Qt4_FOUND)
INCLUDE(${QT_USE_FILE}) INCLUDE(${QT_USE_FILE})
include_directories(${QT_INCLUDES}) include_directories(${QT_INCLUDES})
LIST(APPEND SERVATRICE_LIBS ${QT_LIBRARIES}) LIST(APPEND SERVATRICE_LIBS ${QT_LIBRARIES})
# Libgcrypt is required only with Qt4 to support SHA512 hashing
FIND_PACKAGE(Libgcrypt REQUIRED)
INCLUDE_DIRECTORIES(${LIBGCRYPT_INCLUDE_DIR})
QT4_ADD_RESOURCES(servatrice_RESOURCES_RCC ${servatrice_RESOURCES})
endif() endif()
# qt5 stuff # qt5 stuff
@ -50,6 +67,8 @@ if(Qt5Widgets_FOUND)
list(APPEND SERVATRICE_LIBS Sql) list(APPEND SERVATRICE_LIBS Sql)
endif() endif()
QT5_ADD_RESOURCES(servatrice_RESOURCES_RCC ${servatrice_RESOURCES})
# guess plugins and libraries directory # guess plugins and libraries directory
set(QT_PLUGINS_DIR "${Qt5Widgets_DIR}/../../../plugins") set(QT_PLUGINS_DIR "${Qt5Widgets_DIR}/../../../plugins")
get_target_property(QT_LIBRARY_DIR Qt5::Core LOCATION) get_target_property(QT_LIBRARY_DIR Qt5::Core LOCATION)
@ -60,13 +79,12 @@ SET(QT_DONT_USE_QTGUI TRUE)
# Include directories # Include directories
INCLUDE_DIRECTORIES(../common) INCLUDE_DIRECTORIES(../common)
INCLUDE_DIRECTORIES(${LIBGCRYPT_INCLUDE_DIR})
INCLUDE_DIRECTORIES(${PROTOBUF_INCLUDE_DIR}) INCLUDE_DIRECTORIES(${PROTOBUF_INCLUDE_DIR})
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/../common) INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/../common)
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}) INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR})
# Build servatrice binary and link it # Build servatrice binary and link it
ADD_EXECUTABLE(servatrice MACOSX_BUNDLE ${servatrice_SOURCES} ${servatrice_MOC_SRCS}) ADD_EXECUTABLE(servatrice MACOSX_BUNDLE ${servatrice_SOURCES} ${servatrice_RESOURCES_RCC} ${servatrice_MOC_SRCS})
if(Qt4_FOUND) if(Qt4_FOUND)
if(MSVC) if(MSVC)
@ -87,12 +105,18 @@ endif()
if(UNIX) if(UNIX)
if(APPLE) if(APPLE)
INSTALL(TARGETS servatrice BUNDLE DESTINATION ./) INSTALL(TARGETS servatrice BUNDLE DESTINATION ./)
INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/servatrice.ini.example DESTINATION ./servatrice.app/Contents/Resources/)
INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/servatrice.sql DESTINATION ./servatrice.app/Contents/Resources/)
else() else()
# Assume linux # Assume linux
INSTALL(TARGETS servatrice RUNTIME DESTINATION bin/) INSTALL(TARGETS servatrice RUNTIME DESTINATION bin/)
INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/servatrice.ini.example DESTINATION share/servatice/)
INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/servatrice.sql DESTINATION share/servatice/)
endif() endif()
elseif(WIN32) elseif(WIN32)
INSTALL(TARGETS servatrice RUNTIME DESTINATION ./) INSTALL(TARGETS servatrice RUNTIME DESTINATION ./)
INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/servatrice.ini.example DESTINATION ./)
INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/servatrice.sql DESTINATION ./)
endif() endif()
if(APPLE) if(APPLE)

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 361 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 20 KiB

View file

@ -0,0 +1,8 @@
#!/usr/bin/env xdg-open
[Desktop Entry]
Version=1.0
Type=Application
Name=Servatrice
Exec=servatrice
Icon=servatrice
Categories=Game;CardGame;

View file

@ -1,50 +1,160 @@
; Servatrice configuration file
;
; This is the main configuration file for Servatrice; while using a configuration is not mandatory,
; you may want to customize some aspects of your servatrice instance, like its name, port or the way
; users can authenticate to the server.
[server] [server]
port=4747
statusupdate=15000 ; This is the name that servatrice exposes to the users; the default value is pretty boring
logfile=server.log
name="My Cockatrice server" name="My Cockatrice server"
; Multiple servatrice servers can run on the same host using the same database; each server instance
; must have a different id; the default id is 1
id=1 id=1
; The TCP port number servatrice will listen on for clients; default is 4747
port=4747
; Servatrice can scale up to serve big number of users using more than one parallel thread of execution;
; If your server is hosting a lot of players and they frequently report of being unable to login or
; long delays (lag), you may want to try increasing this value; default is 1.
number_pools=1 number_pools=1
; When database is enabled, servatrice writes the server status in the "update" database table; this
; setting defines every how many milliseconds servatrice will update its status; default is 15000 (15 secs)
statusupdate=15000
; Do you want servatrice to write important events and errors to a logfile? Default is 1 (yes).
writelog=1 writelog=1
; Choose a name for the log file, if enabled; you can specify an absolute path or a path relative to
; the servatrice executable; the default file name is server.log (in the same path as servatrice)
logfile=server.log
; You may want to silence some commonly recurring messages in the logfile. This setting can contain a
; comma-separed list of words; if any message that is about to be logged contains at least one of these words,
; it won't be logged. Default is empty; example: "kittens,ponies,faires"
logfilters="" logfilters=""
[servernetwork]
active=0
port=14747
ssl_cert=ssl_cert.pem
ssl_key=ssl_key.pem
[authentication] [authentication]
; Servatrice can authenticate users connecting. It currently supports 3 different authentication methods:
; * none: no authentication, accept every user;
; * password: require users to specify a common password to log in;
; * sql: authenticate users against the "users" table of the database;
; Please note that only the "sql" method permits to have registered users and store their data on the server.
method=none method=none
; if the chosen authentication method is password, here you can define the password your users will use to log in
password=123456
; Accept only registered users? default is 0 (accept unregistered users)
regonly=0 regonly=0
[database] [database]
; Database type. Valid values are:
; * none: no database;
; * mysql: mysql or compatible database;
type=none type=none
; Prefix used in he database for table names; default is cockatrice
prefix=cockatrice prefix=cockatrice
; Database connection parameter: server hostname or IP
hostname=localhost hostname=localhost
; Database connection parameter: database name
database=servatrice database=servatrice
; Database connection parameter: database user
user=servatrice user=servatrice
; Database connection parameter: database user's password
password=foobar password=foobar
[rooms] [rooms]
; A servtrice server can expose to the users different "rooms" to chat and create games. Rooms can be defined
; with two different methods:
; config: rooms are defined in this configuration (see the following example)
; sql: rooms are defined in the "rooms" table of the database
method=config method=config
; Example configuration for a server with rooms configured in the configuration file. Number of rooms defined
roomlist\size=1 roomlist\size=1
; Room name for the room number 1
roomlist\1\name="General room" roomlist\1\name="General room"
; Room description for the room number 1
roomlist\1\description="Play anything here." roomlist\1\description="Play anything here."
; Wether to make users autojoin this room when connected to the server
roomlist\1\autojoin=true roomlist\1\autojoin=true
; Message displayed to each user when he joins room number 1
roomlist\1\joinmessage="This message is only here to show that rooms can have a join message." roomlist\1\joinmessage="This message is only here to show that rooms can have a join message."
; Number of game types allowed (defined) in the room number 1
roomlist\1\game_types\size=3 roomlist\1\game_types\size=3
; Name of the three game types for the room number 1
roomlist\1\game_types\1\name="GameType1" roomlist\1\game_types\1\name="GameType1"
roomlist\1\game_types\2\name="GameType2" roomlist\1\game_types\2\name="GameType2"
roomlist\1\game_types\3\name="GameType3" roomlist\1\game_types\3\name="GameType3"
[game] [game]
max_game_inactivity_time=120
; Maximum time in seconds a player can stay inactive, with his client hot even responding to pings, before is
; considered disconnected; default is 15
max_player_inactivity_time=15 max_player_inactivity_time=15
; Maximum time in seconds all players in a game can stay inactive before the game is automatically closed;
; default is 120
max_game_inactivity_time=120
[security] [security]
; Maximum number of users that can connect from the same IP address; useful to avoid bots, default is 4
max_users_per_address=4 max_users_per_address=4
; Servatrice can avoid users from flooding rooms with large number messages in an interval of time.
; This setting defines the length in seconds of the considered interval; default is 10
message_counting_interval=10 message_counting_interval=10
; Maximum size in characters of all messages in an interval before new messages gets dropped; default is 1000
max_message_size_per_interval=1000 max_message_size_per_interval=1000
; Maximum number of messages in an interval before new messages gets dropped; default is 10
max_message_count_per_interval=10 max_message_count_per_interval=10
; Maximum number of games a single user can create; default is 5
max_games_per_user=5 max_games_per_user=5
; EXPERIMENTAL - NOT WORKING YET
; The following settings are relative to the server network functionality, that is not yet complete.
; Avoid enabling it unless you are willing to test it and help its development.
[servernetwork]
; Servatrice servers can connect themselves and build a network. This settins enable the ability of servatrice
; of waiting for other server's connections and connect to other servers. Other servers can be defined in the
; "servers" table of the database. Default is 0 (disabled)
active=0
; The TCP port number servatrice will listen on for other servers; default is 14747
port=14747
; Server-to-server communication needs a valid certificate in PEM format. Enter its filename in this setting
ssl_cert=ssl_cert.pem
; Filename of the private key for the server-to-server certificate
ssl_key=ssl_key.pem

View file

@ -0,0 +1,5 @@
<RCC>
<qresource prefix="/" >
<file alias="resources/appicon.svg">resources/servatrice.svg</file>
</qresource>
</RCC>

1
servatrice/servatrice.rc Normal file
View file

@ -0,0 +1 @@
ID1_ICON1 ICON DISCARDABLE "resources/appicon.ico"

View file

@ -1,4 +1,4 @@
-- phpMyAdmin SQL Dump -- phpMyAdmin SQL Dump
-- version 2.11.8.1deb1ubuntu0.2 -- version 2.11.8.1deb1ubuntu0.2
-- http://www.phpmyadmin.net -- http://www.phpmyadmin.net
-- --
@ -208,3 +208,18 @@ CREATE TABLE `cockatrice_replays_access` (
KEY `id_game` (`id_game`) KEY `id_game` (`id_game`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8; ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `cockatrice_rooms` (
`id` int(7) unsigned NOT NULL auto_increment,
`name` varchar(50) NOT NULL,
`descr` varchar(255) NOT NULL,
`auto_join` tinyint(1) default 0,
`join_message` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `cockatrice_rooms_gametypes` (
`id_room` int(7) unsigned NOT NULL,
`name` varchar(50) NOT NULL,
PRIMARY KEY (`id_room`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

View file

@ -20,13 +20,14 @@
#include <QCoreApplication> #include <QCoreApplication>
#include <QTextCodec> #include <QTextCodec>
#include <QtGlobal>
#include <iostream> #include <iostream>
#include <QMetaType> #include <QMetaType>
#include <QSettings>
#include <QDateTime> #include <QDateTime>
#include "passwordhasher.h" #include "passwordhasher.h"
#include "servatrice.h" #include "servatrice.h"
#include "server_logger.h" #include "server_logger.h"
#include "settingscache.h"
#include "rng_sfmt.h" #include "rng_sfmt.h"
#include "version_string.h" #include "version_string.h"
#include <google/protobuf/stubs/common.h> #include <google/protobuf/stubs/common.h>
@ -37,6 +38,7 @@
RNG_Abstract *rng; RNG_Abstract *rng;
ServerLogger *logger; ServerLogger *logger;
QThread *loggerThread; QThread *loggerThread;
SettingsCache *settingsCache;
/* Prototypes */ /* Prototypes */
@ -150,6 +152,10 @@ int main(int argc, char *argv[])
bool testRandom = args.contains("--test-random"); bool testRandom = args.contains("--test-random");
bool testHashFunction = args.contains("--test-hash"); bool testHashFunction = args.contains("--test-hash");
bool logToConsole = args.contains("--log-to-console"); bool logToConsole = args.contains("--log-to-console");
QString configPath;
int hasConfigPath=args.indexOf("--config");
if(hasConfigPath > -1 && args.count() > hasConfigPath + 1)
configPath = args.at(hasConfigPath + 1);
qRegisterMetaType<QList<int> >("QList<int>"); qRegisterMetaType<QList<int> >("QList<int>");
@ -158,7 +164,9 @@ int main(int argc, char *argv[])
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8")); QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
#endif #endif
QSettings *settings = new QSettings("servatrice.ini", QSettings::IniFormat); configPath = SettingsCache::guessConfigurationPath(configPath);
qWarning() << "Using configuration file: " << configPath;
settingsCache = new SettingsCache(configPath);
loggerThread = new QThread; loggerThread = new QThread;
loggerThread->setObjectName("logger"); loggerThread->setObjectName("logger");
@ -166,7 +174,7 @@ int main(int argc, char *argv[])
logger->moveToThread(loggerThread); logger->moveToThread(loggerThread);
loggerThread->start(); loggerThread->start();
QMetaObject::invokeMethod(logger, "startLog", Qt::BlockingQueuedConnection, Q_ARG(QString, settings->value("server/logfile").toString())); QMetaObject::invokeMethod(logger, "startLog", Qt::BlockingQueuedConnection, Q_ARG(QString, settingsCache->value("server/logfile", QString("server.log")).toString()));
#if QT_VERSION < 0x050000 #if QT_VERSION < 0x050000
if (logToConsole) if (logToConsole)
@ -209,7 +217,7 @@ int main(int argc, char *argv[])
if (testHashFunction) if (testHashFunction)
testHash(); testHash();
Servatrice *server = new Servatrice(settings); Servatrice *server = new Servatrice();
QObject::connect(server, SIGNAL(destroyed()), &app, SLOT(quit()), Qt::QueuedConnection); QObject::connect(server, SIGNAL(destroyed()), &app, SLOT(quit()), Qt::QueuedConnection);
int retval = 0; int retval = 0;
if (server->initServer()) { if (server->initServer()) {
@ -228,7 +236,7 @@ int main(int argc, char *argv[])
} }
delete rng; delete rng;
delete settings; delete settingsCache;
logger->deleteLater(); logger->deleteLater();
loggerThread->wait(); loggerThread->wait();

View file

@ -1,32 +1,53 @@
#include "passwordhasher.h" #include "passwordhasher.h"
#include <stdio.h>
#include <string.h> #if QT_VERSION < 0x050000
#include <gcrypt.h> #include <stdio.h>
#include <string.h>
#include <gcrypt.h>
#else
#include <QCryptographicHash>
#endif
void PasswordHasher::initialize() void PasswordHasher::initialize()
{ {
// These calls are required by libgcrypt before we use any of its functions. #if QT_VERSION < 0x050000
gcry_check_version(0); // These calls are required by libgcrypt before we use any of its functions.
gcry_control(GCRYCTL_DISABLE_SECMEM, 0); gcry_check_version(0);
gcry_control(GCRYCTL_INITIALIZATION_FINISHED, 0); gcry_control(GCRYCTL_DISABLE_SECMEM, 0);
gcry_control(GCRYCTL_INITIALIZATION_FINISHED, 0);
#endif
} }
#if QT_VERSION < 0x050000
QString PasswordHasher::computeHash(const QString &password, const QString &salt) QString PasswordHasher::computeHash(const QString &password, const QString &salt)
{ {
const int algo = GCRY_MD_SHA512; const int algo = GCRY_MD_SHA512;
const int rounds = 1000; const int rounds = 1000;
QByteArray passwordBuffer = (salt + password).toUtf8(); QByteArray passwordBuffer = (salt + password).toUtf8();
int hashLen = gcry_md_get_algo_dlen(algo); int hashLen = gcry_md_get_algo_dlen(algo);
char *hash = new char[hashLen], *tmp = new char[hashLen]; char *hash = new char[hashLen], *tmp = new char[hashLen];
gcry_md_hash_buffer(algo, hash, passwordBuffer.data(), passwordBuffer.size()); gcry_md_hash_buffer(algo, hash, passwordBuffer.data(), passwordBuffer.size());
for (int i = 1; i < rounds; ++i) { for (int i = 1; i < rounds; ++i) {
memcpy(tmp, hash, hashLen); memcpy(tmp, hash, hashLen);
gcry_md_hash_buffer(algo, hash, tmp, hashLen); gcry_md_hash_buffer(algo, hash, tmp, hashLen);
} }
QString hashedPass = salt + QString(QByteArray(hash, hashLen).toBase64()); QString hashedPass = salt + QString(QByteArray(hash, hashLen).toBase64());
delete[] tmp; delete[] tmp;
delete[] hash; delete[] hash;
return hashedPass; return hashedPass;
} }
#else
QString PasswordHasher::computeHash(const QString &password, const QString &salt)
{
QCryptographicHash::Algorithm algo = QCryptographicHash::Sha512;
const int rounds = 1000;
QByteArray hash = (salt + password).toUtf8();
for (int i = 0; i < rounds; ++i) {
hash = QCryptographicHash::hash(hash, algo);
}
QString hashedPass = salt + QString(hash.toBase64());
return hashedPass;
}
#endif

View file

@ -18,7 +18,6 @@
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/ ***************************************************************************/
#include <QSqlQuery> #include <QSqlQuery>
#include <QSettings>
#include <QFile> #include <QFile>
#include <QTimer> #include <QTimer>
#include <QDateTime> #include <QDateTime>
@ -28,6 +27,7 @@
#include "servatrice_database_interface.h" #include "servatrice_database_interface.h"
#include "servatrice_connection_pool.h" #include "servatrice_connection_pool.h"
#include "server_room.h" #include "server_room.h"
#include "settingscache.h"
#include "serversocketinterface.h" #include "serversocketinterface.h"
#include "isl_interface.h" #include "isl_interface.h"
#include "server_logger.h" #include "server_logger.h"
@ -120,8 +120,8 @@ void Servatrice_IslServer::incomingConnection(int socketDescriptor)
QMetaObject::invokeMethod(interface, "initServer", Qt::QueuedConnection); QMetaObject::invokeMethod(interface, "initServer", Qt::QueuedConnection);
} }
Servatrice::Servatrice(QSettings *_settings, QObject *parent) Servatrice::Servatrice(QObject *parent)
: Server(true, parent), settings(_settings), uptime(0), shutdownTimer(0) : Server(true, parent), uptime(0), shutdownTimer(0)
{ {
qRegisterMetaType<QSqlDatabase>("QSqlDatabase"); qRegisterMetaType<QSqlDatabase>("QSqlDatabase");
} }
@ -134,22 +134,28 @@ Servatrice::~Servatrice()
bool Servatrice::initServer() bool Servatrice::initServer()
{ {
serverName = settings->value("server/name").toString(); serverName = settingsCache->value("server/name", "My Cockatrice server").toString();
serverId = settings->value("server/id", 0).toInt(); serverId = settingsCache->value("server/id", 0).toInt();
bool regServerOnly = settings->value("server/regonly", 0).toBool(); bool regServerOnly = settingsCache->value("authentication/regonly", 0).toBool();
const QString authenticationMethodStr = settings->value("authentication/method").toString(); const QString authenticationMethodStr = settingsCache->value("authentication/method").toString();
if (authenticationMethodStr == "sql") { if (authenticationMethodStr == "sql") {
qDebug() << "Authenticating method: sql";
authenticationMethod = AuthenticationSql; authenticationMethod = AuthenticationSql;
} else if(authenticationMethodStr == "password") {
qDebug() << "Authenticating method: password";
authenticationMethod = AuthenticationPassword;
} else { } else {
if (regServerOnly) { if (regServerOnly) {
qDebug() << "Registration only server enabled but no DB Connection : Error."; qDebug() << "Registration only server enabled but no authentication method defined: Error.";
return false; return false;
} }
qDebug() << "Authenticating method: none";
authenticationMethod = AuthenticationNone; authenticationMethod = AuthenticationNone;
} }
QString dbTypeStr = settings->value("database/type").toString(); QString dbTypeStr = settingsCache->value("database/type").toString();
if (dbTypeStr == "mysql") if (dbTypeStr == "mysql")
databaseType = DatabaseMySql; databaseType = DatabaseMySql;
else else
@ -159,14 +165,14 @@ bool Servatrice::initServer()
setDatabaseInterface(servatriceDatabaseInterface); setDatabaseInterface(servatriceDatabaseInterface);
if (databaseType != DatabaseNone) { if (databaseType != DatabaseNone) {
settings->beginGroup("database"); settingsCache->beginGroup("database");
dbPrefix = settings->value("prefix").toString(); dbPrefix = settingsCache->value("prefix").toString();
servatriceDatabaseInterface->initDatabase("QMYSQL", servatriceDatabaseInterface->initDatabase("QMYSQL",
settings->value("hostname").toString(), settingsCache->value("hostname").toString(),
settings->value("database").toString(), settingsCache->value("database").toString(),
settings->value("user").toString(), settingsCache->value("user").toString(),
settings->value("password").toString()); settingsCache->value("password").toString());
settings->endGroup(); settingsCache->endGroup();
updateServerList(); updateServerList();
@ -174,7 +180,7 @@ bool Servatrice::initServer()
servatriceDatabaseInterface->clearSessionTables(); servatriceDatabaseInterface->clearSessionTables();
} }
const QString roomMethod = settings->value("rooms/method").toString(); const QString roomMethod = settingsCache->value("rooms/method").toString();
if (roomMethod == "sql") { if (roomMethod == "sql") {
QSqlQuery query(servatriceDatabaseInterface->getDatabase()); QSqlQuery query(servatriceDatabaseInterface->getDatabase());
query.prepare("select id, name, descr, auto_join, join_message from " + dbPrefix + "_rooms order by id asc"); query.prepare("select id, name, descr, auto_join, join_message from " + dbPrefix + "_rooms order by id asc");
@ -198,47 +204,63 @@ bool Servatrice::initServer()
)); ));
} }
} else { } else {
int size = settings->beginReadArray("rooms/roomlist"); int size = settingsCache->beginReadArray("rooms/roomlist");
for (int i = 0; i < size; ++i) { for (int i = 0; i < size; ++i) {
settings->setArrayIndex(i); settingsCache->setArrayIndex(i);
QStringList gameTypes; QStringList gameTypes;
int size2 = settings->beginReadArray("game_types"); int size2 = settingsCache->beginReadArray("game_types");
for (int j = 0; j < size2; ++j) { for (int j = 0; j < size2; ++j) {
settings->setArrayIndex(j); settingsCache->setArrayIndex(j);
gameTypes.append(settings->value("name").toString()); gameTypes.append(settingsCache->value("name").toString());
} }
settings->endArray(); settingsCache->endArray();
Server_Room *newRoom = new Server_Room( Server_Room *newRoom = new Server_Room(
i, i,
settings->value("name").toString(), settingsCache->value("name").toString(),
settings->value("description").toString(), settingsCache->value("description").toString(),
settings->value("autojoin").toBool(), settingsCache->value("autojoin").toBool(),
settings->value("joinmessage").toString(), settingsCache->value("joinmessage").toString(),
gameTypes, gameTypes,
this this
); );
addRoom(newRoom); addRoom(newRoom);
} }
settings->endArray();
if(size==0)
{
// no room defined in config, add a dummy one
Server_Room *newRoom = new Server_Room(
0,
"General room",
"Play anything here.",
true,
"",
QStringList("Standard"),
this
);
addRoom(newRoom);
}
settingsCache->endArray();
} }
updateLoginMessage(); updateLoginMessage();
maxGameInactivityTime = settings->value("game/max_game_inactivity_time").toInt(); maxGameInactivityTime = settingsCache->value("game/max_game_inactivity_time", 120).toInt();
maxPlayerInactivityTime = settings->value("game/max_player_inactivity_time").toInt(); maxPlayerInactivityTime = settingsCache->value("game/max_player_inactivity_time", 15).toInt();
maxUsersPerAddress = settings->value("security/max_users_per_address").toInt(); maxUsersPerAddress = settingsCache->value("security/max_users_per_address", 4).toInt();
messageCountingInterval = settings->value("security/message_counting_interval").toInt(); messageCountingInterval = settingsCache->value("security/message_counting_interval", 10).toInt();
maxMessageCountPerInterval = settings->value("security/max_message_count_per_interval").toInt(); maxMessageCountPerInterval = settingsCache->value("security/max_message_count_per_interval", 10).toInt();
maxMessageSizePerInterval = settings->value("security/max_message_size_per_interval").toInt(); maxMessageSizePerInterval = settingsCache->value("security/max_message_size_per_interval", 1000).toInt();
maxGamesPerUser = settings->value("security/max_games_per_user").toInt(); maxGamesPerUser = settingsCache->value("security/max_games_per_user", 5).toInt();
try { if (settings->value("servernetwork/active", 0).toInt()) { try { if (settingsCache->value("servernetwork/active", 0).toInt()) {
qDebug() << "Connecting to ISL network."; qDebug() << "Connecting to ISL network.";
const QString certFileName = settings->value("servernetwork/ssl_cert").toString(); const QString certFileName = settingsCache->value("servernetwork/ssl_cert").toString();
const QString keyFileName = settings->value("servernetwork/ssl_key").toString(); const QString keyFileName = settingsCache->value("servernetwork/ssl_key").toString();
qDebug() << "Loading certificate..."; qDebug() << "Loading certificate...";
QFile certFile(certFileName); QFile certFile(certFileName);
if (!certFile.open(QIODevice::ReadOnly)) if (!certFile.open(QIODevice::ReadOnly))
@ -282,7 +304,7 @@ bool Servatrice::initServer()
QMetaObject::invokeMethod(interface, "initClient", Qt::BlockingQueuedConnection); QMetaObject::invokeMethod(interface, "initClient", Qt::BlockingQueuedConnection);
} }
const int networkPort = settings->value("servernetwork/port", 14747).toInt(); const int networkPort = settingsCache->value("servernetwork/port", 14747).toInt();
qDebug() << "Starting ISL server on port" << networkPort; qDebug() << "Starting ISL server on port" << networkPort;
islServer = new Servatrice_IslServer(this, cert, key, this); islServer = new Servatrice_IslServer(this, cert, key, this);
@ -299,7 +321,7 @@ bool Servatrice::initServer()
connect(pingClock, SIGNAL(timeout()), this, SIGNAL(pingClockTimeout())); connect(pingClock, SIGNAL(timeout()), this, SIGNAL(pingClockTimeout()));
pingClock->start(1000); pingClock->start(1000);
int statusUpdateTime = settings->value("server/statusupdate").toInt(); int statusUpdateTime = settingsCache->value("server/statusupdate", 15000).toInt();
statusUpdateClock = new QTimer(this); statusUpdateClock = new QTimer(this);
connect(statusUpdateClock, SIGNAL(timeout()), this, SLOT(statusUpdate())); connect(statusUpdateClock, SIGNAL(timeout()), this, SLOT(statusUpdate()));
if (statusUpdateTime != 0) { if (statusUpdateTime != 0) {
@ -307,10 +329,10 @@ bool Servatrice::initServer()
statusUpdateClock->start(statusUpdateTime); statusUpdateClock->start(statusUpdateTime);
} }
const int numberPools = settings->value("server/number_pools", 1).toInt(); const int numberPools = settingsCache->value("server/number_pools", 1).toInt();
gameServer = new Servatrice_GameServer(this, numberPools, servatriceDatabaseInterface->getDatabase(), this); gameServer = new Servatrice_GameServer(this, numberPools, servatriceDatabaseInterface->getDatabase(), this);
gameServer->setMaxPendingConnections(1000); gameServer->setMaxPendingConnections(1000);
const int gamePort = settings->value("server/port", 4747).toInt(); const int gamePort = settingsCache->value("server/port", 4747).toInt();
qDebug() << "Starting server on port" << gamePort; qDebug() << "Starting server on port" << gamePort;
if (gameServer->listen(QHostAddress::Any, gamePort)) if (gameServer->listen(QHostAddress::Any, gamePort))
qDebug() << "Server listening."; qDebug() << "Server listening.";

View file

@ -32,7 +32,6 @@
Q_DECLARE_METATYPE(QSqlDatabase) Q_DECLARE_METATYPE(QSqlDatabase)
class QSettings;
class QSqlQuery; class QSqlQuery;
class QTimer; class QTimer;
@ -89,7 +88,7 @@ class Servatrice : public Server
{ {
Q_OBJECT Q_OBJECT
public: public:
enum AuthenticationMethod { AuthenticationNone, AuthenticationSql }; enum AuthenticationMethod { AuthenticationNone, AuthenticationSql, AuthenticationPassword };
private slots: private slots:
void statusUpdate(); void statusUpdate();
void shutdownTimeout(); void shutdownTimeout();
@ -106,7 +105,6 @@ private:
mutable QMutex loginMessageMutex; mutable QMutex loginMessageMutex;
QString loginMessage; QString loginMessage;
QString dbPrefix; QString dbPrefix;
QSettings *settings;
Servatrice_DatabaseInterface *servatriceDatabaseInterface; Servatrice_DatabaseInterface *servatriceDatabaseInterface;
int serverId; int serverId;
int uptime; int uptime;
@ -128,7 +126,7 @@ public slots:
void scheduleShutdown(const QString &reason, int minutes); void scheduleShutdown(const QString &reason, int minutes);
void updateLoginMessage(); void updateLoginMessage();
public: public:
Servatrice(QSettings *_settings, QObject *parent = 0); Servatrice(QObject *parent = 0);
~Servatrice(); ~Servatrice();
bool initServer(); bool initServer();
QString getServerName() const { return serverName; } QString getServerName() const { return serverName; }

View file

@ -2,6 +2,7 @@
#include "servatrice_database_interface.h" #include "servatrice_database_interface.h"
#include "passwordhasher.h" #include "passwordhasher.h"
#include "serversocketinterface.h" #include "serversocketinterface.h"
#include "settingscache.h"
#include "decklist.h" #include "decklist.h"
#include "pb/game_replay.pb.h" #include "pb/game_replay.pb.h"
#include <QDebug> #include <QDebug>
@ -88,10 +89,22 @@ bool Servatrice_DatabaseInterface::usernameIsValid(const QString &user)
return (result.size() > 0); return (result.size() > 0);
} }
bool Servatrice_DatabaseInterface::getRequireRegistration()
{
return settingsCache->value("authentication/regonly", 0).toBool();
}
AuthenticationResult Servatrice_DatabaseInterface::checkUserPassword(Server_ProtocolHandler *handler, const QString &user, const QString &password, QString &reasonStr, int &banSecondsLeft) AuthenticationResult Servatrice_DatabaseInterface::checkUserPassword(Server_ProtocolHandler *handler, const QString &user, const QString &password, QString &reasonStr, int &banSecondsLeft)
{ {
switch (server->getAuthenticationMethod()) { switch (server->getAuthenticationMethod()) {
case Servatrice::AuthenticationNone: return UnknownUser; case Servatrice::AuthenticationNone: return UnknownUser;
case Servatrice::AuthenticationPassword: {
QString configPassword = settingsCache->value("authentication/password").toString();
if (configPassword == password)
return PasswordRight;
return NotLoggedIn;
}
case Servatrice::AuthenticationSql: { case Servatrice::AuthenticationSql: {
if (!checkSql()) if (!checkSql())
return UnknownUser; return UnknownUser;

View file

@ -51,6 +51,7 @@ public:
void unlockSessionTables(); void unlockSessionTables();
bool userSessionExists(const QString &userName); bool userSessionExists(const QString &userName);
bool getRequireRegistration();
}; };
#endif #endif

View file

@ -1,9 +1,9 @@
#include "server_logger.h" #include "server_logger.h"
#include "settingscache.h"
#include <QSocketNotifier> #include <QSocketNotifier>
#include <QFile> #include <QFile>
#include <QTextStream> #include <QTextStream>
#include <QDateTime> #include <QDateTime>
#include <QSettings>
#include <iostream> #include <iostream>
#ifdef Q_OS_UNIX #ifdef Q_OS_UNIX
# include <sys/types.h> # include <sys/types.h>
@ -26,7 +26,7 @@ ServerLogger::~ServerLogger()
void ServerLogger::startLog(const QString &logFileName) void ServerLogger::startLog(const QString &logFileName)
{ {
if (!logFileName.isEmpty()) { if (!logFileName.isEmpty()) {
logFile = new QFile("server.log", this); logFile = new QFile(logFileName, this);
logFile->open(QIODevice::Append); logFile->open(QIODevice::Append);
#ifdef Q_OS_UNIX #ifdef Q_OS_UNIX
::socketpair(AF_UNIX, SOCK_STREAM, 0, sigHupFD); ::socketpair(AF_UNIX, SOCK_STREAM, 0, sigHupFD);
@ -50,9 +50,8 @@ void ServerLogger::logMessage(QString message, void *caller)
callerString = QString::number((qulonglong) caller, 16) + " "; callerString = QString::number((qulonglong) caller, 16) + " ";
//filter out all log entries based on values in configuration file //filter out all log entries based on values in configuration file
QSettings settings("servatrice.ini", QSettings::IniFormat); bool shouldWeWriteLog = settingsCache->value("server/writelog").toBool();
bool shouldWeWriteLog = settings.value("server/writelog").toBool(); QString logFilters = settingsCache->value("server/logfilters").toString();
QString logFilters = settings.value("server/logfilters").toString();
QStringList listlogFilters = logFilters.split(",", QString::SkipEmptyParts); QStringList listlogFilters = logFilters.split(",", QString::SkipEmptyParts);
bool shouldWeSkipLine = false; bool shouldWeSkipLine = false;

View file

@ -0,0 +1,43 @@
#include "settingscache.h"
#include <QCoreApplication>
#include <QFile>
#if QT_VERSION >= 0x050000
#include <QStandardPaths>
#else
#include <QDesktopServices>
#endif
SettingsCache::SettingsCache(const QString & fileName, QSettings::Format format, QObject * parent)
:QSettings(fileName, format, parent)
{
}
QString SettingsCache::guessConfigurationPath(QString & specificPath)
{
const QString fileName="servatrice.ini";
QString guessFileName;
// specific path
if(!specificPath.isEmpty() && QFile::exists(specificPath))
return specificPath;
// application directory path
guessFileName = QCoreApplication::applicationDirPath() + "/" + fileName;
if(QFile::exists(guessFileName))
return guessFileName;
#ifdef Q_OS_UNIX
// /etc
guessFileName = "/etc/servatrice/" + fileName;
if(QFile::exists(guessFileName))
return guessFileName;
#endif
#if QT_VERSION >= 0x050000
guessFileName = QStandardPaths::writableLocation(QStandardPaths::DataLocation) + "/" + fileName;
#else
guessFileName = QDesktopServices::storageLocation(QDesktopServices::DataLocation) + "/" + fileName;
#endif
return guessFileName;
}

View file

@ -0,0 +1,18 @@
#ifndef SERVATRICE_SETTINGSCACHE_H
#define SERVATRICE_SETTINGSCACHE_H
#include <QSettings>
#include <QString>
class SettingsCache : public QSettings {
Q_OBJECT
private:
QSettings *settings;
public:
SettingsCache(const QString & fileName="servatrice.ini", QSettings::Format format=QSettings::IniFormat, QObject * parent = 0);
static QString guessConfigurationPath(QString & specificPath);
};
extern SettingsCache *settingsCache;
#endif