datamanager.js 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343
  1. /*
  2. */
  3. const events = require('events'),
  4. path = require('path'),
  5. fs = require('fs'),
  6. { app } = require('electron'),
  7. LiveMeAPI = require('liveme-api');
  8. var bookmarks = [], profiles = [], downloaded = [], watched = [], errored = [], queued = [], is_busy = false, can_write = true;
  9. class DataManager {
  10. constructor() {
  11. this.events = new (events.EventEmitter)();
  12. }
  13. disableWrites() { can_write = false; }
  14. enableWrites() { can_write = true; }
  15. wipeAllData() {
  16. bookmarks = [];
  17. profiles = [];
  18. downloaded = [];
  19. watched = [];
  20. errored = [];
  21. queued = [];
  22. fs.writeFile(path.join(app.getPath('appData'), app.getName(), 'bookmarks.json'), '[]', function(){ });
  23. fs.writeFile(path.join(app.getPath('appData'), app.getName(), 'profiles.json'), '[]', function(){ });
  24. fs.writeFile(path.join(app.getPath('appData'), app.getName(), 'downloaded.json'), '[]', function(){ });
  25. fs.writeFile(path.join(app.getPath('appData'), app.getName(), 'watched.json'), '[]', function(){ });
  26. fs.writeFile(path.join(app.getPath('appData'), app.getName(), 'errored.json'), '[]', function(){ });
  27. fs.writeFile(path.join(app.getPath('appData'), app.getName(), 'queued.json'), '[]', function(){ });
  28. }
  29. getStats() {
  30. return {
  31. bookmarks: bookmarks.length,
  32. profiles: profiles.length,
  33. downloaded: downloaded.length,
  34. watched: watched.length
  35. }
  36. }
  37. loadFromDisk() {
  38. if (fs.existsSync(path.join(app.getPath('appData'), app.getName(), 'bookmarks.json'))) {
  39. fs.readFile(path.join(app.getPath('appData'), app.getName(), 'bookmarks.json'), 'utf8', function (err,data) {
  40. if (err) {
  41. bookmarks = [];
  42. } else {
  43. bookmarks = JSON.parse(data);
  44. }
  45. });
  46. }
  47. if (fs.existsSync(path.join(app.getPath('appData'), app.getName(), 'profiles.json'))) {
  48. fs.readFile(path.join(app.getPath('appData'), app.getName(), 'profiles.json'), 'utf8', function (err,data) {
  49. if (err) {
  50. profiles = [];
  51. } else {
  52. profiles = JSON.parse(data);
  53. }
  54. });
  55. }
  56. if (fs.existsSync(path.join(app.getPath('appData'), app.getName(), 'downloaded.json'))) {
  57. fs.readFile(path.join(app.getPath('appData'), app.getName(), 'downloaded.json'), 'utf8', function (err,data) {
  58. if (err) {
  59. downloaded = [];
  60. } else {
  61. downloaded = JSON.parse(data);
  62. }
  63. });
  64. }
  65. if (fs.existsSync(path.join(app.getPath('appData'), app.getName(), 'watched.json'))) {
  66. fs.readFile(path.join(app.getPath('appData'), app.getName(), 'watched.json'), 'utf8', function (err,data) {
  67. if (err) {
  68. watched = [];
  69. } else {
  70. watched = JSON.parse(data);
  71. }
  72. });
  73. }
  74. if (fs.existsSync(path.join(app.getPath('appData'), app.getName(), 'errored.json'))) {
  75. fs.readFile(path.join(app.getPath('appData'), app.getName(), 'errored.json'), 'utf8', function (err,data) {
  76. if (err) {
  77. errored = [];
  78. } else {
  79. errored = JSON.parse(data);
  80. }
  81. });
  82. }
  83. if (fs.existsSync(path.join(app.getPath('appData'), app.getName(), 'queued.json'))) {
  84. fs.readFile(path.join(app.getPath('appData'), app.getName(), 'queued.json'), 'utf8', function (err,data) {
  85. if (err) {
  86. queued = [];
  87. } else {
  88. queued = JSON.parse(data);
  89. }
  90. });
  91. }
  92. }
  93. saveToDisk() {
  94. if (is_busy == true) return;
  95. if (can_write == false) return;
  96. fs.writeFile(path.join(app.getPath('appData'), app.getName(), 'bookmarks.json'), JSON.stringify(bookmarks, null, 2), function(){ });
  97. fs.writeFile(path.join(app.getPath('appData'), app.getName(), 'profiles.json'), JSON.stringify(profiles), function(){ });
  98. fs.writeFile(path.join(app.getPath('appData'), app.getName(), 'downloaded.json'), JSON.stringify(downloaded), function(){ });
  99. fs.writeFile(path.join(app.getPath('appData'), app.getName(), 'watched.json'), JSON.stringify(watched), function(){ });
  100. fs.writeFile(path.join(app.getPath('appData'), app.getName(), 'errored.json'), JSON.stringify(errored), function(){ });
  101. fs.writeFile(path.join(app.getPath('appData'), app.getName(), 'queued.json'), JSON.stringify(queued), function(){ });
  102. }
  103. /*
  104. * Track Downloaded Replays
  105. */
  106. addDownloaded(vidid) {
  107. is_busy = true;
  108. var add = true, dt = new Date();
  109. for (var i = 0; i < downloaded.length; i++) {
  110. if (downloaded[i].videoid == vidid) {
  111. downloaded[i].dt = Math.floor(dt.getTime() / 1000);
  112. add =false;
  113. }
  114. }
  115. if (add) {
  116. downloaded.push({
  117. dt: Math.floor(dt.getTime() / 1000),
  118. videoid: vidid
  119. });
  120. }
  121. is_busy = false;
  122. }
  123. wasDownloaded(vidid) {
  124. var ret = false;
  125. for (var i = 0; i < downloaded.length; i++) {
  126. if (downloaded[i].videoid == vidid) ret = new Date(downloaded[i].dt * 1000);
  127. }
  128. return ret;
  129. }
  130. /*
  131. * Track Watched Replays
  132. */
  133. addWatched(vidid) {
  134. is_busy = true;
  135. var add = true, dt = new Date();
  136. for (var i = 0; i < watched.length; i++) {
  137. if (watched[i].videoid == vidid) {
  138. watched[i].dt = Math.floor(dt.getTime() / 1000);
  139. add =false;
  140. }
  141. }
  142. if (add) {
  143. watched.push({
  144. dt: Math.floor(dt.getTime() / 1000),
  145. videoid: vidid
  146. });
  147. }
  148. is_busy = false;
  149. }
  150. wasWatched(vidid) {
  151. var ret = false;
  152. for (var i = 0; i < watched.length; i++) {
  153. if (watched[i].videoid == vidid) ret = new Date(watched[i].dt * 1000);
  154. }
  155. return ret;
  156. }
  157. dropWatched(oldest_date, dry_run) {
  158. if (dry_run == null) dry_run = false;
  159. var ret = 0, temp = [];
  160. for (var i = 0; i < watched.length; i++) {
  161. if (watched[i].dt > oldest_date) {
  162. temp.push(watched[i]);
  163. ret++;
  164. }
  165. }
  166. if (!dry_run) {
  167. watched = temp;
  168. fs.writeFile(path.join(app.getPath('appData'), app.getName(), 'watched.json'), JSON.stringify(watched), function(){ });
  169. }
  170. return ret;
  171. }
  172. /*
  173. * Track Viewed Profiles
  174. */
  175. addViewed(userid) {
  176. is_busy = true;
  177. var add = true, dt = new Date();
  178. for (var i = 0; i < profiles.length; i++) {
  179. if (profiles[i].userid == userid) {
  180. profiles[i].dt = Math.floor(dt.getTime() / 1000);
  181. add =false;
  182. }
  183. }
  184. if (add) {
  185. profiles.push({
  186. dt: Math.floor(dt.getTime() / 1000),
  187. userid: userid
  188. });
  189. }
  190. is_busy = false;
  191. }
  192. wasProfileViewed(userid) {
  193. var ret = false;
  194. for (var i = 0; i < profiles.length; i++) {
  195. if (profiles[i].userid == userid) ret = new Date(profiles[i].dt * 1000);
  196. }
  197. return ret;
  198. }
  199. unviewProfiles(oldest_date, dry_run) {
  200. if (dry_run == null) dry_run = false;
  201. console.log('Old Viewed Profiles Count: ' + profiles.length);
  202. var ret = 0, temp = [];
  203. for (var i = 0; i < profiles.length; i++) {
  204. if (profiles[i].dt > oldest_date) {
  205. temp.push(profiles[i]);
  206. ret++;
  207. }
  208. }
  209. if (!dry_run) {
  210. profiles = temp;
  211. fs.writeFile(path.join(app.getPath('appData'), app.getName(), 'profiles.json'), JSON.stringify(profiles), function(){ });
  212. }
  213. console.log('New Viewed Profiles Count: ' + temp.length);
  214. return ret;
  215. }
  216. /*
  217. * Account Bookmarks
  218. */
  219. addBookmark(user) {
  220. is_busy = true;
  221. var add = true;
  222. for (var i = 0; i < bookmarks.length; i++) {
  223. if (bookmarks[i].uid == user.uid) add = false;
  224. }
  225. if (add == true) {
  226. bookmarks.push(user);
  227. }
  228. is_busy = false;
  229. }
  230. removeBookmark(user) {
  231. is_busy = true;
  232. for (var i = 0; i < bookmarks.length; i++) {
  233. if (bookmarks[i].uid == user.uid) {
  234. bookmarks.splice(i, 1);
  235. }
  236. }
  237. is_busy = false;
  238. }
  239. updateBookmark(user) {
  240. is_busy = true;
  241. var add = true;
  242. for (var i = 0; i < bookmarks.length; i++) {
  243. if (bookmarks[i].uid == user.uid) {
  244. bookmarks[i] = user;
  245. }
  246. }
  247. is_busy = false;
  248. }
  249. isBookmarked(user) {
  250. var ret = false;
  251. for (var i = 0; i < bookmarks.length; i++) {
  252. if (bookmarks[i].uid == user.uid) ret = true;
  253. }
  254. return ret;
  255. }
  256. getAllBookmarks() { return bookmarks; }
  257. getSingleBookmark(userid) {
  258. var ret = false;
  259. for (var i = 0; i < bookmarks.length; i++) {
  260. if (bookmarks[i].uid == userid) ret = bookmarks[i];
  261. }
  262. return ret;
  263. }
  264. /*
  265. * Queued
  266. */
  267. addToQueueList(vid) {
  268. is_busy = true;
  269. var add = true;
  270. for (var i = 0; i < queued.length; i++) {
  271. if (queued[i] == vid) add = false;
  272. }
  273. if (add == true) {
  274. queued.push(vid);
  275. }
  276. fs.writeFile(path.join(app.getPath('appData'), app.getName(), 'queued.json'), JSON.stringify(queued), function(){ });
  277. is_busy = false;
  278. }
  279. removeFromQueueList(vid) {
  280. is_busy = true;
  281. for (var i = 0; i < queued.length; i++) {
  282. if (queued[i] == vid) {
  283. queued.splice(i, 1);
  284. }
  285. }
  286. fs.writeFile(path.join(app.getPath('appData'), app.getName(), 'queued.json'), JSON.stringify(queued), function(){ });
  287. is_busy = false;
  288. }
  289. /*
  290. * Queued
  291. */
  292. addToErroredList(vid) {
  293. is_busy = true;
  294. var add = true;
  295. for (var i = 0; i < errored.length; i++) {
  296. if (errored[i] == vid) add = false;
  297. }
  298. if (add == true) {
  299. errored.push(vid);
  300. }
  301. fs.writeFile(path.join(app.getPath('appData'), app.getName(), 'errored.json'), JSON.stringify(errored), function(){ });
  302. is_busy = false;
  303. }
  304. }
  305. exports.DataManager = DataManager;