/* * This file is a part of Winix * and is not publicly distributed * * Copyright (c) 2010, Tomasz Sowa * All rights reserved. * */ #include "threadinfo.h" namespace Thread { void ThreadInfo::SetDb(Db * pdb) { db = pdb; } void ThreadInfo::SetTDb(TDb * ptdb) { tdb = ptdb; } void ThreadInfo::SetSystem(System * psystem) { system = psystem; } void ThreadInfo::Clear() { item_tab.clear(); thread_tab.clear(); item_sort_tab.clear(); } Item * ThreadInfo::FindThreadDir() { const std::wstring & dir_str = system->mounts.pmount->FirstArg(mount_par_thread_dir); if( dir_str.empty() ) return 0; int res = system->FollowAllLinks(dir_str, out_dir_tab, out_item); if( res != 0 ) return 0; return out_dir_tab.back(); } void ThreadInfo::RemoveThread(long file_id) { if( tdb->GetAnswers(file_id, remove_answer_id_tab) == WINIX_ERR_OK ) { for(size_t i=0 ; iDelFileById(remove_answer_id_tab[i]); } tdb->RemoveThread(file_id); } void ThreadInfo::RemoveThreadAnswer(long answer_id) { tdb->RemoveAnswer(answer_id); } void ThreadInfo::RepairAnswer(long answer_id) { iq.Clear(); iq.SetAll(false, false); iq.WhereId(answer_id); iq.WhereType(Item::file); // !! moze w przyszlosci pozwolic takze na symlinki? if( db->GetItem(repair_item, iq) == WINIX_ERR_NO_ITEM ) { log << log3 << "ThreadInfo: there is no a file for thread answer_id: " << answer_id << logend; tdb->RemoveAnswerOnly(answer_id); } } void ThreadInfo::RepairAnswers(long file_id) { tdb->GetAnswers(file_id, repair_answer_tab); for(size_t i=0 ; iGetItem(repair_item, iq) == WINIX_ERR_NO_ITEM ) { log << log3 << "ThreadInfo: there is no a file for thread file_id: " << file_id << logend; tdb->RemoveThread(file_id); } else { RepairAnswers(file_id); tdb->RecalcThread(file_id); } } void ThreadInfo::Repair() { tdb->GetAllThreadsId(repair_id_tab); for(size_t i=0 ; i