" <arg name='files' type='v' direction='out'/>\n"
" </method>\n"
+ " <method name='GetDiff'>\n"
+ " <arg name='config-name' type='s' direction='in'/>\n"
+ " <arg name='number1' type='u' direction='in'/>\n"
+ " <arg name='number2' type='u' direction='in'/>\n"
+ " <arg name='filename' type='s' direction='in'/>\n"
+ " <arg name='options' type='s' direction='in'/>\n"
+ " <arg name='diff' type='v' direction='out'/>\n"
+ " </method>\n"
+
" <method name='SetUndo'>\n"
" <arg name='config-name' type='s' direction='in'/>\n"
" <arg name='number1' type='u' direction='in'/>\n"
" <arg name='files' type='a(sb)' direction='in'/>\n"
" </method>\n"
- " <method name='GetDiff'>\n"
+ " <method name='SetUndoAll'>\n"
" <arg name='config-name' type='s' direction='in'/>\n"
" <arg name='number1' type='u' direction='in'/>\n"
" <arg name='number2' type='u' direction='in'/>\n"
- " <arg name='filename' type='s' direction='in'/>\n"
- " <arg name='options' type='s' direction='in'/>\n"
- " <arg name='diff' type='v' direction='out'/>\n"
+ " <arg name='undo' type='b' direction='in'/>\n"
+ " </method>\n"
+
+ " <method name='GetUndoStatistic'>\n"
+ " <arg name='config-name' type='s' direction='in'/>\n"
+ " <arg name='number1' type='u' direction='in'/>\n"
+ " <arg name='number2' type='u' direction='in'/>\n"
+ " <arg name='number-create' type='u' direction='out'/>\n"
+ " <arg name='number-modify' type='u' direction='out'/>\n"
+ " <arg name='number-delete' type='u' direction='out'/>\n"
+ " </method>\n"
+
+ " <method name='Cleanup'>\n"
+ " <arg name='config-name' type='s' direction='in'/>\n"
+ " <arg name='algorithm' type='s' direction='in'/>\n"
" </method>\n"
" </interface>\n"
reply_to_command_delete_config(DBus::Connection& conn, DBus::Message& msg)
{
string config_name;
- string subvolume;
DBus::Hihi hihi(msg);
- hihi >> config_name >> subvolume;
+ hihi >> config_name;
y2mil("DeleteConfig config_name:" << config_name);
it->add_lock(config_name);
DBus::MessageMethodReturn reply(msg);
+
conn.send(reply);
}
it->remove_lock(config_name);
DBus::MessageMethodReturn reply(msg);
+
conn.send(reply);
}
check_permission(conn, msg, config_name);
- DBus::MessageMethodReturn reply(msg);
-
Snapper* snapper = getSnapper(config_name);
+ DBus::MessageMethodReturn reply(msg);
+
DBus::Hoho hoho(reply);
hoho << snapper->getSnapshots();
check_permission(conn, msg, config_name);
- DBus::MessageMethodReturn reply(msg);
-
Snapper* snapper = getSnapper(config_name);
Snapshots::iterator snap1 = snapper->createSingleSnapshot(description);
snap1->setUserdata(userdata);
snap1->flushInfo();
+ DBus::MessageMethodReturn reply(msg);
+
DBus::Hoho hoho(reply);
hoho << snap1->getNum();
check_permission(conn, msg, config_name);
- DBus::MessageMethodReturn reply(msg);
-
Snapper* snapper = getSnapper(config_name);
Snapshots::iterator snap1 = snapper->createPreSnapshot(description);
snap1->setUserdata(userdata);
snap1->flushInfo();
+ DBus::MessageMethodReturn reply(msg);
+
DBus::Hoho hoho(reply);
hoho << snap1->getNum();
check_permission(conn, msg, config_name);
- DBus::MessageMethodReturn reply(msg);
-
Snapper* snapper = getSnapper(config_name);
Snapshots& snapshots = snapper->getSnapshots();
snap2->setUserdata(userdata);
snap2->flushInfo();
+ DBus::MessageMethodReturn reply(msg);
+
DBus::Hoho hoho(reply);
hoho << snap2->getNum();
string sender = msg.get_sender();
- DBus::MessageMethodReturn reply(msg);
-
Clients::iterator it = clients.find(sender);
assert(it != clients.end());
const Files& files = comparison->getFiles();
+ DBus::MessageMethodReturn reply(msg);
+
DBus::Hoho hoho(reply);
hoho << files;
}
+void
+reply_to_command_get_diff(DBus::Connection& conn, DBus::Message& msg)
+{
+ string config_name;
+ dbus_uint32_t num1, num2;
+ string filename;
+ string options;
+
+ DBus::Hihi hihi(msg);
+ hihi >> config_name >> num1 >> num2 >> filename >> options;
+
+ y2mil("GetDiff config_name:" << config_name << " num1:" << num1 << " num2:" <<
+ num2 << " filename:" << filename << " options:" << options);
+
+ check_permission(conn, msg, config_name);
+
+ string sender = msg.get_sender();
+
+ Clients::iterator it = clients.find(sender);
+ assert(it != clients.end());
+
+ Comparison* comparison = it->find_comparison(config_name, num1, num2);
+
+ Files& files = comparison->getFiles();
+
+ Files::iterator it3 = files.find(filename);
+ assert(it3 != files.end());
+
+ vector<string> d = it3->getDiff(options);
+
+ DBus::MessageMethodReturn reply(msg);
+
+ DBus::Hoho hoho(reply);
+ hoho << d;
+
+ conn.send(reply);
+}
+
+
void
reply_to_command_set_undo(DBus::Connection& conn, DBus::Message& msg)
{
string config_name;
dbus_uint32_t num1, num2;
- list<Undo> u;
+ list<Undo> undos;
DBus::Hihi hihi(msg);
- hihi >> config_name >> num1 >> num2 >> u;
+ hihi >> config_name >> num1 >> num2 >> undos;
check_permission(conn, msg, config_name);
string sender = msg.get_sender();
- DBus::MessageMethodReturn reply(msg);
-
Clients::iterator it = clients.find(sender);
assert(it != clients.end());
Files& files = comparison->getFiles();
- for (list<Undo>::const_iterator it2 = u.begin(); it2 != u.end(); ++it2)
+ for (list<Undo>::const_iterator it2 = undos.begin(); it2 != undos.end(); ++it2)
{
Files::iterator it3 = files.find(it2->filename);
if (it3 != files.end())
it3->setUndo(it2->undo);
}
+ DBus::MessageMethodReturn reply(msg);
+
conn.send(reply);
}
void
-reply_to_command_get_diff(DBus::Connection& conn, DBus::Message& msg)
+reply_to_command_set_undo_all(DBus::Connection& conn, DBus::Message& msg)
{
string config_name;
dbus_uint32_t num1, num2;
- string filename;
- string options;
+ bool undo;
DBus::Hihi hihi(msg);
- hihi >> config_name >> num1 >> num2 >> filename >> options;
-
- y2mil("GetDiff config_name:" << config_name << " num1:" << num1 << " num2:" <<
- num2 << " filename:" << filename << " options:" << options);
+ hihi >> config_name >> num1 >> num2 >> undo;
check_permission(conn, msg, config_name);
+ y2mil("SetUndoAll config_name:" << config_name << " num1:" << num1 << " num2:" <<
+ num2);
+
string sender = msg.get_sender();
Clients::iterator it = clients.find(sender);
Files& files = comparison->getFiles();
- Files::iterator it3 = files.find(filename);
- assert(it3 != files.end());
+ for (Files::iterator it2 = files.begin(); it2 != files.end(); ++it2)
+ {
+ it2->setUndo(undo);
+ }
- vector<string> d = it3->getDiff(options);
+ DBus::MessageMethodReturn reply(msg);
+
+ conn.send(reply);
+}
+
+
+void
+reply_to_command_get_undo_statistics(DBus::Connection& conn, DBus::Message& msg)
+{
+ string config_name;
+ dbus_uint32_t num1, num2;
+
+ DBus::Hihi hihi(msg);
+ hihi >> config_name >> num1 >> num2;
+
+ check_permission(conn, msg, config_name);
+
+ y2mil("GetUndoStatistic config_name:" << config_name << " num1:" << num1 << " num2:" <<
+ num2);
+
+ string sender = msg.get_sender();
+
+ Clients::iterator it = clients.find(sender);
+ assert(it != clients.end());
+
+ Comparison* comparison = it->find_comparison(config_name, num1, num2);
+
+ UndoStatistic statistic = comparison->getUndoStatistic();
DBus::MessageMethodReturn reply(msg);
+
DBus::Hoho hoho(reply);
- hoho << d;
+ hoho << statistic.numCreate << statistic.numModify << statistic.numDelete;
+
+ conn.send(reply);
+}
+
+
+void
+reply_to_command_cleanup(DBus::Connection& conn, DBus::Message& msg)
+{
+ string config_name;
+ string algorithm;
+
+ DBus::Hihi hihi(msg);
+ hihi >> config_name >> algorithm;
+
+ y2mil("GetDiff config_name:" << config_name << " algorithm:" << algorithm);
+
+ check_permission(conn, msg, config_name);
+
+ Snapper* snapper = getSnapper(config_name);
+
+ // TODO: at least the last algorithm must be in a seperate thread
+
+ if (algorithm == "number")
+ {
+ snapper->doCleanupNumber();
+ }
+ else if (algorithm == "timeline")
+ {
+ snapper->doCleanupTimeline();
+ }
+ else if (algorithm == "empty-pre-post")
+ {
+ snapper->doCleanupEmptyPrePost();
+ }
+
+ DBus::MessageMethodReturn reply(msg);
conn.send(reply);
}
{
try
{
- if (msg.is_method_call(INTERFACE, "Debug"))
- reply_to_command_debug(conn, msg);
- else if (msg.is_method_call(INTERFACE, "ListConfigs"))
+ if (msg.is_method_call(INTERFACE, "ListConfigs"))
reply_to_command_list_configs(conn, msg);
else if (msg.is_method_call(INTERFACE, "CreateConfig"))
reply_to_command_create_config(conn, msg);
reply_to_command_create_comparison(conn, msg);
else if (msg.is_method_call(INTERFACE, "GetFiles"))
reply_to_command_get_files(conn, msg);
- else if (msg.is_method_call(INTERFACE, "SetUndo"))
- reply_to_command_set_undo(conn, msg);
else if (msg.is_method_call(INTERFACE, "GetDiff"))
reply_to_command_get_diff(conn, msg);
+ else if (msg.is_method_call(INTERFACE, "SetUndo"))
+ reply_to_command_set_undo(conn, msg);
+ else if (msg.is_method_call(INTERFACE, "SetUndoAll"))
+ reply_to_command_set_undo_all(conn, msg);
+ else if (msg.is_method_call(INTERFACE, "GetUndoStatistic"))
+ reply_to_command_get_undo_statistics(conn, msg);
+ else if (msg.is_method_call(INTERFACE, "Cleanup"))
+ reply_to_command_cleanup(conn, msg);
+ else if (msg.is_method_call(INTERFACE, "Debug"))
+ reply_to_command_debug(conn, msg);
+ else
+ {
+ DBus::MessageError reply(msg, "error.unknown", DBUS_ERROR_FAILED);
+ conn.send(reply);
+ }
}
catch (const DBus::MarshallingException& e)
{