(function () {
    'use strict';

    angular.module('ariaNg').controller('DownloadListController', ['$scope', '$window', '$location', '$interval', 'translateFilter',  'aria2RpcService', 'ariaNgSettingService', 'utils', function ($scope, $window, $location, $interval, translateFilter, aria2RpcService, ariaNgSettingService, utils) {
        var location = $location.path().substring(1);
        var downloadTaskRefreshPromise = null;

        var getTitleWidth = function () {
            var titleColumn = angular.element('.task-table > .row > .col-md-8:first-child');

            if (titleColumn.length > 0) {
                return titleColumn.width();
            } else {
                var taskTable = angular.element('.task-table');

                if ($window.innerWidth <= 767) {
                    return taskTable.width();
                } else {
                    return taskTable.width() / 12 * 8;
                }
            }
        };

        var calculateDownloadRemainTime = function (remainBytes, downloadSpeed) {
            if (downloadSpeed == 0) {
                return 0;
            }

            return remainBytes / downloadSpeed;
        };

        var processDownloadTask = function (task) {
            var totalLength = parseInt(task.totalLength);
            var completedLength = parseInt(task.completedLength);
            var remainLength = totalLength - completedLength;

            if (task.bittorrent && task.bittorrent.info) {
                task.taskName = task.bittorrent.info.name;
            } else if (task.files && task.files.length >= 1) {
                task.taskName = utils.getFileNameFromPath(task.files[0].path);
            } else {
                task.taskName = translateFilter('Unknown');
            }

            task.fileSize = totalLength;
            task.completePercent = completedLength / totalLength * 100;
            task.idle = task.downloadSpeed == 0;
            task.remainTime = calculateDownloadRemainTime(remainLength, task.downloadSpeed);
        };

        var refreshDownloadTask = function () {
            var invokeMethod = null;
            var params = [];

            if (location == 'downloading') {
                invokeMethod = aria2RpcService.tellActive;
            } else if (location == 'waiting') {
                invokeMethod = aria2RpcService.tellWaiting;
                params = [0, 1000];
            } else if (location == 'stopped') {
                invokeMethod = aria2RpcService.tellStopped;
                params = [0, 1000];
            }

            if (invokeMethod) {
                invokeMethod({
                    params: params,
                    callback: function (result) {
                        if (result && result.length > 0) {
                            for (var i = 0; i < result.length; i++) {
                                processDownloadTask(result[i]);
                            }
                        }

                        if (!utils.replaceArray(result, $scope.downloadTasks, 'gid')) {
                            $scope.downloadTasks = result;
                        }
                    }
                });
            }
        };

        refreshDownloadTask();

        angular.element($window).bind('resize', function () {
            $scope.titleWidth = getTitleWidth();
        });

        $scope.titleWidth = getTitleWidth();

        $scope.getOrderType = function () {
            return ariaNgSettingService.getDisplayOrder();
        };

        if (ariaNgSettingService.getDownloadTaskRefreshInterval() > 0) {
            downloadTaskRefreshPromise = $interval(function () {
                refreshDownloadTask();
            }, ariaNgSettingService.getDownloadTaskRefreshInterval());
        }

        $scope.$on('$destroy', function () {
            if (downloadTaskRefreshPromise) {
                $interval.cancel(downloadTaskRefreshPromise);
            }
        });
    }]);
})();

@@ -2601,32 +2601,39 @@
                 
+return 
 invokeMethod(%7B%0A 
@@ -3211,24 +3211,45 @@
  %7D;%0A%0A       
+ $scope.loadPromise =
  refreshDown

add loading tips