improve piece map performance
This commit is contained in:
parent
1376694c24
commit
9a71545303
|
@ -11,19 +11,46 @@
|
|||
pieceCount: '='
|
||||
},
|
||||
link: function (scope, element) {
|
||||
var pieces = [];
|
||||
var currentPieceStatus = [];
|
||||
|
||||
var redraw = function () {
|
||||
var pieces = aria2TaskService.getPieceStatus(scope.bitField, scope.pieceCount);
|
||||
currentPieceStatus = aria2TaskService.getPieceStatus(scope.bitField, scope.pieceCount);
|
||||
pieces.length = 0;
|
||||
element.empty();
|
||||
|
||||
var pieceCount = Math.max(1, pieces.length);
|
||||
var pieceCount = Math.max(1, currentPieceStatus.length);
|
||||
|
||||
for (var i = 0; i < pieceCount; i++) {
|
||||
element.append('<div class="piece' + (pieces[i] ? ' piece-completed' : '') + '"></div>');
|
||||
var piece = angular.element('<div class="piece' + (currentPieceStatus[i] ? ' piece-completed' : '') + '"></div>');
|
||||
pieces.push(piece);
|
||||
element.append(piece);
|
||||
}
|
||||
};
|
||||
|
||||
scope.$watch('bitField', function () {
|
||||
var refresh = function () {
|
||||
var newPieceStatus = aria2TaskService.getPieceStatus(scope.bitField, scope.pieceCount);
|
||||
|
||||
if (!currentPieceStatus || !newPieceStatus || currentPieceStatus.length != newPieceStatus.length || newPieceStatus.length != pieces.length) {
|
||||
redraw();
|
||||
return;
|
||||
}
|
||||
|
||||
for (var i = 0; i < pieces.length; i++) {
|
||||
if (currentPieceStatus[i] != newPieceStatus[i]) {
|
||||
if (newPieceStatus[i]) {
|
||||
pieces[i].addClass('piece-completed');
|
||||
} else {
|
||||
pieces[i].removeClass('piece-completed');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
currentPieceStatus = newPieceStatus;
|
||||
};
|
||||
|
||||
scope.$watch('bitField', function () {
|
||||
refresh();
|
||||
});
|
||||
|
||||
scope.$watch('pieceNumber', function () {
|
||||
|
|
Reference in a new issue