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); }