194 lines
3.4 KiB
C++
Executable File
194 lines
3.4 KiB
C++
Executable File
/*
|
|
* 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<size_t>(Locale::lang_unknown));
|
|
|
|
for(size_t i=0 ; i<patterns.size() ; ++i)
|
|
{
|
|
patterns[i].resize(templates_names.size());
|
|
|
|
for(size_t a=0 ; a<patterns[i].size() ; ++a)
|
|
{
|
|
patterns[i][a].UTF8(config->utf8);
|
|
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<Locale::Lang>(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;
|
|
}
|
|
}
|
|
|
|
|
|
|