public static ExternalContentType GetTypeFromLink(string address)
 {
     try
     {
         return(ExternalContentManager.ExtensionToType(Storage.GetExtension(UnclutterLink(address))));
     }
     catch (Exception)
     {
         return(ExternalContentType.Unknown);
     }
 }
Exemplo n.º 2
0
 public static void UnpackWorld(string directoryName, Stream sourceStream, bool importEmbeddedExternalContent)
 {
     if (!Storage.DirectoryExists(directoryName))
     {
         throw new InvalidOperationException($"Cannot import world into \"{directoryName}\" because this directory does not exist.");
     }
     using (ZipArchive zipArchive = ZipArchive.Open(sourceStream, keepStreamOpen: true))
     {
         foreach (ZipArchiveEntry item in zipArchive.ReadCentralDir())
         {
             string text      = item.FilenameInZip.Replace('\\', '/');
             string extension = Storage.GetExtension(text);
             if (text.StartsWith("EmbeddedContent"))
             {
                 try
                 {
                     if (importEmbeddedExternalContent)
                     {
                         MemoryStream memoryStream = new MemoryStream();
                         zipArchive.ExtractFile(item, memoryStream);
                         memoryStream.Position = 0L;
                         ExternalContentType type = ExternalContentManager.ExtensionToType(extension);
                         ExternalContentManager.ImportExternalContentSync(memoryStream, type, Storage.GetFileNameWithoutExtension(text));
                     }
                 }
                 catch (Exception ex)
                 {
                     Log.Warning($"Failed to import embedded content \"{text}\". Reason: {ex.Message}");
                 }
             }
             else
             {
                 using (Stream stream = Storage.OpenFile(Storage.CombinePaths(directoryName, Storage.GetFileName(text)), OpenFileMode.Create))
                 {
                     zipArchive.ExtractFile(item, stream);
                 }
             }
         }
     }
 }
Exemplo n.º 3
0
        internal static ExternalContentEntry JsonObjectToEntry(JsonObject jsonObject)
        {
            ExternalContentEntry externalContentEntry = new ExternalContentEntry();

            if (jsonObject.ContainsKey("entries"))
            {
                foreach (JsonObject item in (JsonArray)jsonObject["entries"])
                {
                    ExternalContentEntry externalContentEntry2 = new ExternalContentEntry();
                    externalContentEntry2.Path = item["path_display"].ToString();
                    externalContentEntry2.Type = ((item[".tag"].ToString() == "folder") ? ExternalContentType.Directory : ExternalContentManager.ExtensionToType(Storage.GetExtension(externalContentEntry2.Path)));
                    if (externalContentEntry2.Type != ExternalContentType.Directory)
                    {
                        externalContentEntry2.Time = (item.ContainsKey("server_modified") ? DateTime.Parse(item["server_modified"].ToString(), CultureInfo.InvariantCulture) : new DateTime(2000, 1, 1));
                        externalContentEntry2.Size = (item.ContainsKey("size") ? ((long)item["size"]) : 0);
                    }
                    externalContentEntry.ChildEntries.Add(externalContentEntry2);
                }
                return(externalContentEntry);
            }
            return(externalContentEntry);
        }
Exemplo n.º 4
0
        public override void Update()
        {
            if (m_listDirty)
            {
                m_listDirty = false;
                UpdateList();
            }
            ExternalContentEntry externalContentEntry = null;

            if (m_directoryList.SelectedIndex.HasValue)
            {
                externalContentEntry = (m_directoryList.Items[m_directoryList.SelectedIndex.Value] as ExternalContentEntry);
            }
            if (externalContentEntry != null)
            {
                m_actionButton.IsVisible = true;
                if (externalContentEntry.Type == ExternalContentType.Directory)
                {
                    m_actionButton.Text        = LanguageControl.Get(fName, 1);
                    m_actionButton.IsEnabled   = true;
                    m_copyLinkButton.IsEnabled = false;
                }
                else
                {
                    m_actionButton.Text = LanguageControl.Get(fName, 2);
                    if (ExternalContentManager.IsEntryTypeDownloadSupported(ExternalContentManager.ExtensionToType(Storage.GetExtension(externalContentEntry.Path).ToLower())))
                    {
                        m_actionButton.IsEnabled   = true;
                        m_copyLinkButton.IsEnabled = true;
                    }
                    else
                    {
                        m_actionButton.IsEnabled   = false;
                        m_copyLinkButton.IsEnabled = false;
                    }
                }
            }
            else
            {
                m_actionButton.IsVisible   = false;
                m_copyLinkButton.IsVisible = false;
            }
            m_directoryLabel.Text         = m_externalContentProvider.IsLoggedIn ? string.Format(LanguageControl.Get(fName, 3), m_path) : LanguageControl.Get(fName, 4);
            m_providerNameLabel.Text      = m_externalContentProvider.DisplayName;
            m_upDirectoryButton.IsEnabled = (m_externalContentProvider.IsLoggedIn && m_path != "/");
            m_loginLogoutButton.Text      = (m_externalContentProvider.IsLoggedIn ? LanguageControl.Get(fName, 5) : LanguageControl.Get(fName, 6));
            m_loginLogoutButton.IsVisible = m_externalContentProvider.RequiresLogin;
            m_copyLinkButton.IsVisible    = m_externalContentProvider.SupportsLinks;
            m_copyLinkButton.IsEnabled    = (externalContentEntry != null && ExternalContentManager.IsEntryTypeDownloadSupported(externalContentEntry.Type));
            if (m_changeProviderButton.IsClicked)
            {
                DialogsManager.ShowDialog(null, new SelectExternalContentProviderDialog(LanguageControl.Get(fName, 7), listingSupportRequired : true, delegate(IExternalContentProvider provider)
                {
                    m_externalContentProvider = provider;
                    m_listDirty = true;
                    SetPath(null);
                }));
            }
            if (m_upDirectoryButton.IsClicked)
            {
                string directoryName = Storage.GetDirectoryName(m_path);
                SetPath(directoryName);
            }
            if (m_actionButton.IsClicked && externalContentEntry != null)
            {
                if (externalContentEntry.Type == ExternalContentType.Directory)
                {
                    SetPath(externalContentEntry.Path);
                }
                else
                {
                    DownloadEntry(externalContentEntry);
                }
            }
            if (m_copyLinkButton.IsClicked && externalContentEntry != null && ExternalContentManager.IsEntryTypeDownloadSupported(externalContentEntry.Type))
            {
                CancellableBusyDialog busyDialog = new CancellableBusyDialog(LanguageControl.Get(fName, 8), autoHideOnCancel: false);
                DialogsManager.ShowDialog(null, busyDialog);
                m_externalContentProvider.Link(externalContentEntry.Path, busyDialog.Progress, delegate(string link)
                {
                    DialogsManager.HideDialog(busyDialog);
                    DialogsManager.ShowDialog(null, new ExternalContentLinkDialog(link));
                }, delegate(Exception error)
                {
                    DialogsManager.HideDialog(busyDialog);
                    DialogsManager.ShowDialog(null, new MessageDialog(LanguageControl.Get("Usual", "error"), error.Message, LanguageControl.Get("Usual", "ok"), null, null));
                });
            }
            if (m_loginLogoutButton.IsClicked)
            {
                if (m_externalContentProvider.IsLoggedIn)
                {
                    m_externalContentProvider.Logout();
                    SetPath(null);
                    m_listDirty = true;
                }
                else
                {
                    ExternalContentManager.ShowLoginUiIfNeeded(m_externalContentProvider, showWarningDialog: false, delegate
                    {
                        SetPath(null);
                        m_listDirty = true;
                    });
                }
            }
            if (base.Input.Back || base.Input.Cancel || Children.Find <ButtonWidget>("TopBar.Back").IsClicked)
            {
                ScreensManager.SwitchScreen("Content");
            }
        }