Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/xamarin/macdoc.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'AppleDocHandler.cs')
-rw-r--r--AppleDocHandler.cs154
1 files changed, 0 insertions, 154 deletions
diff --git a/AppleDocHandler.cs b/AppleDocHandler.cs
deleted file mode 100644
index 4917cb2..0000000
--- a/AppleDocHandler.cs
+++ /dev/null
@@ -1,154 +0,0 @@
-using System;
-using System.IO;
-using System.Net;
-using System.Linq;
-using System.Threading;
-using System.Xml.Linq;
-using System.Collections.Generic;
-
-namespace macdoc
-{
- public class AppleDocHandler
- {
- public class AppleDocInformation
- {
- public Version Version { get; set; }
- public string ID { get; set; }
- public DateTime UpdateDate { get; set; }
- public string DownloadUrl { get; set; }
- }
-
- readonly string[] searchPaths = new[] {
- "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Documentation/DocSets",
- "/Applications/Xcode.app/Contents/Developer/Documentation/DocSets/",
- "/Library/Developer/Shared/Documentation/DocSets/",
- "/Developer/Platforms/iPhoneOS.platform/Developer/Documentation/DocSets/"
- };
- const string MonodocLibPath = "/Library/Frameworks/Mono.framework/External/monodoc/";
- const string MonoTouchLibPath = "/Developer/MonoTouch/usr/lib/mono/2.1/monotouch.dll";
-
- public const string Ios5AtomFeed = "https://developer.apple.com/rss/com.apple.adc.documentation.AppleiPhone5_0.atom";
- public const string Ios6AtomFeed = "https://developer.apple.com/rss/com.apple.adc.documentation.AppleiPhone6.0.atom";
- public const string MacLionAtomFeed = "http://developer.apple.com/rss/com.apple.adc.documentation.AppleLion.atom";
- public const string MacMountainLionFeed = "https://developer.apple.com/rss/com.apple.adc.documentation.AppleOSX10_8.atom";
-
- readonly XNamespace docsetNamespace = "http://developer.apple.com/rss/docset_extensions";
- readonly XNamespace atomNamespace = "http://www.w3.org/2005/Atom";
- readonly string baseApplicationPath;
-
- Dictionary<string, XDocument> appleFeeds = new Dictionary<string, XDocument> ();
-
- public AppleDocHandler (string baseApplicationPath)
- {
- this.baseApplicationPath = baseApplicationPath;
- }
-
- // We load the atom field that contains a timeline of the modifications down to documentation by Apple
- XDocument LoadAppleFeed (string feedUrl)
- {
- XDocument appleFeed;
- if (appleFeeds.TryGetValue (feedUrl, out appleFeed))
- return appleFeed;
-
- WebClient wc = new WebClient ();
- var feed = wc.DownloadString (feedUrl);
- return appleFeeds[feedUrl] = XDocument.Parse (feed);
- }
-
- // This method transforms the Atom XML data into a POCO for the the most recent item of the feed
- AppleDocInformation GetLatestAppleDocInformation (XDocument feed)
- {
- var latestEntry = feed.Descendants (atomNamespace + "entry").FirstOrDefault ();
- if (latestEntry == null)
- return null;
-
- var infos = new AppleDocInformation () {
- Version = CloneFillWithZeros (new Version (latestEntry.Element (docsetNamespace + "version").Value)),
- ID = latestEntry.Element (docsetNamespace + "identifier").Value,
- UpdateDate = DateTime.Parse (latestEntry.Element (atomNamespace + "updated").Value),
- DownloadUrl = latestEntry.Element (atomNamespace + "link").Attribute ("href").Value
- };
-
- return infos;
- }
-
- // This method read the Info.plist available in all Apple .docset to get the version of the bundle
- Version GetAppleDocVersion (string directory)
- {
- var plist = Path.Combine (directory, "Contents", "Info.plist");
- if (!File.Exists (plist))
- return null;
-
- var doc = XDocument.Load (plist);
- var version = doc.Descendants ("key")
- .First (k => k.Value.Equals ("CFBundleVersion", StringComparison.Ordinal))
- .ElementsAfterSelf ()
- .First ()
- .Value;
-
- return CloneFillWithZeros (new Version (version));
- }
-
- // This method checks that an iOS documentation set is installed on the user machine
- // and also checks if it's the latest available
- bool CheckAppleDocAvailabilityAndFreshness (AppleDocInformation infos)
- {
- var path = searchPaths
- .Select (p => Path.Combine (p, infos.ID + ".docset"))
- .FirstOrDefault (p => Directory.Exists (p));
-
- if (path == null)
- return false;
-
- var installedVersion = GetAppleDocVersion (path);
- Logger.Log ("Installed doc version {0}, compared to remote {1}", installedVersion.ToString (), infos.Version.ToString ());
- return installedVersion >= infos.Version;
- }
-
- // atom feed is one of the Apple documentation feed, iOS and Lion are given in const form above
- // returns true if the documentation was updated, false otherwise. The progressDelegate parameter
- // is given the completion percentage
- public bool CheckAppleDocFreshness (string atomFeed, out AppleDocInformation infos)
- {
- Logger.Log ("Downloading Apple feed at {0}", atomFeed);
- var feed = LoadAppleFeed (atomFeed);
- infos = GetLatestAppleDocInformation (feed);
- var needRefresh = !CheckAppleDocAvailabilityAndFreshness (infos);
-
- return needRefresh;
- }
-
- public bool CheckMergedDocumentationFreshness (AppleDocInformation infos, Product product)
- {
- var statusFile = Path.Combine (baseApplicationPath, "macdoc");
- if (!Directory.Exists (statusFile)) {
- try {
- Directory.CreateDirectory (statusFile);
- } catch {}
- return true;
- }
- statusFile = Path.Combine (statusFile, product == Product.MonoMac ? "merge.mac.status" : "merge.status");
- if (!File.Exists (statusFile))
- return true;
- if (!string.IsNullOrEmpty (Environment.GetEnvironmentVariable ("APPLEDOCWIZARD_FORCE_MERGE")))
- return true;
-
- var mergedVersion = CloneFillWithZeros (new Version (File.ReadAllText (statusFile)));
- Logger.Log ("Comparing merged {0} with downloaded {1}", mergedVersion.ToString (), infos.Version.ToString ());
- return mergedVersion != infos.Version;
- }
-
- static Version CloneFillWithZeros (Version v)
- {
- if (v == null)
- return null;
- int major = v.Major == -1 ? 0 : v.Major;
- int minor = v.Minor == -1 ? 0 : v.Minor;
- int build = v.Build == -1 ? 0 : v.Build;
- int revision = v.Revision == -1 ? 0 : v.Revision;
-
- return new Version (major, minor, build, revision);
- }
-
- }
-}