10 #include "ConfigHolder.h"
12 #include "ForgetCurve.h"
15 namespace freeRecite
{
17 bool Manager::load() {
18 std::ifstream
ifs(configHolder
.mgrFile().c_str());
27 bool firstFlag
= true;
28 while(amount
> 0 && ifs
.good()) {
30 allTasks
[tmpTask
.getID()] = tmpTask
;
32 if(tmpTask
.shouldReview())
33 activeID
.push_back(tmpTask
.getID());
35 firstReviewTime
= tmpTask
.getReviewTime();
37 }else if(firstReviewTime
> tmpTask
.getReviewTime())
38 firstReviewTime
= tmpTask
.getReviewTime();
47 bool Manager::save() {
48 std::ofstream
ofs(configHolder
.mgrFile().c_str());
51 ofs
<< static_cast<unsigned>(allTasks
.size())
52 << ',' << maxTaskID
<< '\n';
53 std::map
<time_t,Task
>::const_iterator itr
= allTasks
.begin();
54 while(itr
!= allTasks
.end()){
58 if((itr
->second
).isAvailable())
66 bool Manager::refresh() {
75 bool Manager::hasTask(time_t taskID
) {
76 if(allTasks
.find(taskID
) == allTasks
.end())
83 bool Manager::createTask(const std::set
<std::string
> &words
,
84 const char *taskName
, unsigned maxLimit
) {
87 unsigned tasksNum
= words
.size()/maxLimit
+ 1;
88 maxLimit
= words
.size()/tasksNum
;
91 std::ofstream desFile
;
92 std::ostringstream os
;
97 std::set
<std::string
>::const_iterator itr
= words
.begin();
104 if(baseName
.empty()){
105 timeinfo
= localtime(&curTime
);
106 strftime(buffer
,20,"%Y%m%d%H%M%S",timeinfo
);
110 for (int i
= 1; i
<= tasksNum
; ++i
) { //[0]
116 realName
= baseName
+ os
.str();
119 if(curTime
> maxTaskID
)
123 timeinfo
= localtime(&maxTaskID
);
124 strftime(buffer
,20,"%Y%m%d%H%M%S.tkwd",timeinfo
);
125 std::string desFileName
= configHolder
.tasksDir() + buffer
;
127 desFile
.open(desFileName
.c_str());
128 if(!desFile
.is_open()) {
132 //Write words into file.
134 while(j
++ < maxLimit
&& itr
!= words
.end()) {
142 desFile
<< *itr
<< std::endl
;
147 Task
newTask(maxTaskID
,realName
.c_str());
148 //Pass a copy of newTask here.
149 allTasks
[newTask
.getID()] = newTask
;
150 activeID
.push_back(newTask
.getID());
156 void Manager::removeTask(time_t taskID
) {
157 allTasks
.erase(allTasks
.find(taskID
));
159 struct tm
* timeinfo
;
161 timeinfo
= localtime(&taskID
);
162 strftime(buffer
,20,"%Y%m%d%H%M%S.tkwd",timeinfo
);
163 std::string taskFileName
= configHolder
.tasksDir() + buffer
;
164 remove(taskFileName
.c_str());
168 const std::vector
<time_t> &Manager::getActiveTasks() const{
172 //Get the number of the active tasks.
173 int Manager::getActiveTaskNum() const {
174 return activeID
.size();
177 //Get the task's name.
178 const std::string
&Manager::getTaskName(time_t taskID
)const {
179 return (allTasks
.find(taskID
)->second
).getName();
183 time_t Manager::getNextTime(time_t taskID
) const {
184 return (allTasks
.find(taskID
)->second
).getReviewTime();
186 //Get the step of the task.
187 int Manager::getTaskStep(time_t taskID
)const {
188 return (allTasks
.find(taskID
)->second
).getStep();
191 bool Manager::test(time_t taskID
,int mark
) {
192 bool result
= (allTasks
[taskID
]).test(mark
);
193 return (refresh() && result
);
196 //This is a global variable.
199 } //namespace freeRecite end