Beispiel #1
0
        public bool RestoreSession()
        {
            if (string.IsNullOrEmpty(boxSettings.AuthToken))
            {
                return(false);
            }

            boxSession = boxService.CreateSession(boxSettings.AuthToken);

            Folder rootFolder;

            try
            {
                rootFolder = boxSession.GetAccountTreeRoot("onelevel", "nozip");
            }
            catch (BoxStatusException e)
            {
                boxSession = null;

                if (e.Status == "not_logged_in")
                {
                    // AuthToken が無効になっています。
                    boxSettings.AuthToken      = null;
                    boxSettings.HomeFolderId   = -1;
                    boxSettings.BlocksFolderId = -1;
                    SaveSettings();
                    return(false);
                }
                else
                {
                    // その他のエラーならば throw します。
                    throw;
                }
            }

            // 保存されている Blocks Home と Blocks フォルダの ID を検査します。
            // それらが無効であっても、AuthToken は有効であるため、
            // BoxSession の復元は成功で終わらせます。
            if (0 < boxSettings.HomeFolderId)
            {
                // Blocks Home と Blocks フォルダは同時に作成するので、
                // どちらかの ID が無効な場合、同時に無効に設定します。

                var homeFolder = rootFolder.FindFolderById(boxSettings.HomeFolderId);
                if (homeFolder == null)
                {
                    // Blocks Home フォルダが存在しません。
                    boxSettings.HomeFolderId   = -1;
                    boxSettings.BlocksFolderId = -1;
                    SaveSettings();
                }
                else
                {
                    var homeFolderTree = boxSession.GetAccountTree(homeFolder.Id, "onelevel", "nozip");
                    var blockFolder    = homeFolderTree.FindFolderById(boxSettings.BlocksFolderId);
                    if (blockFolder == null)
                    {
                        // Blocks フォルダが存在しません。
                        boxSettings.HomeFolderId   = -1;
                        boxSettings.BlocksFolderId = -1;
                        SaveSettings();
                    }
                }
            }
            else
            {
                if (0 < boxSettings.BlocksFolderId)
                {
                    // フォルダ情報の不整合を起こしているため、初期化して保存します。
                    boxSettings.HomeFolderId   = -1;
                    boxSettings.BlocksFolderId = -1;
                    SaveSettings();
                }
            }

            return(true);
        }