Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Donald Haase
Cockatrice
Commits
ef46d6e8
Commit
ef46d6e8
authored
Nov 20, 2009
by
Max-Wilhelm Bruker
Browse files
deck list storage completed
parent
f3140574
Changes
7
Hide whitespace changes
Inline
Side-by-side
cockatrice/src/tab_deck_storage.cpp
View file @
ef46d6e8
...
@@ -95,35 +95,44 @@ void TabDeckStorage::refreshServerList()
...
@@ -95,35 +95,44 @@ void TabDeckStorage::refreshServerList()
client
->
sendCommand
(
command
);
client
->
sendCommand
(
command
);
}
}
void
TabDeckStorage
::
populateDeckList
(
Response_DeckList
::
Directory
*
folder
,
QTreeWidgetItem
*
parent
)
void
TabDeckStorage
::
addFileToTree
(
DeckList_File
*
file
,
QTreeWidgetItem
*
parent
)
{
QFileIconProvider
fip
;
QTreeWidgetItem
*
newDeck
=
new
QTreeWidgetItem
(
TWIDeckType
);
newDeck
->
setIcon
(
0
,
fip
.
icon
(
QFileIconProvider
::
File
));
newDeck
->
setData
(
0
,
Qt
::
DisplayRole
,
file
->
getName
());
newDeck
->
setData
(
1
,
Qt
::
DisplayRole
,
file
->
getId
());
newDeck
->
setTextAlignment
(
1
,
Qt
::
AlignRight
);
newDeck
->
setData
(
2
,
Qt
::
DisplayRole
,
file
->
getUploadTime
());
parent
->
addChild
(
newDeck
);
}
void
TabDeckStorage
::
populateDeckList
(
DeckList_Directory
*
folder
,
QTreeWidgetItem
*
parent
)
{
{
QFileIconProvider
fip
;
QFileIconProvider
fip
;
QTreeWidgetItem
*
newItem
=
new
QTreeWidgetItem
(
TWIFolderType
);
QTreeWidgetItem
*
newItem
=
new
QTreeWidgetItem
(
TWIFolderType
);
newItem
->
setIcon
(
0
,
fip
.
icon
(
QFileIconProvider
::
Folder
));
newItem
->
setIcon
(
0
,
fip
.
icon
(
QFileIconProvider
::
Folder
));
newItem
->
setText
(
0
,
parent
?
folder
->
getName
()
:
"/"
);
newItem
->
setText
(
0
,
parent
?
folder
->
getName
()
:
"/"
);
QString
parentPath
;
if
(
parent
)
{
if
(
parent
)
{
parent
->
addChild
(
newItem
);
parent
->
addChild
(
newItem
);
parentPath
=
parent
->
data
(
0
,
Qt
::
UserRole
).
toString
();
}
else
QString
path
=
parent
->
data
(
0
,
Qt
::
UserRole
).
toString
();
if
(
path
.
isEmpty
())
newItem
->
setData
(
0
,
Qt
::
UserRole
,
folder
->
getName
());
else
newItem
->
setData
(
0
,
Qt
::
UserRole
,
path
+
"/"
+
folder
->
getName
());
}
else
{
serverDirView
->
addTopLevelItem
(
newItem
);
serverDirView
->
addTopLevelItem
(
newItem
);
newItem
->
setData
(
0
,
Qt
::
UserRole
,
parentPath
+
"/"
+
folder
->
getName
());
newItem
->
setData
(
0
,
Qt
::
UserRole
,
QString
());
}
for
(
int
i
=
0
;
i
<
folder
->
size
();
++
i
)
{
for
(
int
i
=
0
;
i
<
folder
->
size
();
++
i
)
{
Response_
DeckList
::
Directory
*
subFolder
=
dynamic_cast
<
Response_
DeckList
::
Directory
*>
(
folder
->
at
(
i
));
DeckList
_
Directory
*
subFolder
=
dynamic_cast
<
DeckList
_
Directory
*>
(
folder
->
at
(
i
));
if
(
subFolder
)
if
(
subFolder
)
populateDeckList
(
subFolder
,
newItem
);
populateDeckList
(
subFolder
,
newItem
);
else
{
else
Response_DeckList
::
File
*
file
=
dynamic_cast
<
Response_DeckList
::
File
*>
(
folder
->
at
(
i
));
addFileToTree
(
dynamic_cast
<
DeckList_File
*>
(
folder
->
at
(
i
)),
newItem
);
QTreeWidgetItem
*
newDeck
=
new
QTreeWidgetItem
(
TWIDeckType
);
newDeck
->
setIcon
(
0
,
fip
.
icon
(
QFileIconProvider
::
File
));
newDeck
->
setData
(
0
,
Qt
::
DisplayRole
,
file
->
getName
());
newDeck
->
setData
(
1
,
Qt
::
DisplayRole
,
file
->
getId
());
newDeck
->
setTextAlignment
(
1
,
Qt
::
AlignRight
);
newDeck
->
setData
(
2
,
Qt
::
DisplayRole
,
file
->
getUploadTime
());
newItem
->
addChild
(
newDeck
);
}
}
}
}
}
...
@@ -135,14 +144,15 @@ void TabDeckStorage::deckListFinished(ProtocolResponse *r)
...
@@ -135,14 +144,15 @@ void TabDeckStorage::deckListFinished(ProtocolResponse *r)
serverDirView
->
clear
();
serverDirView
->
clear
();
populateDeckList
(
resp
->
getRoot
(),
0
);
populateDeckList
(
resp
->
getRoot
(),
0
);
serverDirView
->
expandAll
();
}
}
void
TabDeckStorage
::
actUpload
()
void
TabDeckStorage
::
actUpload
()
{
{
QModelIndex
cur
=
sortFilter
->
mapToSource
(
localDirView
->
selectionModel
()
->
currentIndex
());
QModelIndex
cur
Left
=
sortFilter
->
mapToSource
(
localDirView
->
selectionModel
()
->
currentIndex
());
if
(
localDirModel
->
isDir
(
cur
))
if
(
localDirModel
->
isDir
(
cur
Left
))
return
;
return
;
QString
filePath
=
localDirModel
->
filePath
(
cur
);
QString
filePath
=
localDirModel
->
filePath
(
cur
Left
);
DeckList
*
deck
=
new
DeckList
;
DeckList
*
deck
=
new
DeckList
;
if
(
!
deck
->
loadFromFile
(
filePath
,
DeckList
::
CockatriceFormat
))
if
(
!
deck
->
loadFromFile
(
filePath
,
DeckList
::
CockatriceFormat
))
return
;
return
;
...
@@ -162,18 +172,138 @@ void TabDeckStorage::actUpload()
...
@@ -162,18 +172,138 @@ void TabDeckStorage::actUpload()
void
TabDeckStorage
::
uploadFinished
(
ProtocolResponse
*
r
)
void
TabDeckStorage
::
uploadFinished
(
ProtocolResponse
*
r
)
{
{
qDebug
()
<<
"buh"
;
Response_DeckUpload
*
resp
=
qobject_cast
<
Response_DeckUpload
*>
(
r
);
if
(
!
resp
)
return
;
Command_DeckUpload
*
cmd
=
static_cast
<
Command_DeckUpload
*>
(
sender
());
QTreeWidgetItemIterator
it
(
serverDirView
);
while
(
*
it
)
{
if
((
*
it
)
->
data
(
0
,
Qt
::
UserRole
)
==
cmd
->
getPath
())
{
addFileToTree
(
resp
->
getFile
(),
*
it
);
break
;
}
++
it
;
}
}
}
void
TabDeckStorage
::
actDownload
()
void
TabDeckStorage
::
actDownload
()
{
{
QString
filePath
;
QModelIndex
curLeft
=
sortFilter
->
mapToSource
(
localDirView
->
selectionModel
()
->
currentIndex
());
if
(
!
curLeft
.
isValid
())
filePath
=
localDirModel
->
rootPath
();
else
{
while
(
!
localDirModel
->
isDir
(
curLeft
))
curLeft
=
curLeft
.
parent
();
filePath
=
localDirModel
->
filePath
(
curLeft
);
}
QTreeWidgetItem
*
curRight
=
serverDirView
->
currentItem
();
if
((
!
curRight
)
||
(
curRight
->
type
()
!=
TWIDeckType
))
return
;
filePath
+=
"/"
+
curRight
->
data
(
1
,
Qt
::
DisplayRole
).
toString
()
+
".cod"
;
Command_DeckDownload
*
command
=
new
Command_DeckDownload
(
curRight
->
data
(
1
,
Qt
::
DisplayRole
).
toInt
());
command
->
setExtraData
(
filePath
);
connect
(
command
,
SIGNAL
(
finished
(
ProtocolResponse
*
)),
this
,
SLOT
(
downloadFinished
(
ProtocolResponse
*
)));
client
->
sendCommand
(
command
);
}
void
TabDeckStorage
::
downloadFinished
(
ProtocolResponse
*
r
)
{
Response_DeckDownload
*
resp
=
qobject_cast
<
Response_DeckDownload
*>
(
r
);
if
(
!
resp
)
return
;
Command_DeckDownload
*
cmd
=
static_cast
<
Command_DeckDownload
*>
(
sender
());
QString
filePath
=
cmd
->
getExtraData
().
toString
();
resp
->
getDeck
()
->
saveToFile
(
filePath
,
DeckList
::
CockatriceFormat
);
}
}
void
TabDeckStorage
::
actNewFolder
()
void
TabDeckStorage
::
actNewFolder
()
{
{
QString
folderName
=
QInputDialog
::
getText
(
this
,
tr
(
"New folder"
),
tr
(
"Name of new folder:"
));
if
(
folderName
.
isEmpty
())
return
;
QString
targetPath
;
QTreeWidgetItem
*
curRight
=
serverDirView
->
currentItem
();
while
((
curRight
!=
0
)
&&
(
curRight
->
type
()
!=
TWIFolderType
))
curRight
=
curRight
->
parent
();
if
(
curRight
)
targetPath
=
curRight
->
data
(
0
,
Qt
::
UserRole
).
toString
();
Command_DeckNewDir
*
command
=
new
Command_DeckNewDir
(
targetPath
,
folderName
);
connect
(
command
,
SIGNAL
(
finished
(
ResponseCode
)),
this
,
SLOT
(
newFolderFinished
(
ResponseCode
)));
client
->
sendCommand
(
command
);
}
void
TabDeckStorage
::
newFolderFinished
(
ResponseCode
resp
)
{
if
(
resp
!=
RespOk
)
return
;
Command_DeckNewDir
*
cmd
=
static_cast
<
Command_DeckNewDir
*>
(
sender
());
qDebug
()
<<
cmd
->
getPath
()
<<
cmd
->
getDirName
();
QTreeWidgetItemIterator
it
(
serverDirView
);
while
(
*
it
)
{
if
((
*
it
)
->
data
(
0
,
Qt
::
UserRole
)
==
cmd
->
getPath
())
{
qDebug
()
<<
"gefunden"
;
QFileIconProvider
fip
;
QTreeWidgetItem
*
newItem
=
new
QTreeWidgetItem
(
TWIFolderType
);
newItem
->
setIcon
(
0
,
fip
.
icon
(
QFileIconProvider
::
Folder
));
newItem
->
setText
(
0
,
cmd
->
getDirName
());
newItem
->
setData
(
0
,
Qt
::
UserRole
,
cmd
->
getPath
()
+
"/"
+
cmd
->
getDirName
());
(
*
it
)
->
addChild
(
newItem
);
break
;
}
else
qDebug
()
<<
"path = "
<<
(
*
it
)
->
data
(
0
,
Qt
::
UserRole
)
<<
" nicht gefunden"
;
++
it
;
}
}
}
void
TabDeckStorage
::
actDelete
()
void
TabDeckStorage
::
actDelete
()
{
{
Command
*
command
;
QTreeWidgetItem
*
curRight
=
serverDirView
->
currentItem
();
if
(
curRight
->
type
()
==
TWIFolderType
)
{
if
(
curRight
->
data
(
0
,
Qt
::
UserRole
).
toString
().
isEmpty
())
return
;
command
=
new
Command_DeckDelDir
(
curRight
->
data
(
0
,
Qt
::
UserRole
).
toString
());
}
else
command
=
new
Command_DeckDel
(
curRight
->
data
(
1
,
Qt
::
DisplayRole
).
toInt
());
connect
(
command
,
SIGNAL
(
finished
(
ResponseCode
)),
this
,
SLOT
(
deleteFinished
(
ResponseCode
)));
client
->
sendCommand
(
command
);
}
}
void
TabDeckStorage
::
deleteFinished
(
ResponseCode
resp
)
{
if
(
resp
!=
RespOk
)
return
;
QTreeWidgetItem
*
toDelete
=
0
;
QTreeWidgetItemIterator
it
(
serverDirView
);
Command_DeckDelDir
*
cmdDelDir
=
qobject_cast
<
Command_DeckDelDir
*>
(
sender
());
if
(
cmdDelDir
)
{
while
(
*
it
)
{
if
((
*
it
)
->
data
(
0
,
Qt
::
UserRole
).
toString
()
==
cmdDelDir
->
getPath
())
{
toDelete
=
*
it
;
break
;
}
++
it
;
}
}
else
{
Command_DeckDel
*
cmdDel
=
qobject_cast
<
Command_DeckDel
*>
(
sender
());
while
(
*
it
)
{
if
((
*
it
)
->
data
(
1
,
Qt
::
DisplayRole
).
toInt
()
==
cmdDel
->
getDeckId
())
{
toDelete
=
*
it
;
break
;
}
++
it
;
}
}
if
(
toDelete
)
delete
toDelete
;
}
cockatrice/src/tab_deck_storage.h
View file @
ef46d6e8
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
#define TAB_DECK_STORAGE_H
#define TAB_DECK_STORAGE_H
#include
<QWidget>
#include
<QWidget>
#include
"protocol.h"
#include
"protocol
_datastructures
.h"
class
Client
;
class
Client
;
class
QTreeView
;
class
QTreeView
;
...
@@ -12,6 +12,7 @@ class QToolBar;
...
@@ -12,6 +12,7 @@ class QToolBar;
class
QTreeWidget
;
class
QTreeWidget
;
class
QTreeWidgetItem
;
class
QTreeWidgetItem
;
class
QGroupBox
;
class
QGroupBox
;
class
ProtocolResponse
;
class
TabDeckStorage
:
public
QWidget
{
class
TabDeckStorage
:
public
QWidget
{
Q_OBJECT
Q_OBJECT
...
@@ -25,7 +26,8 @@ private:
...
@@ -25,7 +26,8 @@ private:
QGroupBox
*
leftGroupBox
,
*
rightGroupBox
;
QGroupBox
*
leftGroupBox
,
*
rightGroupBox
;
QAction
*
aUpload
,
*
aDownload
,
*
aNewFolder
,
*
aDelete
;
QAction
*
aUpload
,
*
aDownload
,
*
aNewFolder
,
*
aDelete
;
void
populateDeckList
(
Response_DeckList
::
Directory
*
folder
,
QTreeWidgetItem
*
parent
);
void
addFileToTree
(
DeckList_File
*
file
,
QTreeWidgetItem
*
parent
);
void
populateDeckList
(
DeckList_Directory
*
folder
,
QTreeWidgetItem
*
parent
);
void
refreshServerList
();
void
refreshServerList
();
private
slots
:
private
slots
:
void
deckListFinished
(
ProtocolResponse
*
r
);
void
deckListFinished
(
ProtocolResponse
*
r
);
...
@@ -34,8 +36,13 @@ private slots:
...
@@ -34,8 +36,13 @@ private slots:
void
uploadFinished
(
ProtocolResponse
*
r
);
void
uploadFinished
(
ProtocolResponse
*
r
);
void
actDownload
();
void
actDownload
();
void
downloadFinished
(
ProtocolResponse
*
r
);
void
actNewFolder
();
void
actNewFolder
();
void
newFolderFinished
(
ResponseCode
resp
);
void
actDelete
();
void
actDelete
();
void
deleteFinished
(
ResponseCode
resp
);
public:
public:
TabDeckStorage
(
Client
*
_client
);
TabDeckStorage
(
Client
*
_client
);
void
retranslateUi
();
void
retranslateUi
();
...
...
common/protocol.cpp
View file @
ef46d6e8
...
@@ -71,6 +71,7 @@ void ProtocolItem::initializeHash()
...
@@ -71,6 +71,7 @@ void ProtocolItem::initializeHash()
ProtocolResponse
::
initializeHash
();
ProtocolResponse
::
initializeHash
();
itemNameHash
.
insert
(
"respdeck_list"
,
Response_DeckList
::
newItem
);
itemNameHash
.
insert
(
"respdeck_list"
,
Response_DeckList
::
newItem
);
itemNameHash
.
insert
(
"respdeck_download"
,
Response_DeckDownload
::
newItem
);
itemNameHash
.
insert
(
"respdeck_download"
,
Response_DeckDownload
::
newItem
);
itemNameHash
.
insert
(
"respdeck_upload"
,
Response_DeckUpload
::
newItem
);
itemNameHash
.
insert
(
"generic_eventlist_games"
,
Event_ListGames
::
newItem
);
itemNameHash
.
insert
(
"generic_eventlist_games"
,
Event_ListGames
::
newItem
);
itemNameHash
.
insert
(
"generic_eventlist_chat_channels"
,
Event_ListChatChannels
::
newItem
);
itemNameHash
.
insert
(
"generic_eventlist_chat_channels"
,
Event_ListChatChannels
::
newItem
);
...
@@ -174,7 +175,7 @@ void ProtocolResponse::initializeHash()
...
@@ -174,7 +175,7 @@ void ProtocolResponse::initializeHash()
responseHash
.
insert
(
"spectators_not_allowed"
,
RespSpectatorsNotAllowed
);
responseHash
.
insert
(
"spectators_not_allowed"
,
RespSpectatorsNotAllowed
);
}
}
bool
Response_
DeckList
::
File
::
readElement
(
QXmlStreamReader
*
xml
)
bool
DeckList
_
File
::
readElement
(
QXmlStreamReader
*
xml
)
{
{
if
(
xml
->
isEndElement
())
if
(
xml
->
isEndElement
())
return
true
;
return
true
;
...
@@ -182,7 +183,7 @@ bool Response_DeckList::File::readElement(QXmlStreamReader *xml)
...
@@ -182,7 +183,7 @@ bool Response_DeckList::File::readElement(QXmlStreamReader *xml)
return
false
;
return
false
;
}
}
void
Response_
DeckList
::
File
::
writeElement
(
QXmlStreamWriter
*
xml
)
void
DeckList
_
File
::
writeElement
(
QXmlStreamWriter
*
xml
)
{
{
xml
->
writeStartElement
(
"file"
);
xml
->
writeStartElement
(
"file"
);
xml
->
writeAttribute
(
"name"
,
name
);
xml
->
writeAttribute
(
"name"
,
name
);
...
@@ -191,13 +192,13 @@ void Response_DeckList::File::writeElement(QXmlStreamWriter *xml)
...
@@ -191,13 +192,13 @@ void Response_DeckList::File::writeElement(QXmlStreamWriter *xml)
xml
->
writeEndElement
();
xml
->
writeEndElement
();
}
}
Response_
DeckList
::
Directory
::~
Directory
()
DeckList
_
Directory
::~
DeckList_
Directory
()
{
{
for
(
int
i
=
0
;
i
<
size
();
++
i
)
for
(
int
i
=
0
;
i
<
size
();
++
i
)
delete
at
(
i
);
delete
at
(
i
);
}
}
bool
Response_
DeckList
::
Directory
::
readElement
(
QXmlStreamReader
*
xml
)
bool
DeckList
_
Directory
::
readElement
(
QXmlStreamReader
*
xml
)
{
{
if
(
currentItem
)
{
if
(
currentItem
)
{
if
(
currentItem
->
readElement
(
xml
))
if
(
currentItem
->
readElement
(
xml
))
...
@@ -205,10 +206,10 @@ bool Response_DeckList::Directory::readElement(QXmlStreamReader *xml)
...
@@ -205,10 +206,10 @@ bool Response_DeckList::Directory::readElement(QXmlStreamReader *xml)
return
false
;
return
false
;
}
}
if
(
xml
->
isStartElement
()
&&
(
xml
->
name
()
==
"directory"
))
{
if
(
xml
->
isStartElement
()
&&
(
xml
->
name
()
==
"directory"
))
{
currentItem
=
new
Directory
(
xml
->
attributes
().
value
(
"name"
).
toString
());
currentItem
=
new
DeckList_
Directory
(
xml
->
attributes
().
value
(
"name"
).
toString
());
append
(
currentItem
);
append
(
currentItem
);
}
else
if
(
xml
->
isStartElement
()
&&
(
xml
->
name
()
==
"file"
))
{
}
else
if
(
xml
->
isStartElement
()
&&
(
xml
->
name
()
==
"file"
))
{
currentItem
=
new
File
(
xml
->
attributes
().
value
(
"name"
).
toString
(),
xml
->
attributes
().
value
(
"id"
).
toString
().
toInt
(),
QDateTime
::
fromTime_t
(
xml
->
attributes
().
value
(
"upload_time"
).
toString
().
toUInt
()));
currentItem
=
new
DeckList_
File
(
xml
->
attributes
().
value
(
"name"
).
toString
(),
xml
->
attributes
().
value
(
"id"
).
toString
().
toInt
(),
QDateTime
::
fromTime_t
(
xml
->
attributes
().
value
(
"upload_time"
).
toString
().
toUInt
()));
append
(
currentItem
);
append
(
currentItem
);
}
else
if
(
xml
->
isEndElement
()
&&
(
xml
->
name
()
==
"directory"
))
}
else
if
(
xml
->
isEndElement
()
&&
(
xml
->
name
()
==
"directory"
))
return
true
;
return
true
;
...
@@ -216,7 +217,7 @@ bool Response_DeckList::Directory::readElement(QXmlStreamReader *xml)
...
@@ -216,7 +217,7 @@ bool Response_DeckList::Directory::readElement(QXmlStreamReader *xml)
return
false
;
return
false
;
}
}
void
Response_
DeckList
::
Directory
::
writeElement
(
QXmlStreamWriter
*
xml
)
void
DeckList
_
Directory
::
writeElement
(
QXmlStreamWriter
*
xml
)
{
{
xml
->
writeStartElement
(
"directory"
);
xml
->
writeStartElement
(
"directory"
);
xml
->
writeAttribute
(
"name"
,
name
);
xml
->
writeAttribute
(
"name"
,
name
);
...
@@ -225,7 +226,7 @@ void Response_DeckList::Directory::writeElement(QXmlStreamWriter *xml)
...
@@ -225,7 +226,7 @@ void Response_DeckList::Directory::writeElement(QXmlStreamWriter *xml)
xml
->
writeEndElement
();
xml
->
writeEndElement
();
}
}
Response_DeckList
::
Response_DeckList
(
int
_cmdId
,
ResponseCode
_responseCode
,
Directory
*
_root
)
Response_DeckList
::
Response_DeckList
(
int
_cmdId
,
ResponseCode
_responseCode
,
DeckList_
Directory
*
_root
)
:
ProtocolResponse
(
_cmdId
,
_responseCode
,
"deck_list"
),
root
(
_root
),
readFinished
(
false
)
:
ProtocolResponse
(
_cmdId
,
_responseCode
,
"deck_list"
),
root
(
_root
),
readFinished
(
false
)
{
{
}
}
...
@@ -242,7 +243,7 @@ bool Response_DeckList::readElement(QXmlStreamReader *xml)
...
@@ -242,7 +243,7 @@ bool Response_DeckList::readElement(QXmlStreamReader *xml)
if
(
!
root
)
{
if
(
!
root
)
{
if
(
xml
->
isStartElement
()
&&
(
xml
->
name
()
==
"directory"
))
{
if
(
xml
->
isStartElement
()
&&
(
xml
->
name
()
==
"directory"
))
{
root
=
new
Directory
;
root
=
new
DeckList_
Directory
;
return
true
;
return
true
;
}
}
return
false
;
return
false
;
...
@@ -292,20 +293,38 @@ void Response_DeckDownload::writeElement(QXmlStreamWriter *xml)
...
@@ -292,20 +293,38 @@ void Response_DeckDownload::writeElement(QXmlStreamWriter *xml)
deck
->
writeElement
(
xml
);
deck
->
writeElement
(
xml
);
}
}
Response_DeckUpload
::
Response_DeckUpload
(
int
_cmdId
,
ResponseCode
_responseCode
,
int
_deckId
)
Response_DeckUpload
::
Response_DeckUpload
(
int
_cmdId
,
ResponseCode
_responseCode
,
DeckList_File
*
_file
)
:
ProtocolResponse
(
_cmdId
,
_responseCode
,
"deck_upload"
),
deckId
(
_deckId
)
:
ProtocolResponse
(
_cmdId
,
_responseCode
,
"deck_upload"
),
file
(
_file
),
readFinished
(
false
)
{
{
setParameter
(
"deck_id"
,
deckId
);
}
}
void
Response_DeckUpload
::
extractParameters
()
Response_DeckUpload
::
~
Response_DeckUpload
()
{
{
ProtocolResponse
::
extractParameters
();
delete
file
;
}
bool
Response_DeckUpload
::
readElement
(
QXmlStreamReader
*
xml
)
{
if
(
readFinished
)
return
false
;
bool
ok
;
if
(
!
file
)
{
deckId
=
parameters
[
"deck_id"
].
toInt
(
&
ok
);
if
(
xml
->
isStartElement
()
&&
(
xml
->
name
()
==
"file"
))
{
if
(
!
ok
)
file
=
new
DeckList_File
(
xml
->
attributes
().
value
(
"name"
).
toString
(),
xml
->
attributes
().
value
(
"id"
).
toString
().
toInt
(),
QDateTime
::
fromTime_t
(
xml
->
attributes
().
value
(
"upload_time"
).
toString
().
toUInt
()));
deckId
=
-
1
;
return
true
;
}
return
false
;
}
if
(
file
->
readElement
(
xml
))
readFinished
=
true
;
return
true
;
}
void
Response_DeckUpload
::
writeElement
(
QXmlStreamWriter
*
xml
)
{
if
(
file
)
file
->
writeElement
(
xml
);
}
}
GenericEvent
::
GenericEvent
(
const
QString
&
_eventName
)
GenericEvent
::
GenericEvent
(
const
QString
&
_eventName
)
...
...
common/protocol.h
View file @
ef46d6e8
...
@@ -5,8 +5,7 @@
...
@@ -5,8 +5,7 @@
#include
<QMap>
#include
<QMap>
#include
<QHash>
#include
<QHash>
#include
<QObject>
#include
<QObject>
#include
<QDebug>
#include
<QVariant>
#include
<QDateTime>
#include
"protocol_item_ids.h"
#include
"protocol_item_ids.h"
#include
"protocol_datastructures.h"
#include
"protocol_datastructures.h"
...
@@ -70,6 +69,7 @@ private:
...
@@ -70,6 +69,7 @@ private:
int
cmdId
;
int
cmdId
;
int
ticks
;
int
ticks
;
static
int
lastCmdId
;
static
int
lastCmdId
;
QVariant
extraData
;
protected:
protected:
QString
getItemType
()
const
{
return
"cmd"
;
}
QString
getItemType
()
const
{
return
"cmd"
;
}
void
extractParameters
();
void
extractParameters
();
...
@@ -78,6 +78,8 @@ public:
...
@@ -78,6 +78,8 @@ public:
int
getCmdId
()
const
{
return
cmdId
;
}
int
getCmdId
()
const
{
return
cmdId
;
}
int
tick
()
{
return
++
ticks
;
}
int
tick
()
{
return
++
ticks
;
}
void
processResponse
(
ProtocolResponse
*
response
);
void
processResponse
(
ProtocolResponse
*
response
);
void
setExtraData
(
const
QVariant
&
_extraData
)
{
extraData
=
_extraData
;
}
QVariant
getExtraData
()
const
{
return
extraData
;
}
};
};
class
InvalidCommand
:
public
Command
{
class
InvalidCommand
:
public
Command
{
...
@@ -168,48 +170,18 @@ public:
...
@@ -168,48 +170,18 @@ public:
class
Response_DeckList
:
public
ProtocolResponse
{
class
Response_DeckList
:
public
ProtocolResponse
{
Q_OBJECT
Q_OBJECT
public:
class
TreeItem
{
protected:
QString
name
;
int
id
;
public:
TreeItem
(
const
QString
&
_name
,
int
_id
)
:
name
(
_name
),
id
(
_id
)
{
}
QString
getName
()
const
{
return
name
;
}
int
getId
()
const
{
return
id
;
}
virtual
bool
readElement
(
QXmlStreamReader
*
xml
)
=
0
;
virtual
void
writeElement
(
QXmlStreamWriter
*
xml
)
=
0
;
};
class
File
:
public
TreeItem
{
private:
QDateTime
uploadTime
;
public:
File
(
const
QString
&
_name
,
int
_id
,
QDateTime
_uploadTime
)
:
TreeItem
(
_name
,
_id
),
uploadTime
(
_uploadTime
)
{
}
bool
readElement
(
QXmlStreamReader
*
xml
);
void
writeElement
(
QXmlStreamWriter
*
xml
);
QDateTime
getUploadTime
()
const
{
return
uploadTime
;
}
};
class
Directory
:
public
TreeItem
,
public
QList
<
TreeItem
*>
{
private:
TreeItem
*
currentItem
;
public:
Directory
(
const
QString
&
_name
=
QString
(),
int
_id
=
0
)
:
TreeItem
(
_name
,
_id
),
currentItem
(
0
)
{
}
~
Directory
();
bool
readElement
(
QXmlStreamReader
*
xml
);
void
writeElement
(
QXmlStreamWriter
*
xml
);
};
private:
private:
Directory
*
root
;
DeckList_
Directory
*
root
;
bool
readFinished
;
bool
readFinished
;
protected:
protected:
bool
readElement
(
QXmlStreamReader
*
xml
);
bool
readElement
(
QXmlStreamReader
*
xml
);
void
writeElement
(
QXmlStreamWriter
*
xml
);
void
writeElement
(
QXmlStreamWriter
*
xml
);
public:
public:
Response_DeckList
(
int
_cmdId
=
-
1
,
ResponseCode
_responseCode
=
RespOk
,
Directory
*
_root
=
0
);
Response_DeckList
(
int
_cmdId
=
-
1
,
ResponseCode
_responseCode
=
RespOk
,
DeckList_
Directory
*
_root
=
0
);
~
Response_DeckList
();
~
Response_DeckList
();
int
getItemId
()
const
{
return
ItemId_Response_DeckList
;
}
int
getItemId
()
const
{
return
ItemId_Response_DeckList
;
}
static
ProtocolItem
*
newItem
()
{
return
new
Response_DeckList
;
}
static
ProtocolItem
*
newItem
()
{
return
new
Response_DeckList
;
}
Directory
*
getRoot
()
const
{
return
root
;
}
DeckList_
Directory
*
getRoot
()
const
{
return
root
;
}
};
};
class
Response_DeckDownload
:
public
ProtocolResponse
{
class
Response_DeckDownload
:
public
ProtocolResponse
{
...
@@ -231,14 +203,17 @@ public:
...
@@ -231,14 +203,17 @@ public:
class
Response_DeckUpload
:
public
ProtocolResponse
{
class
Response_DeckUpload
:
public
ProtocolResponse
{
Q_OBJECT
Q_OBJECT
private:
private:
int
deckId
;
DeckList_File
*
file
;
bool
readFinished
;
protected:
protected:
void
extractParameters
();
bool
readElement
(
QXmlStreamReader
*
xml
);
void
writeElement
(
QXmlStreamWriter
*
xml
);
public:
public:
Response_DeckUpload
(
int
_cmdId
=
-
1
,
ResponseCode
_responseCode
=
RespOk
,
int
_deckId
=
-
1
);
Response_DeckUpload
(
int
_cmdId
=
-
1
,
ResponseCode
_responseCode
=
RespOk
,
DeckList_File
*
_file
=
0
);
~
Response_DeckUpload
();
int
getItemId
()
const
{
return
ItemId_Response_DeckUpload
;
}
int
getItemId
()
const
{
return
ItemId_Response_DeckUpload
;
}
static
ProtocolItem
*
newItem
()
{
return
new
Response_DeckUpload
;
}
static
ProtocolItem
*
newItem
()
{
return
new
Response_DeckUpload
;
}
int
getDeckId
()
const
{
return
deckId
;
}
DeckList_File
*
getFile
()
const
{
return
file
;
}
};
};
// --------------
// --------------
...
...
common/protocol_datastructures.h
View file @
ef46d6e8
...
@@ -3,6 +3,10 @@
...
@@ -3,6 +3,10 @@
#include
<QString>
#include
<QString>
#include
<QColor>
#include
<QColor>
#include
<QDateTime>
class
QXmlStreamReader
;
class
QXmlStreamWriter
;
enum
ResponseCode
{
RespNothing
,
RespOk
,
RespInvalidCommand
,
RespInvalidData
,
RespNameNotFound
,
RespLoginNeeded
,
RespContextError
,
RespWrongPassword
,
RespSpectatorsNotAllowed
};
enum
ResponseCode
{
RespNothing
,
RespOk
,
RespInvalidCommand
,
RespInvalidData
,
RespNameNotFound
,
RespLoginNeeded
,
RespContextError
,
RespWrongPassword
,
RespSpectatorsNotAllowed
};
...
@@ -155,4 +159,34 @@ public:
...
@@ -155,4 +159,34 @@ public:
QColor
getColor
()
const
{
return
color
;
}
QColor
getColor
()
const
{
return
color
;
}
};
};
class
DeckList_TreeItem
{
protected:
QString
name
;
int
id
;
public:
DeckList_TreeItem
(
const
QString
&
_name
,
int
_id
)
:
name
(
_name
),
id
(
_id
)
{
}
QString
getName
()
const
{
return
name
;
}
int
getId
()
const
{
return
id
;
}
virtual
bool
readElement
(
QXmlStreamReader
*
xml
)
=
0
;
virtual
void
writeElement
(
QXmlStreamWriter
*
xml
)
=
0
;
};
class
DeckList_File
:
public
DeckList_TreeItem
{
private:
QDateTime
uploadTime
;
public:
DeckList_File
(
const
QString
&
_name
,
int
_id
,
QDateTime
_uploadTime
)
:
DeckList_TreeItem
(
_name
,
_id
),
uploadTime
(
_uploadTime
)
{
}
bool
readElement
(
QXmlStreamReader
*
xml
);
void
writeElement
(
QXmlStreamWriter
*
xml
);
QDateTime
getUploadTime
()
const
{
return
uploadTime
;
}
};
class
DeckList_Directory
:
public
DeckList_TreeItem
,
public
QList
<
DeckList_TreeItem
*>
{
private:
DeckList_TreeItem
*
currentItem
;
public:
DeckList_Directory
(
const
QString
&
_name
=
QString
(),
int
_id
=
0
)
:
DeckList_TreeItem
(
_name
,
_id
),
currentItem
(
0
)
{
}
~
DeckList_Directory
();
bool
readElement
(
QXmlStreamReader
*
xml
);
void
writeElement
(
QXmlStreamWriter
*
xml
);
};
#endif
#endif
servatrice/src/serversocketinterface.cpp
View file @
ef46d6e8
...
@@ -135,7 +135,7 @@ int ServerSocketInterface::getDeckPathId(const QString &path)
...
@@ -135,7 +135,7 @@ int ServerSocketInterface::getDeckPathId(const QString &path)
return
getDeckPathId
(
0
,
path
.
split
(
"/"
));
return
getDeckPathId
(
0
,
path
.
split
(
"/"
));
}
}
bool
ServerSocketInterface
::
deckListHelper
(
Response_
DeckList
::
Directory
*
folder
)
bool
ServerSocketInterface
::
deckListHelper
(
DeckList
_
Directory
*
folder
)
{
{
QSqlQuery
query
;
QSqlQuery
query
;
query
.
prepare
(
"select id, name from decklist_folders where id_parent = :id_parent and user = :user"
);
query
.
prepare
(
"select id, name from decklist_folders where id_parent = :id_parent and user = :user"
);
...
@@ -145,7 +145,7 @@ bool ServerSocketInterface::deckListHelper(Response_DeckList::Directory *folder)
...
@@ -145,7 +145,7 @@ bool ServerSocketInterface::deckListHelper(Response_DeckList::Directory *folder)
return
false
;
return
false
;
while
(
query
.
next
())
{
while
(
query
.
next
())
{
Response_
DeckList
::
Directory
*
newFolder
=
new
Response_
DeckList
::
Directory
(
query
.
value
(
1
).
toString
(),
query
.
value
(
0
).
toInt
());
DeckList
_
Directory
*
newFolder
=
new
DeckList
_
Directory
(
query
.
value
(
1
).
toString
(),
query
.
value
(
0
).
toInt
());
folder
->
append
(
newFolder
);
folder
->
append
(
newFolder
);
if
(
!
deckListHelper
(
newFolder
))
if
(
!
deckListHelper
(
newFolder
))
return
false
;
return
false
;
...
@@ -157,7 +157,7 @@ bool ServerSocketInterface::deckListHelper(Response_DeckList::Directory *folder)
...
@@ -157,7 +157,7 @@ bool ServerSocketInterface::deckListHelper(Response_DeckList::Directory *folder)
return
false
;
return
false
;
while
(
query
.
next
())
{
while
(
query
.
next
())
{
Response_
DeckList
::
File
*
newFile
=
new
Response_
DeckList
::
File
(
query
.
value
(
1
).
toString
(),
query
.
value
(
0
).
toInt
(),
query
.
value
(
2
).
toDateTime
());
DeckList
_
File
*
newFile
=
new
DeckList
_
File
(
query
.
value
(
1
).
toString
(),
query
.
value
(
0
).
toInt
(),
query
.
value
(
2
).
toDateTime
());
folder
->
append
(
newFile
);
folder
->
append
(
newFile
);
}
}
...
@@ -171,7 +171,7 @@ ResponseCode ServerSocketInterface::cmdDeckList(Command_DeckList *cmd)
...
@@ -171,7 +171,7 @@ ResponseCode ServerSocketInterface::cmdDeckList(Command_DeckList *cmd)
{
{
servatrice
->
checkSql
();
servatrice
->
checkSql
();
Response_
DeckList
::
Directory
*
root
=
new
Response_
DeckList
::
Directory
(
QString
());
DeckList
_
Directory
*
root
=
new
DeckList
_
Directory
(
QString
());
QSqlQuery
query
;
QSqlQuery
query
;
if
(
!
deckListHelper
(
root
))
if
(
!
deckListHelper
(
root
))
return
RespContextError
;
return
RespContextError
;
...
@@ -279,7 +279,7 @@ ResponseCode ServerSocketInterface::cmdDeckUpload(Command_DeckUpload *cmd)
...
@@ -279,7 +279,7 @@ ResponseCode ServerSocketInterface::cmdDeckUpload(Command_DeckUpload *cmd)
query
.
bindValue
(
":content"
,
deckContents
);
query
.
bindValue
(
":content"
,
deckContents
);
servatrice
->
execSqlQuery
(
query
);
servatrice
->
execSqlQuery
(
query
);
sendProtocolItem
(
new
Response_DeckUpload
(
cmd
->
getCmdId
(),
RespOk
,
query
.
lastInsertId
().
toInt
(
)));
sendProtocolItem
(
new
Response_DeckUpload
(
cmd
->
getCmdId
(),
RespOk
,
new
DeckList_File
(
deckName
,
query
.
lastInsertId
().
toInt
(),
QDateTime
::
currentDateTime
()
)));
return
RespNothing
;
return
RespNothing
;
}
}
...
...
servatrice/src/serversocketinterface.h
View file @
ef46d6e8
...
@@ -43,7 +43,7 @@ private:
...
@@ -43,7 +43,7 @@ private:
int
getDeckPathId
(
int
basePathId
,
QStringList
path
);
int
getDeckPathId
(
int
basePathId
,
QStringList
path
);
int
getDeckPathId
(
const
QString
&
path
);
int
getDeckPathId
(
const
QString
&
path
);
bool
deckListHelper
(
Response_
DeckList
::
Directory
*
folder
);
bool
deckListHelper
(
DeckList
_
Directory
*
folder
);
ResponseCode
cmdDeckList
(
Command_DeckList
*
cmd
);
ResponseCode
cmdDeckList
(
Command_DeckList
*
cmd
);
ResponseCode
cmdDeckNewDir
(
Command_DeckNewDir
*
cmd
);
ResponseCode
cmdDeckNewDir
(
Command_DeckNewDir
*
cmd
);
void
deckDelDirHelper
(
int
basePathId
);
void
deckDelDirHelper
(
int
basePathId
);
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment