Revision f3d080df trunk/Pithos.Core/FileState.cs
b/trunk/Pithos.Core/FileState.cs | ||
---|---|---|
1 | 1 |
// ----------------------------------------------------------------------- |
2 |
// <copyright file="FileState.cs" company="Microsoft"> |
|
3 |
// TODO: Update copyright text. |
|
2 |
// <copyright file="FileState.cs" company="GRNet"> |
|
3 |
// Copyright 2011 GRNET S.A. All rights reserved. |
|
4 |
// |
|
5 |
// Redistribution and use in source and binary forms, with or |
|
6 |
// without modification, are permitted provided that the following |
|
7 |
// conditions are met: |
|
8 |
// |
|
9 |
// 1. Redistributions of source code must retain the above |
|
10 |
// copyright notice, this list of conditions and the following |
|
11 |
// disclaimer. |
|
12 |
// |
|
13 |
// 2. Redistributions in binary form must reproduce the above |
|
14 |
// copyright notice, this list of conditions and the following |
|
15 |
// disclaimer in the documentation and/or other materials |
|
16 |
// provided with the distribution. |
|
17 |
// |
|
18 |
// THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS |
|
19 |
// OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
|
20 |
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
|
21 |
// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR |
|
22 |
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
|
23 |
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
|
24 |
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF |
|
25 |
// USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED |
|
26 |
// AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
|
27 |
// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN |
|
28 |
// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
|
29 |
// POSSIBILITY OF SUCH DAMAGE. |
|
30 |
// |
|
31 |
// The views and conclusions contained in the software and |
|
32 |
// documentation are those of the authors and should not be |
|
33 |
// interpreted as representing official policies, either expressed |
|
34 |
// or implied, of GRNET S.A. |
|
4 | 35 |
// </copyright> |
5 | 36 |
// ----------------------------------------------------------------------- |
6 | 37 |
|
... | ... | |
125 | 156 |
.ExecuteUpdate(); |
126 | 157 |
if (updatedEntities == 0) |
127 | 158 |
{ |
128 |
var newState = new FileState { FilePath = absolutePath, Id = Guid.NewGuid(), FileStatus = newStatus }; |
|
159 |
var newState = new FileState { FilePath = absolutePath.ToLower(), Id = Guid.NewGuid(), FileStatus = newStatus };
|
|
129 | 160 |
newState.CreateAndFlush(); |
130 | 161 |
} |
131 | 162 |
return null; |
... | ... | |
288 | 319 |
|
289 | 320 |
var fileState = new FileState |
290 | 321 |
{ |
291 |
FilePath = filePath, |
|
322 |
FilePath = filePath.ToLower(),
|
|
292 | 323 |
OverlayStatus = FileOverlayStatus.Unversioned, |
293 | 324 |
FileStatus = FileStatus.Created, |
294 | 325 |
Id=Guid.NewGuid() |
... | ... | |
298 | 329 |
return fileState.UpdateHashesAsync(blockSize,algorithm); |
299 | 330 |
} |
300 | 331 |
|
301 |
public Task<FileState> UpdateHashesAsync(int blockSize,string algorithm) |
|
332 |
public async Task<FileState> UpdateHashesAsync(int blockSize,string algorithm)
|
|
302 | 333 |
{ |
303 | 334 |
if (blockSize<=0) |
304 | 335 |
throw new ArgumentOutOfRangeException("blockSize"); |
... | ... | |
308 | 339 |
|
309 | 340 |
//Skip updating the hash for folders |
310 | 341 |
if (Directory.Exists(FilePath)) |
311 |
return Task.Factory.FromResult(this);
|
|
342 |
return this;
|
|
312 | 343 |
|
313 |
var results = Task.Factory.StartNew(() =>
|
|
344 |
var hash = await TaskEx.Run(() =>
|
|
314 | 345 |
{ |
315 | 346 |
var info = new FileInfo(FilePath); |
316 | 347 |
return info.CalculateHash(blockSize, algorithm); |
317 | 348 |
}); |
318 | 349 |
|
319 |
var state=results.Then(hash => |
|
320 |
{ |
|
321 |
Checksum = hash; |
|
322 |
return Task.Factory.FromResult(this); |
|
323 |
}); |
|
350 |
Checksum = hash; |
|
324 | 351 |
|
325 |
return state;
|
|
352 |
return this;
|
|
326 | 353 |
} |
327 | 354 |
} |
328 | 355 |
|
Also available in: Unified diff