~codygarver/switchboard/fix-1031195

« back to all changes in this revision

Viewing changes to log.vala

  • Committer: Avi Romanoff
  • Date: 2011-06-23 05:26:15 UTC
  • Revision ID: avi@elementaryos.org-20110623052615-vd2nmnbcitrjrnml
Make consts all caps, move source into it's own directory, utilize constants more, bump version

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