DiskData.js 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308
  1. Namespace.register("U.MD.DK.M"); //Disk树操作
  2. //disk变量使用区域
  3. //硬盘里面复制粘贴的全局变量。,暂未整理。
  4. //US.disk.DiskDaren = {};
  5. //包含了当前所有用户的硬盘目录文件等数据的信息.
  6. US.disk.Disks = {};
  7. //当前操作用户的网盘数据,相当于US.disk.Disks[userid]。
  8. US.disk.UserDisk = null;
  9. // US.disk.Disks 用户网盘数据前台存储的全局变量 该全局变量为一个数组
  10. // US.disk.Disks[userid].directoryOrFiles 0为该userid用户下面的所有网盘目录及文件的数据信息。以数组形式展示
  11. // US.disk.Disks[userid].userInfo 用户信息,包含了用户在网盘的信息
  12. // US.disk.Disks[userid].directoryid 1为当前打开目录的id
  13. // US.disk.Disks[userid].currentDirectoryFile 当前打开目录下面所有的文件和文件夹
  14. // US.disk.Disks[userid].formel formel为当前网盘用户的弹框,这个是唯一的。
  15. // US.disk.Disks[userid].operator 使用该用户网盘的用户id,为登录用户的id或者是全0的guid
  16. //例:US.disk.Disks["张三"]; //张三的网盘信息,张三需要用guid表示,US.disk.Disks["95f7bacc-0b3a-4265-a2ea-15e066b97bf7"]
  17. //例:US.disk.Disks["李四"]; //李四的网盘信息,李四需要用guid表示。US.disk.Disks["f6d7a4b6-e34c-4964-beed-24187b2cb1ba"]
  18. //
  19. //disk文件和文件夹实体,US.disk.Disks里面的内容的数据结构。
  20. U.MD.DK.M.entity = function (directoryid, size, parentid, shortname, name, extendtype, serverurl, addtime, iconurl, deep, modifytime, encryt, filetype, descript, groupid, officevalue, userid, usernickname, username, imagehead) {
  21. this.UserDirectoryID = directoryid; //文件id或者目录id
  22. this.UserDirectorySize = size; //文件大小。
  23. this.UserDirectoryParentID = parentid; //父亲id
  24. this.UserDirectoryName = shortname; //文件名或者文件夹名,
  25. this.UserallDirectoryName = name; //文件名或者文件夹名,会删除不要
  26. this.UserDirectoryExtendType = extendtype; //文件扩展名,目录扩展名为folder,加密的目录也有一个标识。
  27. this.UserFilesServerName = serverurl; //文件服务器链接地址,需要统一加US.FILESYSTEMURL + filesinfo.UserDirectoryUrl
  28. this.UserDirectoryAddTime = addtime; //文件或者文件夹添加时间
  29. this.UserDirectoryUrl = iconurl; //文件服务器链接地址,缩略图,需要统一加US.FILESYSTEMURL + filesinfo.UserDirectoryUrl
  30. this.UserDirectoryDeep = deep; //文件夹深度
  31. this.UserDirectoryModifyTime = modifytime; //文件或者文件夹修改时间
  32. this.UserDirectoryEncrypt = encryt; //文件夹加密
  33. this.filetype = filetype; //文件类型,文件夹为1,文件为0
  34. this.Descript = descript; //文件描述。例如图片,声音,视频的描述
  35. this.GroupID = groupid; //群id,用于群文件
  36. this.UsOffice = officevalue; //文件内容。
  37. this.UserId = userid; //文件或者文件夹所属用户id
  38. this.UserNickName = usernickname; //文件或者文件夹所属用户昵称
  39. this.UserName = username; //文件或者文件夹所属用户账号
  40. this.UserThumbnailImageHead = imagehead; //文件或者文件夹所属用户头像
  41. this.Child = null; //文件夹中的子文件夹数组。
  42. this.Parent = null; //文件或者文件夹的父亲
  43. }
  44. //初始化一级目录的全局变量。即左边树目录结构。
  45. US.disk.initTree = [
  46. [Guid.newGuid(), 0, US.MYDISK, "最新文档", "最新文档", "folder", null, null, null, 1, null, null, 0, "", true],
  47. [Guid.newGuid(), 0, US.MYDISK, "我的协同", "我的协同", "folder", null, null, null, 1, null, null, 0, "", true],
  48. [Guid.newGuid(), 0, US.MYDISK, "他人邀请", "他人邀请", "folder", null, null, null, 1, null, null, 0, "", true],
  49. [US.MYFOLDERID, 0, US.MYDISK, "电脑", "我的文档", "folder", null, null, null, 1, null, null, 0, ""],
  50. [US.FTPFOLDERID, 0, US.MYDISK, "ftp", "Ftp文件传输", "folder", null, null, null, 1, null, null, 0, "", ""],
  51. [US.VIDEOFOLDERID, 0, US.MYDISK, "视频", "在线视频", "folder", null, null, null, 1, null, null, 0, ""],
  52. [US.IMAGEFOLDERID, 0, US.MYDISK, "相册", "图片、相册", "folder", null, null, null, 1, null, null, 0, ""],
  53. [US.MUSICEFOLDERID, 0, US.MYDISK, "音乐", "音乐收听", "folder", null, null, null, 1, null, null, 0, ""]
  54. ];
  55. //文件类型全局变量。
  56. US.disk.fileType = {
  57. "image": ["jpg", "gif", "png", "bmp", "jpeg", "JPG", "GIF", "BMP", "PNG", "JPEG"],
  58. "music": ["mp3"],
  59. "video": ["wmv", "video", "ogg", "webm", "mp4"],
  60. "usword": ["uw"],
  61. "word": ["doc", "docx"],
  62. "usnav": ["un"],
  63. "usexcel": ["ue"],
  64. "text": ["rtf", "mht", "txt", "htm", "html", "wsh", "wsf", "cpp", "c", "css", "txt", "php", "cs", "java", "log", "sql", "jsp"]
  65. }
  66. //全局变量,应用程序类型,包含了应用扩展名,id,中文描述,图标的css名。
  67. US.disk.applicationTypes = {
  68. "image": {
  69. //图片类型的后缀
  70. "types": US.disk.fileType.image,
  71. //该格式对应在网盘的目录id
  72. "directoryid": US.IMAGEFOLDERID,
  73. //格式对应的名字
  74. "name": "图片",
  75. //格式对应的样式
  76. "classname": ["U_MD_UI_UP_COIT"]
  77. },
  78. "music": {
  79. //音乐类型的后缀
  80. "types": US.disk.fileType.music,
  81. //该格式对应在网盘的目录id
  82. "directoryid": US.MUSICEFOLDERID,
  83. //格式对应的名字
  84. "name": "音乐",
  85. //格式对应的样式
  86. "classname": ["U_MD_UI_UP_COIY", "U_MD_DK_RZOY", "U_MD_DK_LCY"]
  87. },
  88. "video": {
  89. //视频类型的后缀
  90. "types": US.disk.fileType.video,
  91. //该格式对应在网盘的目录id
  92. "directoryid": US.VIDEOFOLDERID,
  93. //格式对应的名字
  94. "name": "视频",
  95. //格式对应的样式
  96. "classname": ["U_MD_UI_UP_COIS", "U_MD_DK_RZOP", "U_MD_DK_LCP"]
  97. },
  98. "word": {
  99. //互联办公word文档格式
  100. "types": US.disk.fileType.word,
  101. //该格式对应在网盘的目录id
  102. "directoryid": US.MYFOLDERID,
  103. //格式对应的名字
  104. "name": "Office文档",
  105. //格式对应的样式
  106. "classname": ["U_MD_UI_UP_COIW", "U_MD_DK_REODW", "U_MD_DK_LCD"]
  107. },
  108. "uw": {
  109. //互联办公word文档格式
  110. "types": US.disk.fileType.usword,
  111. //该格式对应在网盘的目录id
  112. "directoryid": US.MYFOLDERID,
  113. //格式对应的名字
  114. "name": "文档",
  115. //格式对应的样式
  116. "classname": ["U_MD_UI_UP_COIW", "U_MD_DK_RZOD", "U_MD_DK_LCD"]
  117. },
  118. "un": {
  119. //互联办公word文档格式
  120. "types": US.disk.fileType.usnav,
  121. //该格式对应在网盘的目录id
  122. "directoryid": US.MYFOLDERID,
  123. //格式对应的名字
  124. "name": "建站文档",
  125. //格式对应的样式
  126. "classname": ["U_MD_UI_UP_COIW", "U_MD_DK_REODN", "U_MD_DK_LCD"]
  127. },
  128. "ue": {
  129. //互联办公Excel文档格式
  130. //视频类型的后缀
  131. "types": US.disk.fileType.usexcel,
  132. //该格式对应在网盘的目录id
  133. "directoryid": US.EMPTYGUID,
  134. //格式对应的名字
  135. "name": "表格",
  136. //格式对应的样式
  137. "classname": ["U_MD_UI_UP_COIE", "U_MD_DK_RZOE", "U_MD_DK_LCE"]
  138. },
  139. "text": {
  140. //可以通过记事本打开的文件格式
  141. "types": US.disk.fileType.text,
  142. //该格式对应在网盘的目录id
  143. "directoryid": US.EMPTYGUID,
  144. //格式对应的名字
  145. "name": "文档",
  146. //格式对应的样式
  147. "classname": ["U_MD_UI_UP_COIT", "downel_content_a_r", "U_MD_DK_LCB"]
  148. },
  149. "folder": {
  150. //文件夹处理,一种是加密文件夹,一种是不加密
  151. "types": ["folder", "folderencrypt"],
  152. //该格式对应在网盘的目录id
  153. "directoryid": US.EMPTYGUID,
  154. //格式对应的名字
  155. "name": "文件夹",
  156. //格式对应的样式
  157. "classname": ["", "U_MD_DK_RZOW", "U_MD_DK_LCW"]
  158. },
  159. "unknownfile": {
  160. //无法用应用打开的文件类型
  161. "types": [],
  162. //该格式对应在网盘的目录id
  163. "directoryid": US.MYFOLDERID,
  164. //格式对应的名字
  165. "name": "文件",
  166. //格式对应的样式
  167. "classname": ["U_MD_UI_UP_COIT", "downel_content_a_r", "U_MD_DK_LCB"]
  168. }
  169. }
  170. /**
  171. * 循环添加文件到全局树里
  172. * @param {array} 文件数组
  173. * @param {object} 网盘全局信息
  174. * @param {object} 添加文件是否具有群id
  175. */
  176. U.MD.DK.M.entity.add = function (filesinfo, diskinfo, isgroup) {
  177. var i;
  178. for (i = 0; i < filesinfo.length; i++) {
  179. //如果是新建群文件,则通过放在前面,这样的话查询方便
  180. if (isgroup) {
  181. diskinfo.directoryOrFiles.splice(7, 0, filesinfo[i]);
  182. }
  183. //普通文件添加处理
  184. else {
  185. diskinfo.directoryOrFiles.push(filesinfo[i]);
  186. }
  187. }
  188. }
  189. /**
  190. * 循环添加文件到全局树里
  191. * @param {array} 文件数组
  192. * @param {object} 制定的文件夹的信息
  193. */
  194. U.MD.DK.M.entity.addChild = function (filesinfo, dirinfo) {
  195. //在指定的目录下的文件添子文件或者文件夹
  196. if (!dirinfo.Child) { //如果有子目录那么就直接添加
  197. dirinfo.Child = [];
  198. }
  199. //循环文件处理
  200. for (var i = 0; i < filesinfo.length; i++) {
  201. dirinfo.Child.push(filesinfo[i]);
  202. filesinfo[i].Parent = dirinfo;
  203. }
  204. }
  205. /**
  206. * 循环添加文件到全局树里
  207. * @param {array} 文件数组
  208. * @param {object} 制定文件夹的信息
  209. * @param {object} 添加文件是否具有群id
  210. */
  211. U.MD.DK.M.entity.del = function (filesinfo, diskinfo) {
  212. var i,
  213. j,
  214. _parent,
  215. // _delfilesize = 0, //删除的文件大小
  216. // _delfilenum = 0, //删除的文件数量
  217. _diskfileanddir = diskinfo.directoryOrFiles //网盘
  218. ;
  219. //文件信息
  220. for (i = 0; i < filesinfo.length; i++) {
  221. //网盘所有的文件信息
  222. for (j = 0; j < _diskfileanddir.length; j++) {
  223. //找到指定需要删除的文件
  224. if (_diskfileanddir[j].UserDirectoryID == filesinfo[i].UserDirectoryID) {
  225. _diskfileanddir.splice(j, 1); //在disk里面删除文件或者文件夹
  226. break;
  227. }
  228. }
  229. _parent = filesinfo[i].Parent; //获取移除目录的上级目录
  230. //循环移除子元素
  231. for (j = 0; j < _parent.Child.length; j++) {
  232. //找到指定需要删除的文件
  233. if (_parent.Child[j].UserDirectoryID == filesinfo[i].UserDirectoryID) {
  234. _parent.Child.splice(j, 1); //在disk里面删除文件或者文件夹
  235. }
  236. }
  237. }
  238. }
  239. /**
  240. * 递归修改所有的子目录文件的Id
  241. * @param {array} 文件数组
  242. * @param {object} 修改的属性 例:{groupid:a} //修改所有的群id
  243. */
  244. U.MD.DK.M.recursionUpdateDirectory = function (filesinfo, attribute) {
  245. //循环所有的文件修改
  246. for (i = 0; i < filesinfo.length; i++) {
  247. //修改文件的属性
  248. U.UF.C.AddObj(filesinfo[i], attribute);
  249. //如果文件是文件夹,那么查找自己节点元素,不断的递归修改
  250. if (!filesinfo[i].fileType && filesinfo[i].Child) {
  251. //递归修改
  252. U.MD.DK.M.recursionUpdateDirectory(filesinfo[i].Child, attribute);
  253. }
  254. }
  255. }
  256. /**
  257. * 用户操作切换,可以查看多个用户的硬盘,所以需要切换。登录用户和非登录用户有不同权限。
  258. * @param {string} 用户id
  259. * @param {string} 用户名
  260. * @return {object} 用户在网盘的全局变量。
  261. */
  262. U.MD.DK.M.diskOperatingSwitch = function (userid, username) {
  263. userid = userid || US.userInfo.userid; //如果有用户id,则userid为用户id,否则为登录用户id。
  264. if (userid) {
  265. var i, _userinfo, //需要返回的用户网盘信息
  266. _diskinfo = US.disk.Disks; //_UCE为包含了所有用户硬盘信息的集合。
  267. if (_diskinfo && !_diskinfo[userid]) { //判断用户的网盘信息是否可以通过userid找到
  268. for (i in _diskinfo) { //循环网盘信息
  269. if (_diskinfo[i] && _diskinfo[i][1] && _diskinfo[i][1][0] && _diskinfo[i][1][0].UserName == username) { //这里也会有null情况,因为这个变量的定义在U.A.Request之前,所以可能会存在还没有获取数据就在此进入这个函数的情况
  270. userid = _diskinfo[i][1][0].UserId;
  271. }
  272. }
  273. }
  274. US.disk.UserDisk = _diskinfo[userid]; //设置当前使用的网盘用户的信息为得到的用户id
  275. return _diskinfo[userid];
  276. }
  277. }
  278. /**
  279. * 通过用户名搜索用户网盘信息
  280. * @param {string} 用户名
  281. * @return {object} 用户在网盘的全局变量。
  282. */
  283. U.MD.DK.getUserDiskByName = function (username) {
  284. var i,
  285. _userdisk, //获取的用户硬盘信息
  286. _diskinfo = US.disk.Disks; //存储打开用户的网盘的信息
  287. for (i in _diskinfo) { //循环获取
  288. _userdisk = _diskinfo[i][1]; //查看用户网盘信息
  289. if (_userdisk && _userdisk[0].UserName == username) { //判断网盘信息的用户名是否等于传入的用户名
  290. return _userdisk[0];
  291. }
  292. }
  293. return {};
  294. }