public async Task StartDirectoryListing()
        {
            var client = await ClientService.GetClient();

            if (client == null)
            {
                return;
            }

            _continueListing = true;

            var path = PathStack.Count > 0 ? PathStack[PathStack.Count - 1].ResourceInfo.Path : "/";
            List <ResourceInfo> list = null;

            try
            {
                list = await client.List(path);
            }
            catch (ResponseError e)
            {
                ResponseErrorHandlerService.HandleException(e);
            }

            FilesAndFolders.Clear();
            Folders.Clear();
            if (list != null)
            {
                foreach (var item in list)
                {
                    FilesAndFolders.Add(new FileOrFolder(item));
                    if (item.IsDirectory())
                    {
                        Folders.Add(new FileOrFolder(item));
                    }
                }
            }

            switch (SettingsService.Instance.LocalSettings.PreviewImageDownloadMode)
            {
            case PreviewImageDownloadMode.Always:
                DownloadPreviewImages();
                break;

            case PreviewImageDownloadMode.WiFiOnly:
                var connectionProfile = NetworkInformation.GetInternetConnectionProfile();
                // connectionProfile can be null (e.g. airplane mode)
                if (connectionProfile != null && connectionProfile.IsWlanConnectionProfile)
                {
                    DownloadPreviewImages();
                }
                break;

            case PreviewImageDownloadMode.Never:
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
Example #2
0
        bool LoadFile(string pathToFile)
        {
            if (!File.Exists(pathToFile))
            {
                Debug.LogError("EgoXproject: Change file does not exist: " + pathToFile);
                return(false);
            }

            SavePath = pathToFile;
            PList p = new PList();

            if (!p.Load(SavePath))
            {
                return(false);
            }

            if (!Validate(p))
            {
                return(false);
            }

            //set the platform. if non specified will default to ios
            BuildPlatform platform;

            if (p.Root.EnumValue(BUILD_PLATFORM_KEY, out platform))
            {
                Platform = platform;
            }
            else
            {
                Platform = BuildPlatform.iOS;
            }

            //reset everything
            Frameworks.Clear();
            FilesAndFolders.Clear();
            BuildSettings.Clear();
            Scripts.Clear();
            Signing.Clear();
            Capabilities.Clear();
            //load everything
            InfoPlistChanges = p.Root.DictionaryValue(INFO_PLIST_KEY).Copy() as PListDictionary;
            AppConfig        = p.Root.DictionaryValue(APP_CONFIG_KEY) != null?p.Root.DictionaryValue(APP_CONFIG_KEY).Copy() as PListDictionary : new PListDictionary();

            AppConfigEnabled = p.Root.ArrayValue(APP_CONFIG_ENABLED_KEY) != null?p.Root.ArrayValue(APP_CONFIG_ENABLED_KEY).Copy() as PListArray : new PListArray();

            ManualEntitlements = p.Root.DictionaryValue(MANUAL_ENTITLEMENTS) != null?p.Root.DictionaryValue(MANUAL_ENTITLEMENTS).Copy() as PListDictionary : new PListDictionary();

            LoadFrameworks(p.Root.DictionaryValue(FRAMEWORKS_KEY));
            LoadFilesAndFolders(p.Root.DictionaryValue(FILES_AND_FOLDERS_KEY));
            LoadScripts(p.Root.ArrayValue(SCRIPTS_KEY));
            LoadBuildSettings(p.Root.ArrayValue(BUILD_SETTINGS_KEY));
            LoadSigning(p.Root.DictionaryValue(SIGNING_KEY));
            LoadCapabilities(p.Root.DictionaryValue(CAPABILITIES_KEY));


            IsDirty = false;
            return(true);
        }
Example #3
0
        public ItemViewModel(string viewPath, Page p)
        {
            pageName = p.Name;
            // Personalize retrieved items for view they are displayed in
            if (p.Name == "GenericItemView" || p.Name == "ClassicModePage")
            {
                isPhotoAlbumMode = false;
            }
            else if (p.Name == "PhotoAlbumViewer")
            {
                isPhotoAlbumMode = true;
            }

            if (pageName != "ClassicModePage")
            {
                GenericFileBrowser.P.path = viewPath;
                FilesAndFolders.Clear();
            }

            tokenSource = new CancellationTokenSource();
            token       = tokenSource.Token;
            MemoryFriendlyGetItemsAsync(viewPath, token);

            if (pageName != "ClassicModePage")
            {
                History.AddToHistory(viewPath);

                if (History.HistoryList.Count == 1)
                {
                    BS.isEnabled = false;
                    //Debug.WriteLine("Disabled Property");
                }
                else if (History.HistoryList.Count > 1)
                {
                    BS.isEnabled = true;
                    //Debug.WriteLine("Enabled Property");
                }
            }
        }
        public async Task StartDirectoryListing(ResourceInfo resourceInfoToExclude, String viewName = null)
        {
            var client = await ClientService.GetClient();

            if (client == null || IsSelecting)
            {
                return;
            }

            _continueListing = true;

            if (PathStack.Count == 0)
            {
                PathStack.Add(new PathInfo
                {
                    ResourceInfo = new ResourceInfo()
                    {
                        Name = "Nextcloud",
                        Path = "/"
                    },
                    IsRoot = true
                });
            }

            var path = PathStack.Count > 0 ? PathStack[PathStack.Count - 1].ResourceInfo.Path : "/";
            List <ResourceInfo> list = null;

            try
            {
                if (viewName == "sharesIn" | viewName == "sharesOut" | viewName == "sharesLink")
                {
                    PathStack.Clear();
                    list = await client.GetSharesView(viewName);
                }
                else if (viewName == "favorites")
                {
                    PathStack.Clear();
                    list = await client.GetFavorites();
                }
                else
                {
                    list = await client.List(path);
                }
            }
            catch (ResponseError e)
            {
                ResponseErrorHandlerService.HandleException(e);
            }

            FilesAndFolders.Clear();
            Folders.Clear();

            if (list != null)
            {
                foreach (var item in list)
                {
                    if (resourceInfoToExclude != null && item == resourceInfoToExclude)
                    {
                        continue;
                    }

                    FilesAndFolders.Add(new FileOrFolder(item));

                    if (!item.IsDirectory)
                    {
                        continue;
                    }
                    if (RemoveResourceInfos != null)
                    {
                        var index = RemoveResourceInfos.FindIndex(res => res.Path.Equals(item.Path, StringComparison.Ordinal));
                        if (index == -1)
                        {
                            Folders.Add(new FileOrFolder(item));
                        }
                    }
                    else
                    {
                        Folders.Add(new FileOrFolder(item));
                    }
                }
            }

            switch (SettingsService.Instance.LocalSettings.PreviewImageDownloadMode)
            {
            case PreviewImageDownloadMode.Always:
                DownloadPreviewImages();
                break;

            case PreviewImageDownloadMode.WiFiOnly:
                var connectionProfile = NetworkInformation.GetInternetConnectionProfile();
                // connectionProfile can be null (e.g. airplane mode)
                if (connectionProfile != null && connectionProfile.IsWlanConnectionProfile)
                {
                    DownloadPreviewImages();
                }
                break;

            case PreviewImageDownloadMode.Never:
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            SortList();
        }
Example #5
0
        public async void MemoryFriendlyGetItemsAsync(string path, Page passedPage)
        {
            TextState.isVisible = Visibility.Collapsed;
            tokenSource         = new CancellationTokenSource();
            CancellationToken token = App.ViewModel.tokenSource.Token;

            pageName       = passedPage.Name;
            Universal.path = path;
            // Personalize retrieved items for view they are displayed in
            switch (pageName)
            {
            case "GenericItemView":
                isPhotoAlbumMode = false;
                break;

            case "PhotoAlbumViewer":
                isPhotoAlbumMode = true;
                break;

            case "ClassicModePage":
                isPhotoAlbumMode = false;
                break;
            }

            if (pageName != "ClassicModePage")
            {
                FilesAndFolders.Clear();
            }

            Stopwatch stopwatch = new Stopwatch();

            stopwatch.Start();

            Universal.path = path;      // Set visible path to reflect new navigation
            try
            {
                PVIS.isVisible      = Visibility.Visible;
                TextState.isVisible = Visibility.Collapsed;
                switch (Universal.path)
                {
                case "Desktop":
                    Universal.path = MainPage.DesktopPath;
                    break;

                case "Downloads":
                    Universal.path = MainPage.DownloadsPath;
                    break;

                case "Documents":
                    Universal.path = MainPage.DocumentsPath;
                    break;

                case "Pictures":
                    Universal.path = MainPage.PicturesPath;
                    break;

                case "Music":
                    Universal.path = MainPage.MusicPath;
                    break;

                case "Videos":
                    Universal.path = MainPage.VideosPath;
                    break;

                case "OneDrive":
                    Universal.path = MainPage.OneDrivePath;
                    break;
                }

                folder = await StorageFolder.GetFolderFromPathAsync(Universal.path);

                History.AddToHistory(Universal.path);

                if (History.HistoryList.Count == 1)
                {
                    BS.isEnabled = false;
                }
                else if (History.HistoryList.Count > 1)
                {
                    BS.isEnabled = true;
                }

                QueryOptions options = new QueryOptions()
                {
                    FolderDepth   = FolderDepth.Shallow,
                    IndexerOption = IndexerOption.UseIndexerWhenAvailable
                };
                string sort = "By_Name";
                if (sort == "By_Name")
                {
                    SortEntry entry = new SortEntry()
                    {
                        AscendingOrder = true,
                        PropertyName   = "System.FileName"
                    };
                    options.SortOrder.Add(entry);
                }

                uint       index = 0;
                const uint step  = 250;
                if (!folder.AreQueryOptionsSupported(options))
                {
                    options.SortOrder.Clear();
                }

                folderQueryResult = folder.CreateFolderQueryWithOptions(options);
                IReadOnlyList <StorageFolder> folders = await folderQueryResult.GetFoldersAsync(index, step);

                int foldersCountSnapshot = folders.Count;
                while (folders.Count != 0)
                {
                    foreach (StorageFolder folder in folders)
                    {
                        if (token.IsCancellationRequested)
                        {
                            return;
                        }

                        gotFolName     = folder.Name.ToString();
                        gotFolDate     = folder.DateCreated.ToString();
                        gotFolPath     = folder.Path.ToString();
                        gotFolType     = "Folder";
                        gotFolImg      = Visibility.Visible;
                        gotFileImgVis  = Visibility.Collapsed;
                        gotEmptyImgVis = Visibility.Collapsed;


                        if (pageName == "ClassicModePage")
                        {
                            ClassicFolderList.Add(new Classic_ListedFolderItem()
                            {
                                FileName = gotFolName, FileDate = gotFolDate, FileExtension = gotFolType, FilePath = gotFolPath
                            });
                        }
                        else
                        {
                            FilesAndFolders.Add(new ListedItem()
                            {
                                EmptyImgVis = gotEmptyImgVis, ItemIndex = FilesAndFolders.Count, FileImg = null, FileIconVis = gotFileImgVis, FolderImg = gotFolImg, FileName = gotFolName, FileDate = gotFolDate, FileExtension = gotFolType, FilePath = gotFolPath
                            });
                        }
                    }
                    index  += step;
                    folders = await folderQueryResult.GetFoldersAsync(index, step);
                }

                index           = 0;
                fileQueryResult = folder.CreateFileQueryWithOptions(options);
                IReadOnlyList <StorageFile> files = await fileQueryResult.GetFilesAsync(index, step);

                int filesCountSnapshot = files.Count;
                while (files.Count != 0)
                {
                    foreach (StorageFile file in files)
                    {
                        if (token.IsCancellationRequested)
                        {
                            return;
                        }

                        gotName = file.DisplayName.ToString();
                        gotDate = file.DateCreated.ToString(); // In the future, parse date to human readable format
                        if (file.FileType.ToString() == ".exe")
                        {
                            gotType = "Executable";
                        }
                        else
                        {
                            gotType = file.DisplayType;
                        }
                        gotPath             = file.Path.ToString();
                        gotFolImg           = Visibility.Collapsed;
                        gotDotFileExtension = file.FileType;
                        if (isPhotoAlbumMode == false)
                        {
                            const uint             requestedSize    = 20;
                            const ThumbnailMode    thumbnailMode    = ThumbnailMode.ListView;
                            const ThumbnailOptions thumbnailOptions = ThumbnailOptions.UseCurrentScale;
                            try
                            {
                                gotFileImg = await file.GetThumbnailAsync(thumbnailMode, requestedSize, thumbnailOptions);

                                BitmapImage icon = new BitmapImage();
                                if (gotFileImg != null)
                                {
                                    gotEmptyImgVis = Visibility.Collapsed;
                                    icon.SetSource(gotFileImg.CloneStream());
                                }
                                else
                                {
                                    gotEmptyImgVis = Visibility.Visible;
                                }
                                gotFileImgVis = Visibility.Visible;

                                if (pageName == "ClassicModePage")
                                {
                                    ClassicFileList.Add(new ListedItem()
                                    {
                                        FileImg = icon, FileIconVis = gotFileImgVis, FolderImg = gotFolImg, FileName = gotName, FileDate = gotDate, FileExtension = gotType, FilePath = gotPath
                                    });
                                }
                                else
                                {
                                    FilesAndFolders.Add(new ListedItem()
                                    {
                                        DotFileExtension = gotDotFileExtension, EmptyImgVis = gotEmptyImgVis, FileImg = icon, FileIconVis = gotFileImgVis, FolderImg = gotFolImg, FileName = gotName, FileDate = gotDate, FileExtension = gotType, FilePath = gotPath
                                    });
                                }
                            }
                            catch
                            {
                                // Silent catch here to avoid crash
                                // TODO maybe some logging could be added in the future...
                            }
                        }
                        else
                        {
                            const uint             requestedSize    = 275;
                            const ThumbnailMode    thumbnailMode    = ThumbnailMode.PicturesView;
                            const ThumbnailOptions thumbnailOptions = ThumbnailOptions.ResizeThumbnail;
                            try
                            {
                                gotFileImg = await file.GetThumbnailAsync(thumbnailMode, requestedSize, thumbnailOptions);

                                BitmapImage icon = new BitmapImage();
                                if (gotFileImg != null)
                                {
                                    gotEmptyImgVis = Visibility.Collapsed;
                                    icon.SetSource(gotFileImg.CloneStream());
                                }
                                else
                                {
                                    gotEmptyImgVis = Visibility.Visible;
                                }
                                gotFileImgVis = Visibility.Visible;

                                if (pageName == "ClassicModePage")
                                {
                                    ClassicFileList.Add(new ListedItem()
                                    {
                                        FileImg = icon, FileIconVis = gotFileImgVis, FolderImg = gotFolImg, FileName = gotName, FileDate = gotDate, FileExtension = gotType, FilePath = gotPath
                                    });
                                }
                                else
                                {
                                    FilesAndFolders.Add(new ListedItem()
                                    {
                                        DotFileExtension = gotDotFileExtension, EmptyImgVis = gotEmptyImgVis, FileImg = icon, FileIconVis = gotFileImgVis, FolderImg = gotFolImg, FileName = gotName, FileDate = gotDate, FileExtension = gotType, FilePath = gotPath
                                    });
                                }
                            }
                            catch
                            {
                                // Silent catch here to avoid crash
                                // TODO maybe some logging could be added in the future...
                            }
                        }
                    }
                    index += step;
                    files  = await fileQueryResult.GetFilesAsync(index, step);
                }
                if (foldersCountSnapshot + filesCountSnapshot == 0)
                {
                    TextState.isVisible = Visibility.Visible;
                }
                if (pageName != "ClassicModePage")
                {
                    PVIS.isVisible = Visibility.Collapsed;
                }
                PVIS.isVisible = Visibility.Collapsed;
                stopwatch.Stop();
                Debug.WriteLine("Loading of: " + path + " completed in " + stopwatch.ElapsedMilliseconds + " Milliseconds.");
            }
            catch (UnauthorizedAccessException e)
            {
                if (path.Contains(@"C:\"))
                {
                    DisplayConsentDialog();
                }
                else
                {
                    MessageDialog unsupportedDevice = new MessageDialog("This device may be unsupported. Please file an issue report in Settings - About containing what device we couldn't access. Technical information: " + e, "Unsupported Device");
                    await unsupportedDevice.ShowAsync();
                }
                stopwatch.Stop();
                Debug.WriteLine("Loading of: " + Universal.path + " failed in " + stopwatch.ElapsedMilliseconds + " Milliseconds.");
            }
            catch (COMException e)
            {
                stopwatch.Stop();
                Debug.WriteLine("Loading of: " + Universal.path + " failed in " + stopwatch.ElapsedMilliseconds + " Milliseconds.");
                Frame         rootFrame = Window.Current.Content as Frame;
                MessageDialog driveGone = new MessageDialog(e.Message, "Drive Unplugged");
                await driveGone.ShowAsync();

                rootFrame.Navigate(typeof(MainPage), new SuppressNavigationTransitionInfo());
            }

            tokenSource = null;
        }