a575963da9
Former-commit-id: da6be194a6b1221998fc28233f2503bd61dd9d14
188 lines
4.6 KiB
C#
188 lines
4.6 KiB
C#
//
|
|
// BrowserCapsUpdater.cs: updates $prefix/etc/mono/browscap.ini file.
|
|
//
|
|
// Authors:
|
|
// Gonzalo Paniagua Javier (gonzalo@ximian.com)
|
|
//
|
|
// (C) 2003 Novell, Inc (http://www.novell.com)
|
|
//
|
|
|
|
using System;
|
|
using System.IO;
|
|
using System.Net;
|
|
using System.Reflection;
|
|
using System.Text;
|
|
|
|
namespace Mono.ASPNET
|
|
{
|
|
class Driver
|
|
{
|
|
static string GetFilePath ()
|
|
{
|
|
Type type = typeof (Environment);
|
|
MethodInfo method = type.GetMethod ("GetMachineConfigPath", BindingFlags.Static |
|
|
BindingFlags.NonPublic);
|
|
|
|
if (method == null) {
|
|
Console.WriteLine ("You need to run this under Mono runtime");
|
|
return null;
|
|
}
|
|
|
|
string path = (string) method.Invoke (null, null);
|
|
return Path.Combine (Path.GetDirectoryName (path), "browscap.ini");
|
|
}
|
|
|
|
static int Main (string [] args)
|
|
{
|
|
string path = GetFilePath ();
|
|
if (path == null)
|
|
return 1;
|
|
|
|
Updater updater = new Updater (path);
|
|
|
|
if (File.Exists (path)) {
|
|
bool uptodate;
|
|
Console.WriteLine (updater.GetLocalMessage (out uptodate));
|
|
if (uptodate)
|
|
return 0;
|
|
|
|
Console.WriteLine ("WARNING: your site may be blocked from updating if you abuse.");
|
|
Console.WriteLine ("You're encouraged to browse and understand " +
|
|
"http://browsers.GaryKeith.com/");
|
|
|
|
string r = "NO";
|
|
while (r != "YES") {
|
|
Console.Write ("Do you want to update your file now? (yes/NO) ");
|
|
r = Console.ReadLine ();
|
|
if (r == null)
|
|
r = "NO";
|
|
else
|
|
r = r.ToUpper ();
|
|
|
|
if (r == "NO")
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
try {
|
|
updater.Update ();
|
|
Console.WriteLine ("browscap.ini file provided by Gary J. Keith.");
|
|
} catch (Exception e) {
|
|
Console.Error.WriteLine ("Update failed.");
|
|
Console.Error.WriteLine ("Reason: {0}", e.Message);
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
class Updater
|
|
{
|
|
static string VersionUrl = "http://browsers.garykeith.com/version-number.asp";
|
|
static string BrowscapUrl = "http://browsers.garykeith.com/stream.asp?BrowsCapINI";
|
|
static string UserAgent = "Mono Browser Capabilities Updater 0.1";
|
|
|
|
string filename;
|
|
string tempfile;
|
|
string local;
|
|
int nupdates;
|
|
string date;
|
|
public Updater (string filename)
|
|
{
|
|
this.filename = filename;
|
|
}
|
|
|
|
public string GetLocalMessage (out bool upToDate)
|
|
{
|
|
StringBuilder sb = new StringBuilder ();
|
|
string localdate = null;
|
|
string remotedate = null;
|
|
using (StreamReader reader = new StreamReader (File.OpenRead (filename))) {
|
|
string str;
|
|
while ((str = reader.ReadLine ()) != null) {
|
|
if (str.StartsWith ("version="))
|
|
break;
|
|
}
|
|
|
|
if (str != null) {
|
|
localdate = str.Substring (8);
|
|
sb.AppendFormat ("Your file is dated {0}\r\n", localdate);
|
|
} else {
|
|
sb.AppendFormat ("Couldn't retrieve date from {0}\r\n", filename);
|
|
}
|
|
}
|
|
|
|
remotedate = GetRemoteDate ();
|
|
remotedate = remotedate.Replace ("AM ", "");
|
|
remotedate = remotedate.Replace ("PM ", "");
|
|
remotedate = remotedate.Replace ("/", "-");
|
|
sb.AppendFormat ("Remote file is dated {0}", remotedate);
|
|
upToDate = (remotedate == localdate);
|
|
if (upToDate)
|
|
sb.Append ("\r\nThe file IS up to date.");
|
|
|
|
return sb.ToString ();
|
|
}
|
|
|
|
static string GetRemoteDate ()
|
|
{
|
|
HttpWebRequest request = (HttpWebRequest) WebRequest.Create (VersionUrl);
|
|
request.UserAgent = UserAgent;
|
|
WebResponse resp = request.GetResponse ();
|
|
string str = new StreamReader (resp.GetResponseStream ()).ReadLine ();
|
|
resp.Close ();
|
|
return str;
|
|
}
|
|
|
|
public void Update ()
|
|
{
|
|
HttpWebRequest request = (HttpWebRequest) WebRequest.Create (BrowscapUrl);
|
|
request.UserAgent = UserAgent;
|
|
StreamWriter writer = null;
|
|
StreamReader reader = null;
|
|
Console.Write ("Connecting...");
|
|
WebResponse resp = request.GetResponse ();
|
|
string tmppath = null;
|
|
try {
|
|
tmppath = Path.GetTempFileName ();
|
|
reader = new StreamReader (resp.GetResponseStream ());
|
|
Console.WriteLine (" done");
|
|
writer = new StreamWriter (File.OpenWrite (tmppath));
|
|
Console.WriteLine ("Downloading data to {0}", tmppath);
|
|
string str;
|
|
while ((str = reader.ReadLine ()) != null) {
|
|
writer.WriteLine (str);
|
|
}
|
|
|
|
writer.Close ();
|
|
writer = null;
|
|
reader.Close ();
|
|
reader = null;
|
|
|
|
Console.WriteLine ("Removing old {0}", filename);
|
|
File.Delete (filename);
|
|
Console.WriteLine ("Copying {0} to {1}", tmppath, filename);
|
|
File.Copy (tmppath, filename);
|
|
} finally {
|
|
try {
|
|
File.Delete (tmppath);
|
|
} catch {}
|
|
|
|
if (writer != null) {
|
|
try {
|
|
writer.Close ();
|
|
} catch {}
|
|
}
|
|
|
|
if (reader != null) {
|
|
try {
|
|
reader.Close ();
|
|
} catch {}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|