8 #include "ConfigHolder.h"
10 #include "ForgetCurve.h"
13 namespace freeRecite
{
15 bool Manager::load() {
16 std::ifstream
ifs(configHolder
.mgrFile().c_str());
25 bool firstFlag
= true;
26 while(amount
> 0 && ifs
.good()) {
28 allTasks
[tmpTask
.getID()] = tmpTask
;
30 if(tmpTask
.shouldReview())
31 activeID
.push_back(tmpTask
.getID());
33 firstReviewTime
= tmpTask
.getReviewTime();
35 }else if(firstReviewTime
> tmpTask
.getReviewTime())
36 firstReviewTime
= tmpTask
.getReviewTime();
45 bool Manager::save() {
46 std::ofstream
ofs(configHolder
.mgrFile().c_str());
49 ofs
<< static_cast<unsigned>(allTasks
.size())
50 << ',' << maxTaskID
<< '\n';
51 std::map
<time_t,Task
>::const_iterator itr
= allTasks
.begin();
52 while(itr
!= allTasks
.end()){
56 if((itr
->second
).isAvailable())
64 bool Manager::refresh() {
73 bool Manager::hasTask(time_t taskID
) {
74 if(allTasks
.find(taskID
) == allTasks
.end())
81 bool Manager::createTask(const std::set
<std::string
> &words
,
82 const char *taskName
, unsigned maxLimit
) {
85 unsigned tasksNum
= words
.size()/maxLimit
+ 1;
86 maxLimit
= words
.size()/tasksNum
;
89 std::ofstream desFile
;
90 std::ostringstream os
;
95 std::set
<std::string
>::const_iterator itr
= words
.begin();
102 if(baseName
.empty()){
103 timeinfo
= localtime(&curTime
);
104 strftime(buffer
,20,"%Y%m%d%H%M%S",timeinfo
);
108 for (int i
= 1; i
<= tasksNum
; ++i
) { //[0]
114 realName
= baseName
+ os
.str();
117 if(curTime
> maxTaskID
)
121 timeinfo
= localtime(&maxTaskID
);
122 strftime(buffer
,20,"%Y%m%d%H%M%S.tkwd",timeinfo
);
123 std::string desFileName
= configHolder
.tasksDir() + buffer
;
125 desFile
.open(desFileName
.c_str());
126 if(!desFile
.is_open()) {
131 //Write words into file.
133 while(j
++ < maxLimit
&& itr
!= words
.end()) {
135 std::cerr
<< "error when open file" << std::endl
;
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 const std::vector
<time_t> &Manager::getActiveTasks() const{
160 //Get the number of the active tasks.
161 int Manager::getActiveTaskNum() const {
162 return activeID
.size();
165 //Get the task's name.
166 const std::string
&Manager::getTaskName(time_t taskID
)const {
167 return (allTasks
.find(taskID
)->second
).getName();
171 time_t Manager::getNextTime(time_t taskID
) const {
172 return (allTasks
.find(taskID
)->second
).getReviewTime();
174 //Get the step of the task.
175 int Manager::getTaskStep(time_t taskID
)const {
176 return (allTasks
.find(taskID
)->second
).getStep();
179 bool Manager::test(time_t taskID
,int mark
) {
180 bool result
= (allTasks
[taskID
]).test(mark
);
181 return (refresh() && result
);
184 //This is a global variable.
187 } //namespace freeRecite end