1 #include <lib/components/file_eraser.h>
2 #include <lib/base/eerror.h>
3 #include <lib/base/init.h>
4 #include <lib/base/init_num.h>
10 eBackgroundFileEraser *eBackgroundFileEraser::instance;
12 eBackgroundFileEraser::eBackgroundFileEraser()
13 :messages(this,1), stop_thread_timer(this)
17 CONNECT(messages.recv_msg, eBackgroundFileEraser::gotMessage);
18 CONNECT(stop_thread_timer.timeout, eBackgroundFileEraser::idle);
21 void eBackgroundFileEraser::idle()
26 eBackgroundFileEraser::~eBackgroundFileEraser()
28 messages.send(Message::quit);
29 if ( thread_running() )
35 void eBackgroundFileEraser::thread()
40 stop_thread_timer.stop();
43 void eBackgroundFileEraser::erase(const char *filename)
48 snprintf(buf, 255, "%s.$$$", filename);
49 if (rename(filename, buf)<0)
50 ;/*perror("rename file failed !!!");*/
53 messages.send(Message(Message::erase, strdup(buf)));
54 if (!thread_running())
60 void eBackgroundFileEraser::gotMessage(const Message &msg )
67 if ( ::unlink(msg.filename) < 0 )
68 eDebug("remove file %s failed (%m)", msg.filename);
70 eDebug("file %s erased", msg.filename);
71 free((char*)msg.filename);
73 stop_thread_timer.start(2000, true); // stop thread in two seconds
79 eDebug("unhandled thread message");
83 eAutoInitP0<eBackgroundFileEraser> init_eBackgroundFilEraser(eAutoInitNumbers::configuration+1, "Background File Eraser");