winix/plugins/menu/init.cpp

129 lines
2.7 KiB
C++
Executable File

/*
* This file is a part of Winix
* and is not publicly distributed
*
* Copyright (c) 2011-2012, Tomasz Sowa
* All rights reserved.
*
*/
#include "core/log.h"
#include "core/plugin.h"
#include "cache.h"
extern "C" void Init(PluginInfo &);
namespace Menu
{
const wchar_t plugin_name[] = L"menu";
int mount_par_menu_skip = -1;
Cache cache;
void AddMountParams(PluginInfo & info)
{
using TemplatesFunctions::system;
mount_par_menu_skip = system->mounts.AddMountPar(L"menu_skip");
}
void FstabChanged(PluginInfo & info)
{
if( mount_par_menu_skip == -1 )
return;
/*
// GetMountTab() returns a const pointer so we cannot sort menu_skip parameters
// may change it to non-const in the future?
const Mounts::MountTab * mt = system->mounts.GetMountTab();
Mounts::MountTab::const_iterator i;
for(i = mt->begin() ; i != mt->end() ; ++i)
SortMenuSkip(i->second);
*/
}
void InvalidateCache(long dir_id)
{
log << log4 << "Menu: removing cache for dir id: " << dir_id << logend;
cache.Remove(dir_id);
}
void InvalidateCacheByPointerParent(PluginInfo & info)
{
Item * pitem = reinterpret_cast<Item*>(info.p1);
if( pitem )
InvalidateCache(pitem->parent_id);
}
void InvalidateCacheByPointer(PluginInfo & info)
{
Item * pitem = reinterpret_cast<Item*>(info.p1);
if( pitem )
InvalidateCache(pitem->id);
}
void InvalidateCacheById(PluginInfo & info)
{
InvalidateCache(info.l1);
}
void AddEzcFunctions(PluginInfo & info);
} // namespace
void Init(PluginInfo & info)
{
using namespace Menu;
cache.SetDirs(&info.system->dirs);
plugin.Assign(WINIX_TEMPLATES_CREATEFUNCTIONS, AddEzcFunctions);
plugin.Assign(WINIX_ADD_MOUNTS, AddMountParams);
plugin.Assign(WINIX_FSTAB_CHANGED, FstabChanged);
// !! IMPROVE ME
// use modify parameter from a directory
// (not implemented yet)
plugin.Assign(WINIX_FILE_REMOVED, InvalidateCacheByPointerParent);
plugin.Assign(WINIX_DIR_ADDED, InvalidateCacheByPointerParent);
plugin.Assign(WINIX_DIR_PREPARE_TO_REMOVE, InvalidateCacheByPointerParent);
plugin.Assign(WINIX_DIR_REMOVED, InvalidateCacheById);
plugin.Assign(WINIX_FILE_ADDED, InvalidateCacheByPointerParent);
plugin.Assign(WINIX_FILE_CHANGED, InvalidateCacheByPointerParent);
plugin.Assign(WINIX_FILE_COPIED, InvalidateCacheByPointerParent);
plugin.Assign(WINIX_FILE_PREPARE_TO_MOVE, InvalidateCacheByPointerParent);
plugin.Assign(WINIX_FILE_MOVED, InvalidateCacheByPointerParent);
plugin.Assign(WINIX_DIR_CONTENT_SORTED, InvalidateCacheByPointer);
// !! IMPROVE ME
// we need a WINIX_DIR_CHANGED message
// for example when changing the subject of a directory
info.p1 = (void*)(plugin_name);
}