ariaNgTitleService.js 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. (function () {
  2. 'use strict';
  3. angular.module('ariaNg').factory('ariaNgTitleService', ['$filter', 'ariaNgConstants', 'ariaNgLocalizationService', 'ariaNgSettingService', function ($filter, ariaNgConstants, ariaNgLocalizationService, ariaNgSettingService) {
  4. var parseSettings = function (placeholder) {
  5. if (!placeholder) {
  6. return {};
  7. }
  8. var innerText = placeholder.substring(2, placeholder.length - 1); // remove ${ and }
  9. var items = innerText.split(':');
  10. var settings = {
  11. oldValue: placeholder
  12. };
  13. for (var i = 1; i < items.length; i++) {
  14. var pairs = items[i].split('=');
  15. if (pairs.length === 1) {
  16. settings[pairs[0]] = true;
  17. } else if (pairs.length === 2) {
  18. settings[pairs[0]] = pairs[1];
  19. }
  20. }
  21. return settings;
  22. };
  23. var replacePlaceholder = function (title, context) {
  24. var value = context.value;
  25. if (context.type === 'volume') {
  26. value = $filter('readableVolume')(value, context.scale);
  27. }
  28. if (context.prefix && !context.noprefix) {
  29. value = context.prefix + value;
  30. }
  31. if (context.suffix && !context.nosuffix) {
  32. value = value + context.suffix;
  33. }
  34. return title.replace(context.oldValue, value);
  35. };
  36. var replacePlaceholders = function (title, condition, context) {
  37. var regex = new RegExp('\\$\\{' + condition + '(:[a-zA-Z0-9]+(=[a-zA-Z0-9]+)?)*\\}', 'g');
  38. var results = title.match(regex);
  39. if (results && results.length > 0) {
  40. for (var i = 0; i < results.length; i++) {
  41. var innerContext = parseSettings(results[i]);
  42. angular.extend(innerContext, context);
  43. title = replacePlaceholder(title, innerContext);
  44. }
  45. }
  46. return title;
  47. };
  48. var replaceCurrentRPCAlias = function (title, value) {
  49. return replacePlaceholders(title, 'rpcprofile', {
  50. value: value
  51. });
  52. };
  53. var replaceDownloadingCount = function (title, value) {
  54. return replacePlaceholders(title, 'downloading', {
  55. prefix: ariaNgLocalizationService.getLocalizedText('Downloading') + ': ',
  56. value: value
  57. });
  58. };
  59. var replaceWaitingCount = function (title, value) {
  60. return replacePlaceholders(title, 'waiting', {
  61. prefix: ariaNgLocalizationService.getLocalizedText('Waiting') + ': ',
  62. value: value
  63. });
  64. };
  65. var replaceStoppedCount = function (title, value) {
  66. return replacePlaceholders(title, 'stopped', {
  67. prefix: ariaNgLocalizationService.getLocalizedText('Finished / Stopped') + ': ',
  68. value: value
  69. });
  70. };
  71. var replaceDownloadSpeed = function (title, value) {
  72. return replacePlaceholders(title, 'downspeed', {
  73. prefix: ariaNgLocalizationService.getLocalizedText('Download') + ': ',
  74. value: value,
  75. type: 'volume',
  76. suffix: '/s'
  77. });
  78. };
  79. var replaceUploadSpeed = function (title, value) {
  80. return replacePlaceholders(title, 'upspeed', {
  81. prefix: ariaNgLocalizationService.getLocalizedText('Upload') + ': ',
  82. value: value,
  83. type: 'volume',
  84. suffix: '/s'
  85. });
  86. };
  87. var replaceAgiaNgTitle = function (title) {
  88. return replacePlaceholders(title, 'title', {
  89. value: ariaNgConstants.title
  90. });
  91. };
  92. return {
  93. getFinalTitle: function (context) {
  94. var title = ariaNgSettingService.getTitle();
  95. if (!title) {
  96. return ariaNgConstants.title;
  97. }
  98. context = angular.extend({
  99. downloadingCount: 0,
  100. waitingCount: 0,
  101. stoppedCount: 0,
  102. downloadSpeed: 0,
  103. uploadSpeed: 0
  104. }, context);
  105. title = replaceCurrentRPCAlias(title, context.currentRPCAlias);
  106. title = replaceDownloadingCount(title, context.downloadingCount);
  107. title = replaceWaitingCount(title, context.waitingCount);
  108. title = replaceStoppedCount(title, context.stoppedCount);
  109. title = replaceDownloadSpeed(title, context.downloadSpeed);
  110. title = replaceUploadSpeed(title, context.uploadSpeed);
  111. title = replaceAgiaNgTitle(title);
  112. return title;
  113. },
  114. getFinalTitleByGlobalStat: function (params) {
  115. var context = {
  116. currentRPCAlias: (params && params.currentRpcProfile ? (params.currentRpcProfile.rpcAlias || (params.currentRpcProfile.rpcHost + ':' + params.currentRpcProfile.rpcPort)) : ''),
  117. downloadingCount: (params && params.globalStat ? params.globalStat.numActive : 0),
  118. waitingCount: (params && params.globalStat ? params.globalStat.numWaiting : 0),
  119. stoppedCount: (params && params.globalStat ? params.globalStat.numStopped : 0),
  120. downloadSpeed: (params && params.globalStat ? params.globalStat.downloadSpeed : 0),
  121. uploadSpeed: (params && params.globalStat ? params.globalStat.uploadSpeed : 0)
  122. };
  123. return this.getFinalTitle(context);
  124. }
  125. };
  126. }]);
  127. }());