Ejemplo n.º 1
0
        public void getFonts(FontAsyncCallback callback)
        {
            Logger.log(Logger.TYPE.DEBUG, "Getting fonts...");

            var root = from item in serverXMLCache.get().Descendants("Server")
                select new {
                    fonts = item.Descendants("Font")
                };

            List<FontPackage> packages = new List<FontPackage>();
            foreach (var data in root) {
                foreach (var f in data.fonts) {
                    packages.Add(new FontPackage(f));
                }
            }

            List<String> installedFonts = new List<String>();

            String fontCachePath = client.getFontCacheDir();
            String tmpFontPath = Path.Combine(fontCachePath, "tmpfonts");
            if (!Directory.Exists(fontCachePath)) {
                Directory.CreateDirectory(fontCachePath);
                Directory.CreateDirectory(tmpFontPath);
            }
            else {
                if (!Directory.Exists(tmpFontPath)) {
                    Directory.CreateDirectory(tmpFontPath);
                }
                // Preload already existing fonts
                installedFonts = installPrivateFonts(fontCachePath);
            }

            if (packages.Count > 0) {
                // Download font packages
                foreach (FontPackage package in packages) {
                    if (!FontHandler.doesFontExist(package.getName(), true, true)) {
                        if (package.canDownload()) {
                            Uri packageUrl = new Uri(getUrl() + "/" + package.getPackage());
                            dlHandler.enqueueFile(packageUrl, tmpFontPath,
                                package.getArchiveName(), (Boolean cancelled) => {
                                if (!cancelled) {
                                    ArchiveHandler.extractZip(Path.Combine(tmpFontPath,
                                        package.getArchiveName()), tmpFontPath, false);
                                }
                            });
                        }
                    }
                    else {
                        package.setInstalled(true);
                    }
                }

                dlHandler.setQueueFileCallback(new QueueCallback(() => {
                    installedFonts.AddRange(installPrivateFonts(tmpFontPath));

                    // Finished installing new fonts, now cache them
                    cacheFonts(tmpFontPath);

                    // Apply new fonts to the packages
                    foreach (FontPackage package in packages) {
                        if (FontHandler.doesPrivateFontExist(package.getName(), true)) {
                            package.setInstalled(true); // Ensure package is now installed

                            foreach (KeyValuePair<String, FontApply> pair in package.getApplyMap()) {
                                FontApply fontApply = pair.Value;
                                fontApply.usePrivateFont(package.getName());
                            }
                        }
                    }

                    callback.onSuccess(packages);
                }));

                dlHandler.startFileQueue();
            }
            else {
                callback.onSuccess(packages);
            }
        }
Ejemplo n.º 2
0
        public void getFonts(FontAsyncCallback callback)
        {
            Logger.log(Logger.TYPE.DEBUG, "Getting fonts...");

            var root = from item in serverXMLCache.get().Descendants("Server")
                       select new {
                fonts = item.Descendants("Font")
            };

            List <FontPackage> packages = new List <FontPackage>();

            foreach (var data in root)
            {
                foreach (var f in data.fonts)
                {
                    packages.Add(new FontPackage(f));
                }
            }

            List <String> installedFonts = new List <String>();

            String fontCachePath = client.getFontCacheDir();
            String tmpFontPath   = Path.Combine(fontCachePath, "tmpfonts");

            if (!Directory.Exists(fontCachePath))
            {
                Directory.CreateDirectory(fontCachePath);
                Directory.CreateDirectory(tmpFontPath);
            }
            else
            {
                if (!Directory.Exists(tmpFontPath))
                {
                    Directory.CreateDirectory(tmpFontPath);
                }
                // Preload already existing fonts
                installedFonts = installPrivateFonts(fontCachePath);
            }

            if (packages.Count > 0)
            {
                // Download font packages
                foreach (FontPackage package in packages)
                {
                    if (!FontHandler.doesFontExist(package.getName(), true, true))
                    {
                        if (package.canDownload())
                        {
                            Uri packageUrl = new Uri(getUrl() + "/" + package.getPackage());
                            dlHandler.enqueueFile(packageUrl, tmpFontPath,
                                                  package.getArchiveName(), (Boolean cancelled) => {
                                if (!cancelled)
                                {
                                    ArchiveHandler.extractZip(Path.Combine(tmpFontPath,
                                                                           package.getArchiveName()), tmpFontPath, false);
                                }
                            });
                        }
                    }
                    else
                    {
                        package.setInstalled(true);
                    }
                }

                dlHandler.setQueueFileCallback(new QueueCallback(() => {
                    installedFonts.AddRange(installPrivateFonts(tmpFontPath));

                    // Finished installing new fonts, now cache them
                    cacheFonts(tmpFontPath);

                    // Apply new fonts to the packages
                    foreach (FontPackage package in packages)
                    {
                        if (FontHandler.doesPrivateFontExist(package.getName(), true))
                        {
                            package.setInstalled(true); // Ensure package is now installed

                            foreach (KeyValuePair <String, FontApply> pair in package.getApplyMap())
                            {
                                FontApply fontApply = pair.Value;
                                fontApply.usePrivateFont(package.getName());
                            }
                        }
                    }

                    callback.onSuccess(packages);
                }));

                dlHandler.startFileQueue();
            }
            else
            {
                callback.onSuccess(packages);
            }
        }