// SparkleShare, a collaboration and sharing tool. // Copyright (C) 2010 Hylke Bons // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser 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 . using System; using System.IO; using System.Security.Cryptography; using System.Text; namespace SparkleLib { public static class Extensions { public static string Combine (this string [] parts) { string new_path = ""; foreach (string part in parts) new_path = Path.Combine (new_path, part); return new_path; } public static string SHA1 (this string s) { SHA1 sha1 = new SHA1CryptoServiceProvider (); byte [] bytes = ASCIIEncoding.Default.GetBytes (s); byte [] sha1_bytes = sha1.ComputeHash (bytes); return BitConverter.ToString (sha1_bytes).ToLower ().Replace ("-", ""); } public static string MD5 (this string s) { MD5 md5 = new MD5CryptoServiceProvider (); byte [] bytes = ASCIIEncoding.Default.GetBytes (s); byte [] md5_bytes = md5.ComputeHash (bytes); return BitConverter.ToString (md5_bytes).ToLower ().Replace ("-", ""); } // Format a file size nicely with small caps. // Example: 1048576 becomes "1 ᴍʙ" public static string ToSize (this double byte_count) { if (byte_count >= 1099511627776) return String.Format ("{0:##.##} ᴛʙ", Math.Round (byte_count / 1099511627776, 2)); else if (byte_count >= 1073741824) return String.Format ("{0:##.##} ɢʙ", Math.Round (byte_count / 1073741824, 1)); else if (byte_count >= 1048576) return String.Format ("{0:##.##} ᴍʙ", Math.Round (byte_count / 1048576, 1)); else if (byte_count >= 1024) return String.Format ("{0:##.##} ᴋʙ", Math.Round (byte_count / 1024, 0)); else return byte_count.ToString () + " ʙ"; } public static bool IsSymlink (this FileSystemInfo file) { return ((file.Attributes & FileAttributes.ReparsePoint) == FileAttributes.ReparsePoint); } public static string ToPrettyDate (this DateTime timestamp) { TimeSpan time_diff = DateTime.Now.Subtract(timestamp); int day_diff = (int) time_diff.TotalDays; if (day_diff == 0) { return "at " + timestamp.ToString ("HH:mm"); } else if (day_diff == 1) { return "yesterday at " + timestamp.ToString ("HH:mm"); } else if (day_diff < 7) { return timestamp.ToString ("dddd"); } else if (day_diff < 31) { if (day_diff < 14) return "last week"; else return string.Format ("{0} weeks ago", Math.Ceiling ((double) day_diff / 7)); } else if (day_diff < 62) { return "last month"; } else { return string.Format ("{0} months ago", Math.Ceiling ((double) day_diff / 31)); } } } }