chenrongqian 2 лет назад
Родитель
Сommit
33ce24d38b

+ 4 - 2
PDF Office/Model/CloudDrive/CloudDriveItem.cs

@@ -15,14 +15,16 @@ namespace PDF_Office.Model.CloudDrive
         GoogleDrive,
         OneDrive
     }
-    public class CloudDriveItem
+
+
+    public class CloudBoxItem
     {
         public CloudType CloudDiskType { get; set; }
         public List<UserCredential> UserCredentials { get; set; }
         public string UsersInfoPath { get; set; }
         public int Id { get; set; }
         public string DriveName { get; private set; }
-        public CloudDriveItem(CloudType cloudDiskType)
+        public CloudBoxItem(CloudType cloudDiskType)
         {
             CloudDiskType = cloudDiskType;
             GetName(CloudDiskType);

+ 38 - 12
PDF Office/Model/CloudDrive/CloudFiles.cs

@@ -2,41 +2,67 @@
 using Google.Apis.Drive.v3;
 using System;
 using System.Collections.Generic;
+using System.Collections.ObjectModel;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
 
 namespace PDF_Office.Model.CloudDrive
 {
-    //某用户云盘的文件
-    internal class CloudFiles
+    public class Cloud
     {
-    }
+        public static ObservableCollection<UserBaseItem> CloudLists = new ObservableCollection<UserBaseItem>();
 
-    #region GooglrDrive
+        public static List<CloudBoxItem> InitCloudBoxs()
+        {
+            List<CloudBoxItem> CloudeDrives = new List<CloudBoxItem>();
 
-    public class CloudFileUser
-    {
-        public User user { get; set; }
-        public UserBaseItem driveItem{ get; set; }
+            var cloudDriveItem = new CloudBoxItem(CloudType.Box);
+            CloudeDrives.Add(cloudDriveItem);
+
+            cloudDriveItem = new CloudBoxItem(CloudType.DropBox);
+            CloudeDrives.Add(cloudDriveItem);
+
+            cloudDriveItem = new CloudBoxItem(CloudType.GoogleDrive);
+            CloudeDrives.Add(cloudDriveItem);
+
+            cloudDriveItem = new CloudBoxItem(CloudType.OneDrive);
+            CloudeDrives.Add(cloudDriveItem);
+
+            return CloudeDrives;
+        }
     }
 
-    public class User
+    #region 公有云盘
+
+    /// <summary>
+    /// 用户信息
+    /// </summary>
+    public class UserInfo
     {
-        public CloudType cloudType { get; set; }
+
         public string Name { get; set; }
         public int Id { get; set; }
 
         public string UserAccount { get; set; }
     }
 
+    /// <summary>
+    /// 用户云盘
+    /// </summary>
     public class UserBaseItem
     {
-      
+        public UserInfo userInfo { get; set; }
+        public CloudType cloudType { get; set; }
     }
 
+    #endregion
+
+    #region GooglrDrive
 
-    //谷歌云盘的文件
+    /// <summary>
+    /// 谷歌云盘的文件
+    /// </summary>
     public class GoogleDriveFiles
     {
         public string Id { get; set; }

+ 6 - 6
PDF Office/ViewModels/HomePanel/CloudDrive/CloudDriveContentViewModel.cs

@@ -13,16 +13,16 @@ namespace PDF_Office.ViewModels.HomePanel.CloudDrive
     {
 
 
-        public DelegateCommand<CloudDriveItem> CheckDriveCommand { get; set; }
-        public DelegateCommand<CloudDriveItem> CheckDriveLoginUserCommand { get; set; }
+        public DelegateCommand<CloudBoxItem> CheckDriveCommand { get; set; }
+        public DelegateCommand<CloudBoxItem> CheckDriveLoginUserCommand { get; set; }
 
         private CloudDriveManager Manager =>CloudDriveManager.GetInstance();
         public event EventHandler<bool> IshowContentHandler;
       
         public CloudDriveContentViewModel()
         {
-            CheckDriveCommand = new DelegateCommand<CloudDriveItem>(CheckDrive);
-            CheckDriveLoginUserCommand = new DelegateCommand<CloudDriveItem>(CheckDriveLoginUser);
+            CheckDriveCommand = new DelegateCommand<CloudBoxItem>(CheckDrive);
+            CheckDriveLoginUserCommand = new DelegateCommand<CloudBoxItem>(CheckDriveLoginUser);
           
         }
 
@@ -33,7 +33,7 @@ namespace PDF_Office.ViewModels.HomePanel.CloudDrive
             IshowContentHandler?.Invoke(null, !result);
         }
 
-        public async void CheckDrive(CloudDriveItem cloudDriveItem)
+        public async void CheckDrive(CloudBoxItem cloudDriveItem)
         {
             bool result = false;
             switch (cloudDriveItem.CloudDiskType)
@@ -46,7 +46,7 @@ namespace PDF_Office.ViewModels.HomePanel.CloudDrive
             IshowContentHandler?.Invoke(null, !result);
         }
 
-        public async void CheckDriveLoginUser(CloudDriveItem cloudDriveItem)
+        public async void CheckDriveLoginUser(CloudBoxItem cloudDriveItem)
         {
             bool result = false;
             switch (cloudDriveItem.CloudDiskType)

+ 4 - 3
PDF Office/ViewModels/HomePanel/CloudDrive/CloudDriveManager.cs

@@ -2,6 +2,7 @@
 using PDF_Office.ViewModels.HomePanel.CloudDrive.CloudDriveType;
 using System;
 using System.Collections.Generic;
+using System.Collections.ObjectModel;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
@@ -13,7 +14,8 @@ namespace PDF_Office.ViewModels.HomePanel.CloudDrive
     //单实例化
     public class CloudDriveManager
     {
-       public GoogleDriveManager GoogleDrive => GoogleDriveManager.GoogleDrive;
+      
+        public GoogleDriveManager GoogleDrive => GoogleDriveManager.GoogleDrive;
        // public DropbBoxManager DropbBox;
         public CloudType cloudType;
 
@@ -28,7 +30,6 @@ namespace PDF_Office.ViewModels.HomePanel.CloudDrive
         }
         private CloudDriveManager()
         {
-         //   DropbBox = new DropbBoxManager();
         }
 
 
@@ -50,7 +51,7 @@ namespace PDF_Office.ViewModels.HomePanel.CloudDrive
         public bool LoadedUsers()
         {
             bool isUsers = false;
-            if (CloudFilesContentViewModel.CloudFileUserLists.Count > 0)
+            if (Cloud.CloudLists.Count > 0)
                 isUsers = true;
 
             return isUsers;

+ 20 - 26
PDF Office/ViewModels/HomePanel/CloudDrive/CloudDriveType/GoogleDriveManager.cs

@@ -17,9 +17,6 @@ namespace PDF_Office.ViewModels.HomePanel.CloudDrive.CloudDriveType
     //多用户UX交互
     public class GoogleDriveManager
     {
-        //已登录的所有用户
-     //   public ObservableCollection<CloudFileUser> GoogleDriveUsers = new ObservableCollection<CloudFileUser>();
-
         private static GoogleDriveManager instance;
         public static GoogleDriveManager GoogleDrive => instance ?? (instance = new GoogleDriveManager());
         private GoogleDriveManager()
@@ -36,7 +33,7 @@ namespace PDF_Office.ViewModels.HomePanel.CloudDrive.CloudDriveType
         public async Task<bool> GetHistoryUsers()
         {
             var tuples = await GoogleDriveStatic.GetHistoryService();
-            CloudFilesContentViewModel.CloudFileUserLists.Clear();
+            Cloud.CloudLists.Clear();
             foreach (var tuple in tuples)
             {
 
@@ -46,7 +43,7 @@ namespace PDF_Office.ViewModels.HomePanel.CloudDrive.CloudDriveType
                 }
             }
 
-            if (CloudFilesContentViewModel.CloudFileUserLists.Count > 0)
+            if (Cloud.CloudLists.Count > 0)
             {
                 return true;
             }
@@ -55,18 +52,19 @@ namespace PDF_Office.ViewModels.HomePanel.CloudDrive.CloudDriveType
 
         public async void AddGoogleDriveUser(Tuple<DriveService, UserCredential> tuple)
         {
-            CloudFileUser cloudFileUser = new CloudFileUser();
+            UserBaseItem cloudFileUser = new UserBaseItem();
            GoogleDriveUserItem userItem = new GoogleDriveUserItem();
             userItem.Service = tuple.Item1;
             userItem.CurrentCredential = tuple.Item2;
-            cloudFileUser.driveItem = userItem;
+            cloudFileUser = userItem;
+            cloudFileUser.cloudType = CloudType.GoogleDrive;
           
-            User user = new User();
-            user.UserAccount = await userItem.GetUserAcountAsync();
-            user.cloudType = CloudType.GoogleDrive;
-            cloudFileUser.user = user;
+            UserInfo user = new UserInfo();
+            user = await userItem.GetUserAcountAsync();
+         
+            cloudFileUser.userInfo = user;
 
-            CloudFilesContentViewModel.CloudFileUserLists.Add(cloudFileUser);
+            Cloud.CloudLists.Add(cloudFileUser);
         }
 
         public async Task<bool> LoginUserCount()
@@ -90,23 +88,19 @@ namespace PDF_Office.ViewModels.HomePanel.CloudDrive.CloudDriveType
 
         public async Task<bool> GetUserInfo(Tuple<DriveService, UserCredential> tuple)
         {
-            CloudFileUser cloudFileUser = new CloudFileUser();
+            UserBaseItem cloudFileUser = new UserBaseItem();
             GoogleDriveUserItem userItem = new GoogleDriveUserItem();
             userItem.Service = tuple.Item1;
             userItem.CurrentCredential = tuple.Item2;
-            cloudFileUser.driveItem = userItem;
-
-            User user = new User();
-            user.UserAccount = await userItem.GetUserAcountAsync();
-            user.cloudType = CloudType.GoogleDrive;
-            cloudFileUser.user = user;
-
-            CloudFilesContentViewModel.CloudFileUserLists.Add(cloudFileUser);
-            //GoogleDriveUserItem userItem = new GoogleDriveUserItem();
-            //userItem.Service = tuple.Item1;
-            //userItem.CurrentCredential = tuple.Item2;
-            //userItem.User.UserAccount = await userItem.GetUserAcountAsync();
-            //CloudFilesContentViewModel.CloudFileUserLists.Add(userItem);
+            cloudFileUser = userItem;
+            cloudFileUser.cloudType = CloudType.GoogleDrive;
+
+            UserInfo user = new UserInfo();
+            user = await userItem.GetUserAcountAsync();
+
+            cloudFileUser.userInfo = user;
+
+            Cloud.CloudLists.Add(cloudFileUser);
             return true;
         }
 

+ 55 - 24
PDF Office/ViewModels/HomePanel/CloudDrive/CloudDriveType/GoogleDriveUserItem.cs

@@ -1,6 +1,7 @@
 using Google.Apis.Auth.OAuth2;
 using Google.Apis.Download;
 using Google.Apis.Drive.v3;
+using Google.Apis.Drive.v3.Data;
 using Google.Apis.Services;
 using Google.Apis.Util.Store;
 using PDF_Office.Model.CloudDrive;
@@ -16,7 +17,7 @@ namespace PDF_Office.ViewModels.HomePanel.CloudDrive.CloudDriveType
 {
 
     /// <summary>
-    /// 对单账号处理的核心功能类
+    /// 单个用户
     /// </summary>
     public class GoogleDriveUserItem: UserBaseItem
     {
@@ -46,7 +47,11 @@ namespace PDF_Office.ViewModels.HomePanel.CloudDrive.CloudDriveType
                 result = await CurrentCredential.RevokeTokenAsync(CancellationToken.None);
             }
             if (result == true)
+            {
                 CurrentCredential = null;
+                FilesList.Clear();
+            }
+               
 
             return result;
         }
@@ -55,25 +60,28 @@ namespace PDF_Office.ViewModels.HomePanel.CloudDrive.CloudDriveType
         /// 获取帐号
         /// </summary>
         /// <returns>返回用户帐号地址</returns>
-        private async Task<string> GetUserAcount()
+        private async Task<UserInfo> GetUserAcount()
         {
-            string userAcount = "";
+            UserInfo userInfo = null;
             if (Service != null)
             {
+                userInfo = new UserInfo();
                 var about = Service.About.Get();
                 about.Fields = "user";
-                var uss = about.Execute().User;
-                userAcount = uss.EmailAddress;
+                var uss = await about.ExecuteAsync();
+                User user = uss.User;
+                userInfo.UserAccount = user.EmailAddress;
+                userInfo.Name = user.DisplayName;
             }
 
-            return userAcount;
+            return userInfo;
         }
 
         /// <summary>
         /// 获取帐号
         /// </summary>
         /// <returns>返回用户帐号地址</returns>
-        public async Task<string> GetUserAcountAsync()
+        public async Task<UserInfo> GetUserAcountAsync()
         {
             return await GetUserAcount();
         }
@@ -238,7 +246,7 @@ namespace PDF_Office.ViewModels.HomePanel.CloudDrive.CloudDriveType
     {
         public static string[] Scopes = { DriveService.Scope.Drive };
         //Google Drive应用名称
-        private static readonly string GoogleDriveAppName = "PDF Office848";
+        private static readonly string GoogleDriveAppName = "PDF Office";
         //请求应用进行身份验证的信息
         public static string CredentialsPath { get; private set; }
 
@@ -276,25 +284,33 @@ namespace PDF_Office.ViewModels.HomePanel.CloudDrive.CloudDriveType
                 FilePath = System.IO.Path.Combine(FilesPathTemp, time + ".json");
             }
 
-
-            using (var stream = new FileStream(CredentialsPath, FileMode.Open, FileAccess.Read))
+            try
             {
-                credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
-                    GoogleClientSecrets.Load(stream).Secrets,
-                    Scopes,
-                    "user",
-                    CancellationToken.None,
-                    new FileDataStore(FilePath, true)).Result;
-            }
+                using (var stream = new FileStream(CredentialsPath, FileMode.Open, FileAccess.Read))
+                {
+                    credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
+                        GoogleClientSecrets.Load(stream).Secrets,
+                        Scopes,
+                        "user",
+                        CancellationToken.None,
+                        new FileDataStore(FilePath, true)).Result;
+                }
 
-            //create Drive API service.
-            DriveService service = new DriveService(new BaseClientService.Initializer()
-            {
-                HttpClientInitializer = credential,
-                ApplicationName = GoogleDriveAppName
-            });
+                //create Drive API service.
+                DriveService service = new DriveService(new BaseClientService.Initializer()
+                {
+                    HttpClientInitializer = credential,
+                    ApplicationName = GoogleDriveAppName
+                });
 
-            return tuple = new Tuple<DriveService, UserCredential>(service, credential);
+                return tuple = new Tuple<DriveService, UserCredential>(service, credential);
+            }
+            catch (Exception e)
+            {
+                //网络连接失败的情况
+                return null;
+            }
+            
         }
 
 
@@ -338,6 +354,21 @@ namespace PDF_Office.ViewModels.HomePanel.CloudDrive.CloudDriveType
             return FolderPath;
         }
 
+        public static bool ClearFilesPathTemp()
+        {
+            bool result = false;
+            string str_1 = System.AppDomain.CurrentDomain.BaseDirectory;
+            String FolderPath = str_1 + "GoogleDriveUsers";
+
+            if (Directory.Exists(FolderPath) == false)
+            {
+                Directory.Delete(FolderPath);
+                result = true;
+            }
+            return result;
+        }
+
+
         /// <summary>
         /// 获取本地身份验证文件
         /// </summary>

+ 1 - 1
PDF Office/ViewModels/HomePanel/CloudDrive/CloudFilesContentViewModel.cs

@@ -14,7 +14,7 @@ namespace PDF_Office.ViewModels.HomePanel.CloudDrive
     //各云盘事件
     public class CloudFilesContentViewModel : BindableBase
     {
-        public static ObservableCollection<CloudFileUser> CloudFileUserLists = new ObservableCollection<CloudFileUser>();
+     
         public GoogleDriveManager GoogleDrive => GoogleDriveManager.GoogleDrive;
         public DropbBoxManager DropbBox => DropbBoxManager.DropbBox;
         public DelegateCommand OpenCloudDriveCommand { get; set; }

+ 3 - 6
PDF Office/ViewModels/HomePanel/HomeCloudContentViewModel.cs

@@ -13,16 +13,13 @@ namespace PDF_Office.ViewModels.HomePanel
 {
     public class HomeCloudContentViewModel:BindableBase
     {
-     //   public GoogleDriveManager googleDriveManager;
-        
-        public DelegateCommand<CloudDriveItem> OpenCloudDriveCommand { get; set; }
+        public DelegateCommand<CloudBoxItem> OpenCloudDriveCommand { get; set; }
         public HomeCloudContentViewModel()
         {
-         //   googleDriveManager = new GoogleDriveManager();
-            OpenCloudDriveCommand = new DelegateCommand<CloudDriveItem>(OpenCloudDrive_Click);
+            OpenCloudDriveCommand = new DelegateCommand<CloudBoxItem>(OpenCloudDrive_Click);
         }
 
-        public void OpenCloudDrive_Click(CloudDriveItem cloudDiskItem)
+        public void OpenCloudDrive_Click(CloudBoxItem cloudDiskItem)
         {
             if (cloudDiskItem != null)
             {

+ 6 - 17
PDF Office/Views/HomePanel/CloudDrive/CloudDriveContent.xaml.cs

@@ -22,7 +22,7 @@ namespace PDF_Office.Views.HomePanel.CloudDrive
     /// </summary>
     public partial class CloudDriveContent : UserControl
     {
-        private List<CloudDriveItem> CloudeDrives = new List<CloudDriveItem>();
+        private List<CloudBoxItem> CloudBoxs = new List<CloudBoxItem>();
         private CloudDriveContentViewModel ViewModel => DataContext as CloudDriveContentViewModel;
 
         public CloudDriveContent()
@@ -50,26 +50,15 @@ namespace PDF_Office.Views.HomePanel.CloudDrive
 
         private void InitCloudDrive()
         {
-            var cloudDriveItem = new CloudDriveItem(CloudType.Box);
-            CloudeDrives.Add(cloudDriveItem);
-
-            cloudDriveItem = new CloudDriveItem(CloudType.DropBox);
-            CloudeDrives.Add(cloudDriveItem);
-
-            cloudDriveItem = new CloudDriveItem(CloudType.GoogleDrive);
-            CloudeDrives.Add(cloudDriveItem);
-
-            cloudDriveItem = new CloudDriveItem(CloudType.OneDrive);
-            CloudeDrives.Add(cloudDriveItem);
-
-            ListCloudDrive.ItemsSource = CloudeDrives;
-            combCloudDrive.ItemsSource = CloudeDrives;
+            CloudBoxs = Cloud.InitCloudBoxs();
+            ListCloudDrive.ItemsSource = CloudBoxs;
+            combCloudDrive.ItemsSource = CloudBoxs;
             combCloudDrive.SelectedIndex = 0;
         }
 
         private void SelectCloudDrive_Click(object sender, MouseButtonEventArgs e)
         {
-           var cloudDriveItem = (sender as FrameworkElement).DataContext as CloudDriveItem;
+           var cloudDriveItem = (sender as FrameworkElement).DataContext as CloudBoxItem;
             if(cloudDriveItem != null)
             {
                 ViewModel.CheckDriveCommand.Execute(cloudDriveItem);
@@ -78,7 +67,7 @@ namespace PDF_Office.Views.HomePanel.CloudDrive
 
         private void combCloudDrive_SelectionChanged(object sender, SelectionChangedEventArgs e)
         {
-            var cloudDriveItem = combCloudDrive.SelectedItem as CloudDriveItem;
+            var cloudDriveItem = combCloudDrive.SelectedItem as CloudBoxItem;
             if (cloudDriveItem != null)
             {
                 ViewModel.CheckDriveCommand.Execute(cloudDriveItem);

+ 9 - 30
PDF Office/Views/HomePanel/CloudDrive/CloudFilesContent.xaml.cs

@@ -28,7 +28,7 @@ namespace PDF_Office.Views.HomePanel.CloudDrive
      
         private CloudFilesContentViewModel ViewModel => DataContext as CloudFilesContentViewModel;
 
-        private List<CloudDriveItem> CloudeDrives = new List<CloudDriveItem>();
+        private List<CloudBoxItem> CloudeDrives = new List<CloudBoxItem>();
 
         private CloudType cloudType;
         public CloudFilesContent()
@@ -40,18 +40,7 @@ namespace PDF_Office.Views.HomePanel.CloudDrive
 
         private void InitCloudDrive()
         {
-            var cloudDriveItem = new CloudDriveItem(CloudType.Box);
-            CloudeDrives.Add(cloudDriveItem);
-
-            cloudDriveItem = new CloudDriveItem(CloudType.DropBox);
-            CloudeDrives.Add(cloudDriveItem);
-
-            cloudDriveItem = new CloudDriveItem(CloudType.GoogleDrive);
-            CloudeDrives.Add(cloudDriveItem);
-
-            cloudDriveItem = new CloudDriveItem(CloudType.OneDrive);
-            CloudeDrives.Add(cloudDriveItem);
-
+            CloudeDrives = Cloud.InitCloudBoxs();
             combCloudDisk.ItemsSource = CloudeDrives;
             combCloudDisk.SelectedIndex = 0;
         }
@@ -62,38 +51,28 @@ namespace PDF_Office.Views.HomePanel.CloudDrive
             {
                 ViewModel.CheckDriveUsers();
                 if (Listusers.ItemsSource == null)
-                    Listusers.ItemsSource = CloudFilesContentViewModel.CloudFileUserLists;
+                    Listusers.ItemsSource = Cloud.CloudLists;
             }
         }
 
-        public void SelectCloudTye(CloudType cloudType)
-        {
-            switch (cloudType)
-            {
-                case CloudType.GoogleDrive:
-                    cloudType = CloudType.GoogleDrive;
-                    break;
-            }
-        }
 
         private void Button_Click(object sender, RoutedEventArgs e)
         {
 
-         //  SelectCloudTye(CloudType.GoogleDrive);
+         
         }
 
-        private CloudFileUser CurrentUser;
-        
+        private UserBaseItem CurrentUser;
 
         private async void Listusers_SelectionChanged(object sender, SelectionChangedEventArgs e)
         {
-            var cloudFileUser = Listusers.SelectedItem as CloudFileUser;
+            var cloudFileUser = Listusers.SelectedItem as UserBaseItem;
             if(cloudFileUser != null)
             {
                 CurrentUser = cloudFileUser;
-                if ((CurrentUser.driveItem as GoogleDriveUserItem) != null)
+                if ((CurrentUser as GoogleDriveUserItem) != null)
                 {
-                    var item = CurrentUser.driveItem as GoogleDriveUserItem;
+                    var item = CurrentUser as GoogleDriveUserItem;
                     var files = await item.GetDriveFiles(item.Service);
                     ObservableCollection<GoogleDriveFiles> filesList = new ObservableCollection<GoogleDriveFiles>();
                     foreach (var file in files)
@@ -113,7 +92,7 @@ namespace PDF_Office.Views.HomePanel.CloudDrive
             var menuItem = sender as MenuItem;
            var item = menuItem.DataContext as GoogleDriveFiles;
 
-            var googleItem = CurrentUser.driveItem as GoogleDriveUserItem;
+            var googleItem = CurrentUser as GoogleDriveUserItem;
             string docPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
 
             var filename = await googleItem.DownloadGoogleFile(item, docPath);