예제 #1
0
        public CloudFiles AddFiles(Dictionary <string, object> items)
        {
            UniValue file = UniValue.Create((Dictionary <string, object>)items);
            var      map  = new ApiDataMapping();

            map.Add("id", "FileID");
            map.Add("title", "FileName");
            map.Add("fileExtension", "Extention");
            map.Add("downloadUrl", "DownUrl");
            map.Add("thumbnailLink", "Thumnail");
            map.Add("fileSize", "FileSize", typeof(long));
            map.Add("modifiedDate", "modifiedDate");
            FileInfo fi = new FileInfo(file, map);

            //fi.Path = "root";
            fi.driveinfo = driveinfo;
            if (fi.Extention != null)
            {
                fi.DownUrl = "https://www.googleapis.com/drive/v2/files/" + fi.FileID + "?alt=media";
                fi.IsFile  = true;
            }
            else
            {
                fi.Path  += fi.FileName + "/";
                fi.IsFile = false;
            }
            GoogleFile files = new GoogleFile(fi);

            GoogleFiles.Add(files);
            return(files);
        }
예제 #2
0
        private static void DownloadFolder(string folderId, string parentFolderPath)
        {
            FilesResource.GetRequest request = driveService.Files.Get(folderId);
            request.Fields = "name,mimeType";
            GoogleFile fileInfo = request.Execute();

            //Makesure metadata gives a folder type
            if (fileInfo.MimeType != folderMimeType)
            {
                Debug.LogWarning($"{folderId} is not a folder");
                return;
            }

            IList <GoogleFile> subFolders      = ListFolders(folderId);
            IList <GoogleFile> subFiles        = ListFiles(folderId);
            string             pathToNewFolder = parentFolderPath.Replace("/", "\\") + $"\\{fileInfo.Name}";

            Directory.CreateDirectory(pathToNewFolder);
            //Download files in current folder
            foreach (GoogleFile subFile in subFiles)
            {
                DownloadFile(subFile.Id, pathToNewFolder);
            }

            //Recursively download subfolder stuff
            foreach (GoogleFile subFolder in subFolders)
            {
                DownloadFolder(subFolder.Id, pathToNewFolder);
            }
        }
예제 #3
0
        /// <summary>
        /// 取得單一請假單詳細資訊
        /// </summary>
        /// <param name="sqlLeave"></param>
        /// <param name="isManage"></param>
        /// <returns></returns>
        private Infrastructure.ViewModel.ActivityFunction.Leave.LeaveDetailViewModel GetDetailLeaveSqlQuery(AttendanceLeave sqlLeave, bool isManage)
        {
            var db         = _uow.DbContext;
            var resLeaveVM = new Infrastructure.ViewModel.ActivityFunction.Leave.LeaveDetailViewModel();

            resLeaveVM.FileList = new List <GoogleFile>();

            //取得請假資訊
            resLeaveVM.Comment    = sqlLeave.Comment;
            resLeaveVM.CreateDate = sqlLeave.CreateDate.ToLocalTime();
            resLeaveVM.Content    = sqlLeave.Content;
            resLeaveVM.LeaveDate  = sqlLeave.LeaveDate.ToLocalTime();
            resLeaveVM.LeaveType  = sqlLeave.LeaveType;
            resLeaveVM.Status     = sqlLeave.Status;
            resLeaveVM.StudId     = sqlLeave.StudId;
            resLeaveVM.Subject    = sqlLeave.Subject;
            //取得狀態名稱
            resLeaveVM.StatusName = Utility.ParaCondition.LeaveState.Status[sqlLeave.Status];
            //申請人資訊
            var applicationMemberInfo = db.Members.Find(sqlLeave.StudId);

            //請假單申請人姓名
            resLeaveVM.MemberAccount = applicationMemberInfo.Account;
            //請假單申請人帳號
            resLeaveVM.MemberName = applicationMemberInfo.Name;
            //請假單申請人頭像
            resLeaveVM.MemberImg = applicationMemberInfo.Photo;
            //所屬課程名稱
            resLeaveVM.CourseName = db.LearningCircle.Find(sqlLeave.LearningId).Name;
            //編碼eventId
            resLeaveVM.OuterKey = Utility.OuterKeyHelper.GuidToPageToken(sqlLeave.EventId);

            //取得請假單檔案資訊
            var sqlFile = db.LeaveFile.Where(t => t.LeaveId == sqlLeave.Id);

            foreach (var _file in sqlFile)
            {
                var googleFile = db.GoogleFile.Find(_file.GoogleId);

                var _fileEntity = new GoogleFile()
                {
                    Create_User  = googleFile.Create_User,
                    Create_Utc   = googleFile.Create_Utc.ToLocalTime(),
                    DownLoadUrl  = googleFile.DownLoadUrl,
                    FileId       = googleFile.FileId,
                    FileType     = googleFile.FileType,
                    Id           = googleFile.Id,
                    ImgUrl       = googleFile.ImgUrl,
                    Name         = googleFile.Name,
                    ParentFileId = googleFile.ParentFileId,
                    Size         = googleFile.Size,
                    WebViewUrl   = googleFile.WebViewUrl
                };

                resLeaveVM.FileList.Add(_fileEntity);
            }
            resLeaveVM.IsManager = isManage;
            return(resLeaveVM);
        }
예제 #4
0
        private static void DownloadFile(string fileId, string targetDirectory)
        {
            FilesResource.GetRequest request = driveService.Files.Get(fileId);
            request.Fields = "size,name,id,md5Checksum";
            GoogleFile        fileinfo = request.Execute();
            var               stream   = new MemoryStream();
            IDownloadProgress progress = request.DownloadWithStatus(stream);

            EditorCoroutineUtility.StartCoroutine(DownloadRoutine(progress, stream, fileId, fileinfo.Name, fileinfo.Size.Value, targetDirectory), Instance);
            WriteTasks.TryAdd(fileId, false);
        }
예제 #5
0
        public CloudFiles GetRootFile()
        {
            FileInfo info = new FileInfo();

            info.FileID    = "root";
            info.driveinfo = this.driveinfo;
            info.FileName  = "root";
            info.IsFile    = false;
            CloudFiles file = new GoogleFile(info);

            return(file);
        }
예제 #6
0
 public async Task AddFiles(string id)
 {
     try
     {
         GoogleFiles.Clear();
         string query     = "'" + id + "' in parents";
         var    parameter = new HttpParameterCollection
         {
             { "q", query },
             { "access_token", driveinfo.token.access_token }
         };
         var result = OAuthUtility.Get("https://www.googleapis.com/drive/v2/files", parameter);
         var map    = new ApiDataMapping();
         map.Add("id", "FileID");
         map.Add("title", "FileName");
         map.Add("fileExtension", "Extention");
         map.Add("downloadUrl", "DownUrl");
         map.Add("thumbnailLink", "Thumnail");
         map.Add("fileSize", "FileSize", typeof(long));
         map.Add("description", "Description");
         map.Add("modifiedDate", "modifiedDate");
         foreach (var item in result.CollectionItems.Items["items"].CollectionItems.Items.Values)
         {
             FileInfo fi = new FileInfo(item, map);
             fi.driveinfo = driveinfo;
             if (id == "root")
             {
                 fi.Path = "Google/";
             }
             if (fi.Extention != null)
             {
                 fi.DownUrl = "https://www.googleapis.com/drive/v2/files/" + fi.FileID + "?alt=media";
                 fi.IsFile  = true;
             }
             else
             {
                 fi.Path  += fi.FileName + "/";
                 fi.IsFile = false;
             }
             GoogleFile itemss = new GoogleFile(fi);
             GoogleFiles.Add(itemss);
         }
     }
     catch (Exception e)
     {
         MessageBox.Show(string.Format("구글 파일 불러오기 오류 : {0}", e));
     }
 }
예제 #7
0
        public override async Task AddFiles(string id)
        {
            FilesResource.ListRequest list = new FilesResource.ListRequest(service);
            string query = "'" + id + "' in parents";

            GoogleFiles = new List <GoogleFile>();
            try
            {
                list.MaxResults = 1000;
                if (query != null)
                {
                    list.Q = query;
                }
                FileList filesFeed = list.Execute();

                while (filesFeed.Items != null)
                {
                    // Adding each item  to the list.
                    foreach (var item in filesFeed.Items)
                    {
                        GoogleFile gfile = new GoogleFile(service);
                        gfile.Item = item;
                        GoogleFiles.Add(gfile);
                    }

                    // We will know we are on the last page when the next page token is
                    // null.
                    // If this is the case, break.
                    if (filesFeed.NextPageToken == null)
                    {
                        break;
                    }
                    list.PageToken = filesFeed.NextPageToken;
                    filesFeed      = list.Execute();
                }
            }
            catch
            {
                //return null;
            }
        }
예제 #8
0
        private async void NavigateToItem(CloudFiles item)
        {
            flowLayoutPanel_filecontent.Controls.Clear();
            if ((item as GoogleFile) != null)
            {
                GoogleFile file      = (GoogleFile)item;
                AllFolder  newfolder = new GoogleFolder(file.Service);
                await newfolder.AddFiles(file.GetId());

                LoadTile(newfolder);
            }
            else if ((item as OneDriveFile) != null)
            {
                OneDriveFile file      = (OneDriveFile)item;
                AllFolder    newfolder = new OneDriveFolder(file.Connect);
                await newfolder.AddFiles(file.GetId());

                LoadTile(newfolder);
            }
            else
            {
                MessageBox.Show("파일 열기 실패");
            }
        }
예제 #9
0
        /// <summary>
        /// 新增一筆上傳檔案活動
        /// </summary>
        /// <param name="circleKey"></param>
        /// <param name="memberId"></param>
        /// <param name="name"></param>
        /// <param name="googleDriveFileId"></param>
        /// <param name="folderId"></param>
        /// <param name="fileType"></param>
        /// <param name="fileSize"></param>
        /// <param name="fileShortImg"></param>
        /// <returns></returns>
        public Infrastructure.BusinessObject.MaterialEvent Add(string circleKey, int memberId, string name, string googleDriveFileId, string folderId, string fileType, int fileSize, string fileShortImg)
        {
            Guid     eveId = Guid.NewGuid();
            DateTime?dt    = DateTime.UtcNow;
            int      id    = cacheService.GetCircle(circleKey).Id;

            using (var db = _uow.DbContext)
            {
                using (var dbTransaction = db.Database.BeginTransaction())
                {
                    try
                    {
                        #region // 1. 建立上傳檔案活動物件
                        var objMaterial = new ActMaterial()
                        {
                            LearningId        = id,
                            Name              = name,
                            EventId           = eveId,
                            CreateUser        = memberId,
                            Created           = Infrastructure.Property.TimeData.Create(dt),
                            Updated           = Infrastructure.Property.TimeData.Create(null),
                            Deleted           = Infrastructure.Property.TimeData.Create(null),
                            GoogleDriveFileId = googleDriveFileId,
                            FileImgUrl        = string.Format("https://drive.google.com/a/g.scenet.pccu.edu.tw/uc?id={0}&export=download", googleDriveFileId),
                            FileLength        = fileSize,
                            FileType          = fileType,
                            GoogleDriveFolder = folderId
                        };
                        #endregion

                        #region // 2. 替上傳檔案活動建立一筆訊息物件

                        Activitys objAct = new Activitys()
                        {
                            Duration    = 0,
                            ModuleKey   = Utility.ParaCondition.ModuleType.Material,
                            ToRoomId    = circleKey,
                            CreateUser  = memberId,
                            Created     = Infrastructure.Property.TimeData.Create(dt),
                            Updated     = Infrastructure.Property.TimeData.Create(null),
                            Deleted     = Infrastructure.Property.TimeData.Create(null),
                            OuterKey    = eveId,
                            StartDate   = dt,
                            IsActivity  = true,
                            CardisShow  = true,
                            Publish_Utc = dt
                        };
                        #endregion

                        #region // 3. 建立一筆Google檔案

                        var objGoogle = new GoogleFile()
                        {
                            DownLoadUrl  = string.Format("https://drive.google.com/a/g.scenet.pccu.edu.tw/uc?id={0}&export=download", googleDriveFileId),
                            FileId       = googleDriveFileId,
                            FileType     = fileType,
                            ImgUrl       = string.Format("https://drive.google.com/a/g.scenet.pccu.edu.tw/uc?id={0}&export=download", fileShortImg),
                            WebViewUrl   = string.Format("https://drive.google.com/a/g.scenet.pccu.edu.tw/file/d/{0}/view?usp=drivesdk", googleDriveFileId),
                            Name         = name,
                            ParentFileId = folderId,
                            Size         = fileSize,
                            Create_User  = memberId,
                            Create_Utc   = Convert.ToDateTime(dt)
                        };
                        #endregion

                        // 3. 寫入DB
                        db.ActMaterial.Add(objMaterial);
                        db.Activitys.Add(objAct);
                        db.GoogleFile.Add(objGoogle);
                        db.SaveChanges();
                        dbTransaction.Commit();
                    }
                    catch (Exception ex)
                    {
                        dbTransaction.Rollback();
                        throw ex;
                    }
                }
            }
            #region // 回傳給APP的物件
            var data = new Infrastructure.BusinessObject.MaterialEvent()
            {
                ClassId    = circleKey,
                OuterKey   = eveId,
                Creator    = memberId.ToString(),
                CreateDate = Convert.ToDateTime(dt)
            };
            #endregion
            return(data);
        }
예제 #10
0
        public async Task <string> AddThumbnails()
        {
            Response.Headers.Add("Cache-Control", "no-cache");
            string result         = string.Empty;
            string newFolderId    = null;
            string imagesFolderId = null;
            string accountName    = this._httpContextAccessor.HttpContext.Request.Headers[DriveImportConstants.VTEX_ACCOUNT_HEADER_NAME];

            FolderIds folderIds = await _driveImportRepository.LoadFolderIds(accountName);

            if (folderIds != null)
            {
                newFolderId    = folderIds.NewFolderId;
                imagesFolderId = folderIds.ImagesFolderId;
                ListFilesResponse imageFiles = new ListFilesResponse();
                imageFiles.Files = new List <GoogleFile>();
                string nextPageToken = string.Empty;
                do
                {
                    ListFilesResponse listFilesResponse = await _googleDriveService.ListImagesInFolder(newFolderId, nextPageToken);

                    imageFiles.Files.AddRange(listFilesResponse.Files);
                    nextPageToken = listFilesResponse.NextPageToken;
                } while (!string.IsNullOrEmpty(nextPageToken));

                ListFilesResponse spreadsheets = await _googleDriveService.ListSheetsInFolder(imagesFolderId);

                if (imageFiles != null && spreadsheets != null)
                {
                    var sheetIds = spreadsheets.Files.Select(s => s.Id);
                    if (sheetIds != null)
                    {
                        foreach (var sheetId in sheetIds)
                        {
                            Dictionary <string, int> headerIndexDictionary = new Dictionary <string, int>();
                            string sheetContent = await _googleDriveService.GetSheet(sheetId, string.Empty);

                            GoogleSheet googleSheet    = JsonConvert.DeserializeObject <GoogleSheet>(sheetContent);
                            string      valueRange     = googleSheet.ValueRanges[0].Range;
                            string      sheetName      = valueRange.Split("!")[0];
                            string[]    sheetHeader    = googleSheet.ValueRanges[0].Values[0];
                            int         headerIndex    = 0;
                            int         rowCount       = googleSheet.ValueRanges[0].Values.Count();
                            int         writeBlockSize = rowCount;
                            foreach (string header in sheetHeader)
                            {
                                headerIndexDictionary.Add(header.ToLower(), headerIndex);
                                headerIndex++;
                            }

                            string[][] arrValuesToWrite = new string[writeBlockSize][];

                            for (int index = 1; index < rowCount; index++)
                            {
                                string imageFileName = string.Empty;

                                string[] dataValues = googleSheet.ValueRanges[0].Values[index];
                                if (headerIndexDictionary.ContainsKey("image") && headerIndexDictionary["image"] < dataValues.Count())
                                {
                                    imageFileName = dataValues[headerIndexDictionary["image"]];
                                }

                                GoogleFile file = imageFiles.Files.FirstOrDefault(f => f.Name.Equals(imageFileName));
                                if (file != null)
                                {
                                    string[] row = new string[headerIndexDictionary.Count];
                                    row[headerIndexDictionary["thumbnail"]] = $"=IMAGE(\"{ file.ThumbnailLink}\")";
                                    arrValuesToWrite[index - 1]             = row;
                                }
                            }

                            string lastColumn = ((char)(headerIndexDictionary.Count + 65)).ToString();

                            ValueRange valueRangeToWrite = new ValueRange
                            {
                                Range  = $"{sheetName}!A2:{lastColumn}{rowCount + 1}",
                                Values = arrValuesToWrite
                            };

                            await _googleDriveService.WriteSpreadsheetValues(sheetId, valueRangeToWrite);
                        }
                    }
                }
            }

            return(result);
        }
예제 #11
0
        /// <summary>
        /// 查詢請假資訊
        /// </summary>
        /// <param name="sqlLeave"></param>
        /// <param name="isManager"></param>
        /// <returns></returns>
        private List <Infrastructure.ViewModel.ActivityFunction.Leave.LeaveViewModel> GetLeaveSqlQuery(IQueryable <AttendanceLeave> sqlLeave, bool isManager)
        {
            var result = new List <Infrastructure.ViewModel.ActivityFunction.Leave.LeaveViewModel>();
            var db     = _uow.DbContext;

            foreach (var _item in sqlLeave.OrderByDescending(t => t.Id))
            {
                var resLeaveVM   = new Infrastructure.ViewModel.ActivityFunction.Leave.LeaveViewModel();
                var learningInfo = db.LearningCircle.Find(_item.LearningId);
                resLeaveVM.CourseName = learningInfo.Name;
                resLeaveVM.FileList   = new List <GoogleFile>();
                //取得請假資訊
                resLeaveVM.Info = new AttendanceLeave()
                {
                    Comment    = _item.Comment,
                    CreateDate = _item.CreateDate.ToLocalTime(),
                    EventId    = _item.EventId,
                    Content    = _item.Content,
                    Creator    = _item.Creator,
                    Id         = _item.Id,
                    LearningId = _item.LearningId,
                    LeaveDate  = _item.LeaveDate.ToLocalTime(),
                    LeaveType  = _item.LeaveType,
                    Status     = _item.Status,
                    StudId     = _item.StudId,
                    Subject    = _item.Subject
                };
                if (_item.UpdateTime != null)
                {
                    resLeaveVM.Info.UpdateTime = _item.UpdateTime.Value.ToLocalTime();
                }

                var applicationMemberInfo = db.Members.Find(_item.StudId);
                //請假單申請人姓名
                resLeaveVM.MemberAccount = applicationMemberInfo.Account;
                //請假單申請人帳號
                resLeaveVM.MemberName = applicationMemberInfo.Name;
                //編碼eventId
                resLeaveVM.OuterKey = Utility.OuterKeyHelper.GuidToPageToken(_item.EventId);
                //取得狀態名稱
                resLeaveVM.StatusName = Utility.ParaCondition.LeaveState.Status[_item.Status];
                //取得請假單檔案資訊
                var sqlFile = db.LeaveFile.Where(t => t.LeaveId == _item.Id);
                foreach (var _file in sqlFile)
                {
                    var googleFile  = db.GoogleFile.Find(_file.GoogleId);
                    var _fileEntity = new GoogleFile()
                    {
                        Create_User  = googleFile.Create_User,
                        Create_Utc   = googleFile.Create_Utc.ToLocalTime(),
                        DownLoadUrl  = googleFile.DownLoadUrl,
                        FileId       = googleFile.FileId,
                        FileType     = googleFile.FileType,
                        Id           = googleFile.Id,
                        ImgUrl       = googleFile.ImgUrl,
                        Name         = googleFile.Name,
                        ParentFileId = googleFile.ParentFileId,
                        Size         = googleFile.Size,
                        WebViewUrl   = googleFile.WebViewUrl
                    };

                    resLeaveVM.FileList.Add(_fileEntity);
                }
                resLeaveVM.IsManager = isManager;
                result.Add(resLeaveVM);
            }
            return(result);
        }