/* * This file is a part of Winix * and is not publicly distributed * * Copyright (c) 2008-2010, Tomasz Sowa * All rights reserved. * */ #include "notify.h" #include "templates/templates.h" #include "core/request.h" #include "core/config.h" #include "core/users.h" #include "core/dirs.h" #include "core/synchro.h" #include "core/plugin.h" Notify::Notify() { } void Notify::SetSynchro(Synchro * psynchro) { synchro = psynchro; } void Notify::SetRequest(Request * prequest) { request = prequest; } void Notify::SetConfig(Config * pconfig) { config = pconfig; } void Notify::SetUsers(Users * pusers) { users = pusers; } void Notify::SetDirs(Dirs * pdirs) { dirs = pdirs; } void Notify::Init() { notify_thread.SetConfig(config); notify_thread.SetUsers(users); notify_thread.SetNotifyPool(¬ify_pool); notify_thread.SetPatterns(&patterns); notify_thread.SetSynchro(synchro); notify_template_cms = AddTemplate(L"notify_email_cms.txt"); // !! do konfiga notify_template_thread = AddTemplate(L"notify_email_thread.txt"); plugin.Call(WINIX_NOTIFY_ADD_TEMPLATE); } void Notify::ReadTemplates() { if( templates_names.empty() ) { patterns.clear(); return; } patterns.resize(static_cast(Locale::lang_unknown)); for(size_t i=0 ; iutf8); patterns[i][a].DeleteWhiteTextItems(false); patterns[i][a].Directory(config->txt_templates_dir, config->txt_templates_dir_default); patterns[i][a].ParseFile(templates_names[a]); TemplatesFunctions::locale_filter.Filter(patterns[i][a], TemplatesFunctions::locale, static_cast(i)); } } notify_thread.PatternsChanged(); } void Notify::ItemChanged(int notify_code, const Item & item) { if( notify_code == 0 ) return; msg.code = notify_code; CreateItemLink(item, msg.item_link, msg.dir_link); if( msg.code >=0 && msg.code <= WINIX_NOTIFY_CODE_FILE_DELETE ) msg.template_index = notify_template_cms; else if( msg.code >= WINIX_NOTIFY_CODE_THREAD_ADD && msg.code <= WINIX_NOTIFY_CODE_THREAD_DELETE ) msg.template_index = notify_template_thread; else { log << log1 << "Notify: don't know what to do with this mount point (skipping)" << logend; return; } ItemChanged(msg); } // raw form void Notify::ItemChanged(const NotifyMsg & msg) { notify_pool.Add(msg); notify_thread.WakeUpThread(); // we are in the first locked thread } void Notify::StartThread() { if( !notify_thread.StartThread() ) log << log1 << "Notify: I can't create a thread for sending emails" << logend; } void Notify::PrepareToStopThread() { // synchro->was_stop_signal is true notify_thread.WakeUpThread(); } void Notify::WaitForThread() { notify_thread.WaitForThread(); } size_t Notify::AddTemplate(const std::wstring & file_name) { size_t index = templates_names.size(); templates_names.push_back(file_name); return index; } void Notify::CreateItemLink(const Item & item, std::wstring & item_link, std::wstring & dir_link) { static std::wstring tmp_path; if( item.type == Item::dir ) { dirs->MakePath(item.id, tmp_path); item_link = config->base_url; item_link += tmp_path; dir_link = item_link; } else { dirs->MakePath(item.parent_id, tmp_path); item_link = config->base_url; item_link += tmp_path; dir_link = item_link; item_link += item.url; } }