~elementary-pantheon/pantheon-plugs/pantheon-plugs

« back to all changes in this revision

Viewing changes to plug/log.vala

  • Committer: Avi Romanoff
  • Date: 2011-05-09 20:52:03 UTC
  • Revision ID: aviromanoff@gmail.com-20110509205203-tfa40tnvw2oe3ep6
Initial setup

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
public class Log : Object{
 
2
 
 
3
    public enum Color{
 
4
        Black,
 
5
        DarkRed,
 
6
        DarkGreen,
 
7
        DarkYellow,
 
8
        DarkBlue,
 
9
        DarkMagenta,
 
10
        DarkCyan,
 
11
        Gray,
 
12
 
 
13
        // Light colors
 
14
        DarkGray,
 
15
        Red,
 
16
        Green,
 
17
        Yellow,
 
18
        Blue,
 
19
        Magenta,
 
20
        Cyan,
 
21
        White,
 
22
 
 
23
        // Reset sequence
 
24
        Reset
 
25
    }
 
26
 
 
27
    public static void log_handler (string? domain, LogLevelFlags lvl, string message) {
 
28
 
 
29
        if(!should_log(lvl))
 
30
            return;
 
31
        
 
32
        var output = preprocess(message);
 
33
        
 
34
        prelude(domain, lvl);
 
35
        
 
36
        stdout.printf(output);
 
37
 
 
38
        stdout.printf("\n");
 
39
    }
 
40
    
 
41
    private static string preprocess(string message) {
 
42
        string[] output;
 
43
        string[] strings = message.split(":");
 
44
        if(strings[0].length > 5)
 
45
        {
 
46
            if(strings[0].has_suffix(".vala"))
 
47
            {
 
48
                output = strings[2:strings.length];
 
49
                if(output[0].has_prefix(" "))
 
50
                    output[0] = output[0].strip();
 
51
            } else {
 
52
                output = strings;
 
53
            }
 
54
        } else {
 
55
            output = strings;
 
56
        }
 
57
        return string.joinv(":",output);
 
58
    }
 
59
 
 
60
    private static string get_color_code(Color color, bool foreground){
 
61
        var light = false;
 
62
        var color_id = 0;
 
63
        var reset = false;
 
64
 
 
65
        switch (color) {
 
66
            // Dark colors
 
67
            case Color.Black:        color_id = 0;                  break;
 
68
            case Color.DarkRed:      color_id = 1;                  break;
 
69
            case Color.DarkGreen:    color_id = 2;                  break;
 
70
            case Color.DarkYellow:   color_id = 3;                  break;
 
71
            case Color.DarkBlue:     color_id = 4;                  break;
 
72
            case Color.DarkMagenta:  color_id = 5;                  break;
 
73
            case Color.DarkCyan:     color_id = 6;                  break;
 
74
            case Color.Gray:         color_id = 7;                  break;
 
75
 
 
76
            // Light colors
 
77
            case Color.DarkGray:    color_id = 0; light = true;     break;
 
78
            case Color.Red:         color_id = 1; light = true;     break;
 
79
            case Color.Green:       color_id = 2; light = true;     break;
 
80
            case Color.Yellow:      color_id = 3; light = true;     break;
 
81
            case Color.Blue:        color_id = 4; light = true;     break;
 
82
            case Color.Magenta:     color_id = 5; light = true;     break;
 
83
            case Color.Cyan:        color_id = 6; light = true;     break;
 
84
            case Color.White:       color_id = 7; light = true;     break;
 
85
 
 
86
            // Reset sequence
 
87
            case Color.Reset:       reset = true;                   break;
 
88
        }
 
89
 
 
90
        if(reset)
 
91
            return "\x001b[0m";
 
92
 
 
93
        int code = color_id + (foreground ? 30 : 40) + (light ? 60 : 0);
 
94
        return "\x001b["+code.to_string()+"m";
 
95
    }
 
96
 
 
97
    private static void color(Color? foreground, Color? background = null){
 
98
        if(foreground != null)
 
99
            stdout.printf(get_color_code(foreground, true));
 
100
 
 
101
        if(background != null)
 
102
            stdout.printf(get_color_code(background, false));
 
103
    }
 
104
 
 
105
    private static void reset(){
 
106
        stdout.printf(get_color_code(Color.Reset, true));
 
107
    }
 
108
 
 
109
    protected static void prelude(string? domain, LogLevelFlags level){
 
110
        stdout.printf ("[%15.15s]", domain);
 
111
        
 
112
        string name = "";
 
113
        
 
114
        switch (level) {
 
115
            case LogLevelFlags.FLAG_RECURSION:
 
116
                color(Color.Red, Color.White);
 
117
                name = "Recursion";
 
118
                break;
 
119
            case LogLevelFlags.FLAG_FATAL:
 
120
                color(Color.Red, Color.White);
 
121
                name = "Fatal";
 
122
                break;
 
123
            case LogLevelFlags.LEVEL_CRITICAL:
 
124
                color(Color.Red, Color.White);
 
125
                name = "Critical";
 
126
                break;
 
127
            case LogLevelFlags.LEVEL_ERROR:
 
128
                color(Color.Yellow);
 
129
                name = "Error";
 
130
                break;
 
131
            case LogLevelFlags.LEVEL_WARNING:
 
132
                color(Color.Yellow);
 
133
                name = "Warning";
 
134
                break;
 
135
            case LogLevelFlags.LEVEL_MESSAGE:
 
136
                color(Color.DarkMagenta);
 
137
                name = "Message";
 
138
                break;
 
139
            case LogLevelFlags.LEVEL_INFO:
 
140
                color(Color.Blue);
 
141
                name = "Info";
 
142
                break;
 
143
            case LogLevelFlags.LEVEL_DEBUG:
 
144
                color(Color.Green);
 
145
                name = "Debug";
 
146
                break;
 
147
            case LogLevelFlags.LEVEL_MASK:
 
148
                color(Color.Green);
 
149
                name = "Mask";
 
150
                break;
 
151
            default:
 
152
                color(Color.Black, Color.DarkYellow);
 
153
                name = "undefined";
 
154
                break;
 
155
        }
 
156
 
 
157
        stdout.printf ("[%9s]", name);
 
158
        reset();
 
159
 
 
160
        stdout.printf(" ");
 
161
    }
 
162
 
 
163
    private static bool should_log(LogLevelFlags request_level){
 
164
//        switch (request_level) {
 
165
//            case Level.FATAL:
 
166
//                return true;
 
167
//            case Level.ERROR:
 
168
//                return true;
 
169
//            case Level.WARN:
 
170
//                return true;
 
171
//            case Level.NOTIFY:
 
172
//                return true;
 
173
//            case Level.INFO:
 
174
//                return true;
 
175
//            case Level.DEBUG:
 
176
//                return true;
 
177
//            case Level.UNDEFINED:
 
178
//                return true;
 
179
//        }
 
180
 
 
181
//        return false;
 
182
 
 
183
        return true;//request_level <= level;
 
184
    }
 
185
}
 
186