private void HandleItem(MediaItem item) { var fileLength = item.Length; MediaItem prior = null; lock(_lengthItem) { if (_lengthItem.ContainsKey(fileLength)) { prior = _lengthItem[fileLength]; } else { _lengthItem[fileLength] = item; } } // If there's a possible match, calculate & compare signatures if (prior != null) { if (!prior.HasSignature) { Interlocked.Increment(ref _primarySignaturesCalculated); _signatures[prior.Signature] = prior; } Interlocked.Increment(ref _secondarySignaturesCalculated); if (_signatures.ContainsKey(item.Signature)) { Interlocked.Increment(ref _duplicatesRemoved); var priorItem = _signatures[item.Signature]; if (!item.Identifier.Equals(prior.Identifier) || !item.CreatedDate.Equals(prior.CreatedDate)) { Interlocked.Increment(ref _questionableDuplicates); } return; } else { _signatures[item.Signature] = item; } } bool wasEmpty = false; lock (MediaList) { wasEmpty = MediaList.Count < 1; MediaList.Add(item); } if (wasEmpty && ItemsAvailable != null) { ItemsAvailable(); } }
private void ShowImage(MediaItem item) { Task.Factory.StartNew(() => { try { object image = Viewer.LoadImage(item); PlatformService.InvokeOnUiThread(() => { var message = Viewer.DisplayImage(image); logger.Info("image {0}; {1}", item.Identifier, message); }); } catch (Exception e) { logger.Error("Error loading image '{0}': {1}", item.Identifier, e); } }) .ContinueWith((a) => { try { var message = string.Format(" {0} ", Path.GetFileName(item.ParentDirectoryName)); var location = item.GetLocation(); if (location != null) { var placeName = location.PlaceName(Location.PlaceNameFilter.Standard); message = string.Format("{0} {1}", message, placeName); } PlatformService.InvokeOnUiThread(() => Viewer.DisplayInfo(message)); } catch (Exception ex) { logger.Error("Error loading info for {0}: {1}", item.Identifier, ex); } }); }
public void AddItem(MediaItem item) { Queue.Enqueue(item); }
public object LoadImage(MediaItem item) { using (var pool = new NSAutoreleasePool()) { using (var stream = item.Stream()) { var data = NSData.FromStream(stream); data.Retain(); return data; } } }