summaryrefslogtreecommitdiff
path: root/SparkleLib/SparkleHelpers.cs
blob: 7b262d8082e32b7d740a0e72dc96f72eaed7e033 (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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
//   SparkleShare, a collaboration and sharing tool.
//   Copyright (C) 2010  Hylke Bons <hylkebons@gmail.com>
//
//   This program is free software: you can redistribute it and/or modify
//   it under the terms of the GNU General Public License as published by
//   the Free Software Foundation, either version 3 of the License, or
//   (at your option) any later version.
//
//   This program is distributed in the hope that it will be useful,
//   but WITHOUT ANY WARRANTY; without even the implied warranty of
//   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
//   GNU General Public License for more details.
//
//   You should have received a copy of the GNU General Public License
//   along with this program.  If not, see <http://www.gnu.org/licenses/>.


using System;
using System.IO;

namespace SparkleLib {
    
    public static class SparkleHelpers {

        private static object debug_lock = new object ();

        // Show debug info if needed
        public static void DebugInfo (string type, string message)
        {
            if (!message.StartsWith ("["))
                message = " " + message;

            string timestamp = DateTime.Now.ToString ("HH:mm:ss");
            string line      = timestamp + " " + "[" + type + "]" + message;

            if (SparkleConfig.DebugMode)
                Console.WriteLine (line);

            lock (debug_lock) {
                File.AppendAllText (
                    SparkleConfig.DefaultConfig.LogFilePath,
                    line + Environment.NewLine
                );
            }
        }


        // Makes it possible to combine more than
        // two paths at once
        public static string CombineMore (params string [] parts)
        {
            string new_path = "";

            foreach (string part in parts)
                new_path = Path.Combine (new_path, part);

            return new_path;
        }


        // Recursively sets access rights of a folder to 'Normal'
        public static void ClearAttributes (string path)
        {
            if (Directory.Exists (path)) {
                string [] folders = Directory .GetDirectories (path);

                foreach (string folder in folders)
                    ClearAttributes (folder);

                string [] files = Directory .GetFiles(path);

                foreach (string file in files)
                    if (!IsSymlink (file))
                        File.SetAttributes (file, FileAttributes.Normal);
            }
        }


        // Check if a file is a symbolic link
        public static bool IsSymlink (string file)
        {
            FileAttributes attr = File.GetAttributes (file);

            return ((attr & FileAttributes.ReparsePoint) == FileAttributes.ReparsePoint);
        }


        // Converts a UNIX timestamp to a more usable time object
        public static DateTime UnixTimestampToDateTime (int timestamp)
        {
            DateTime unix_epoch = new DateTime (1970, 1, 1, 0, 0, 0, 0);
            return unix_epoch.AddSeconds (timestamp);
        }


        // Gets the relative path of two hierarchical absolute paths	
        public static string DiffPaths (string target, string source)
        {
            return target.Replace (source + Path.DirectorySeparatorChar, "");      
        }
    }
}