summaryrefslogtreecommitdiff
path: root/src/logging_filter_interpreter.cc
blob: 3d65ad6f21ae3e68336d07baf87eb26e79523934 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
// Copyright 2012 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "include/logging_filter_interpreter.h"

#include <errno.h>
#include <fcntl.h>
#include <string>

#include "include/file_util.h"
#include "include/logging.h"

namespace gestures {

LoggingFilterInterpreter::LoggingFilterInterpreter(PropRegistry* prop_reg,
                                                   Interpreter* next,
                                                   Tracer* tracer)
    : FilterInterpreter(prop_reg, next, tracer, true),
      event_debug_logging_enable_(prop_reg,
          "Event Debug Logging Components Enable", 0),
      event_logging_enable_(prop_reg, "Event Logging Enable", false),
      logging_notify_(prop_reg, "Logging Notify", 0),
      logging_reset_(prop_reg, "Logging Reset", 0),
      log_location_(prop_reg, "Log Path",
                    "/var/log/xorg/touchpad_activity_log.txt"),
      integrated_touchpad_(prop_reg, "Integrated Touchpad", false) {
  InitName();
  if (prop_reg && log_.get())
    prop_reg->set_activity_log(log_.get());
  event_debug_logging_enable_.SetDelegate(this);
  IntWasWritten(&event_debug_logging_enable_);
  event_logging_enable_.SetDelegate(this);
  BoolWasWritten(&event_logging_enable_);
  logging_notify_.SetDelegate(this);
  logging_reset_.SetDelegate(this);
}

void LoggingFilterInterpreter::IntWasWritten(IntProperty* prop) {
  if (prop == &logging_notify_)
    Dump(log_location_.val_);
  else if (prop == &logging_reset_)
    Clear();
  else if (prop == &event_debug_logging_enable_) {
    Log("Event Debug Enabled 0x%X", event_debug_logging_enable_.val_);
    SetEventDebugLoggingEnabled(event_debug_logging_enable_.val_);
  }
};

void LoggingFilterInterpreter::BoolWasWritten(BoolProperty* prop) {
  if (prop == &event_logging_enable_) {
    Log("Event logging %s",
        event_logging_enable_.val_ ? "enabled" : "disabled");
    SetEventLoggingEnabled(event_logging_enable_.val_);
  }
}

std::string LoggingFilterInterpreter::EncodeActivityLog() {
  return Encode();
}

void LoggingFilterInterpreter::Dump(const char* filename) {
  std::string data = Encode();
  WriteFile(filename, data.c_str(), data.size());
}
}  // namespace gestures