1 #include "TagsModel.h"
2 
3 #include "TagsView.h"
4 #include "TagsModelException.h"
5 
6 #include "client/Client.h"
7 #include "client/SaveInfo.h"
8 
TagsModel()9 TagsModel::TagsModel():
10 	save(NULL)
11 {
12 
13 }
14 
SetSave(SaveInfo * save)15 void TagsModel::SetSave(SaveInfo * save)
16 {
17 	this->save = save;
18 	notifyTagsChanged();
19 }
20 
GetSave()21 SaveInfo * TagsModel::GetSave()
22 {
23 	return save;
24 }
25 
RemoveTag(ByteString tag)26 void TagsModel::RemoveTag(ByteString tag)
27 {
28 	if(save)
29 	{
30 		std::list<ByteString> * tags = Client::Ref().RemoveTag(save->GetID(), tag);
31 		if(tags)
32 		{
33 			save->SetTags(std::list<ByteString>(*tags));
34 			notifyTagsChanged();
35 			delete tags;
36 		}
37 		else
38 		{
39 			throw TagsModelException(Client::Ref().GetLastError());
40 		}
41 	}
42 }
43 
AddTag(ByteString tag)44 void TagsModel::AddTag(ByteString tag)
45 {
46 	if(save)
47 	{
48 		std::list<ByteString> * tags = Client::Ref().AddTag(save->GetID(), tag);
49 		if(tags)
50 		{
51 			save->SetTags(std::list<ByteString>(*tags));
52 			notifyTagsChanged();
53 			delete tags;
54 		}
55 		else
56 		{
57 			throw TagsModelException(Client::Ref().GetLastError());
58 		}
59 	}
60 }
61 
AddObserver(TagsView * observer)62 void TagsModel::AddObserver(TagsView * observer)
63 {
64 	observers.push_back(observer);
65 	observer->NotifyTagsChanged(this);
66 }
67 
notifyTagsChanged()68 void TagsModel::notifyTagsChanged()
69 {
70 	for (size_t i = 0; i < observers.size(); i++)
71 	{
72 		observers[i]->NotifyTagsChanged(this);
73 	}
74 }
75 
~TagsModel()76 TagsModel::~TagsModel() {
77 }
78 
79