admin: new route to check file on disk
This commit is contained in:
parent
5b30788cff
commit
20dfd99ec0
@ -15,6 +15,8 @@ func init() {
|
||||
router.GET("/api/files/:fileid", apiHandler(fileHandler(showFile)))
|
||||
router.PUT("/api/files/:fileid", apiHandler(fileHandler(updateFile)))
|
||||
router.DELETE("/api/files/:fileid", apiHandler(fileHandler(deleteFile)))
|
||||
|
||||
router.POST("/api/files/:fileid/check", apiHandler(fileHandler(checkFile)))
|
||||
}
|
||||
|
||||
func listFiles(_ httprouter.Params, body []byte) (interface{}, error) {
|
||||
@ -48,3 +50,7 @@ func updateFile(file fic.EFile, body []byte) (interface{}, error) {
|
||||
func deleteFile(file fic.EFile, _ []byte) (interface{}, error) {
|
||||
return file.Delete()
|
||||
}
|
||||
|
||||
func checkFile(file fic.EFile, _ []byte) (interface{}, error) {
|
||||
return true, file.CheckFileOnDisk()
|
||||
}
|
||||
|
@ -695,6 +695,7 @@ angular.module("FICApp")
|
||||
|
||||
.controller("FilesListController", function($scope, File, $location, $http, $rootScope) {
|
||||
$scope.files = File.query();
|
||||
$scope.errfnd = 0;
|
||||
$scope.fields = ["id", "path", "name", "checksum", "size"];
|
||||
|
||||
$scope.clearFiles = function(id) {
|
||||
@ -704,17 +705,18 @@ angular.module("FICApp")
|
||||
};
|
||||
$scope.checksum = function(f) {
|
||||
$http({
|
||||
url: "/api/files/" + f.id + "/checksum",
|
||||
method: "GET"
|
||||
url: "/api/files/" + f.id + "/check",
|
||||
method: "POST"
|
||||
}).then(function(response) {
|
||||
if (response.data)
|
||||
$rootScope.newBox('danger', response.data);
|
||||
f.err = true;
|
||||
}, function(response) {
|
||||
$scope.inSync = false;
|
||||
$rootScope.newBox('danger', 'An error occurs when checking files:', response.data);
|
||||
$scope.errfnd += 1;
|
||||
f.err = response.data.errmsg;
|
||||
})
|
||||
};
|
||||
$scope.checksumAll = function() {
|
||||
$scope.errfnd = 0;
|
||||
angular.forEach($scope.files, function(file) {
|
||||
$scope.checksum(file);
|
||||
});
|
||||
|
@ -1,5 +1,6 @@
|
||||
<h2>
|
||||
Fichiers
|
||||
<small class="text-muted" ng-if="errfnd > 0"><span class="glyphicon glyphicon-exclamation-sign"></span> <ng-pluralize count="errfnd" when="{'one': '{} erreur trouvée', 'other': '{} erreurs trouvées'}"></ng-pluralize></small>
|
||||
<button ng-click="checksumAll()" class="float-right btn btn-sm btn-secondary"><span class="glyphicon glyphicon-flash" aria-hidden="true"></span> Vérifier les fichiers</button>
|
||||
</h2>
|
||||
|
||||
@ -13,9 +14,10 @@
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr ng-repeat="file in files | filter: query" ng-click="show(file)">
|
||||
<tr ng-repeat="file in files | filter: query" ng-class="{'bg-danger': file.err !== undefined && file.err !== true}" ng-click="show(file)">
|
||||
<td ng-repeat="field in fields">
|
||||
{{ file[field] }}
|
||||
<span ng-if="field == 'id' && file.err !== undefined && file.err !== true" title="{{ file.err }}" class="glyphicon glyphicon-exclamation-sign"></span>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
|
@ -261,3 +261,14 @@ func ClearFiles() (int64, error) {
|
||||
func (f EFile) GetOrigin() string {
|
||||
return f.origin
|
||||
}
|
||||
|
||||
// CheckFileOnDisk recalculates the hash of the file on disk.
|
||||
func (f EFile) CheckFileOnDisk() error {
|
||||
if _, size, err := checkFileHash(path.Join(FilesDir, f.Path), f.Checksum); err != nil {
|
||||
return err
|
||||
} else if size == 0 {
|
||||
return errors.New("Empty file!")
|
||||
} else {
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user