private void GoToNextClipboard() { if (Current == null) { return; } if (IsLoading) { return; } IsLoading = true; Storage.GetNext(Current.Date).ContinueWith(task => { IsLoading = false; if (task.Result != null) { Current = task.Result; UpdateUIAndSetToClipboardAsync(); } else { UpdateUIAsync(); } UpdateRelatedSnapshots(); }); }
private void GoToPreviousClipboard() { if (IsLoading) { return; } IsLoading = true; var date = Current?.Date ?? DateTime.UtcNow; Storage.GetPrevious(date).ContinueWith(task => { IsLoading = false; if (task.Result != null) { Current = task.Result; UpdateUIAndSetToClipboardAsync(); } else { UpdateUIAsync(); } UpdateRelatedSnapshots(); }); }
public static ClipboardSnapshot TryCreateSnapshot(IDataObject data) { try { var exactFormats = data.GetFormats(false); var convertableFormats = data.GetFormats(true); var clip = new ClipboardSnapshot { Date = DateTime.UtcNow }; clip.Data = convertableFormats.Select(f => ClipboardDataToSnapshot(data, f, exactFormats.Contains(f))).ToArray(); if (!clip.IsNew) { clip.Id = clip.Data.Where(f => f.Format == InternalFormat).Cast <SnapshotStringData>().First().Data; } return(clip); } catch (Exception) { throw; //return null; } }
async Task <ClipboardSnapshot> GetSnapshot(ClipboardSnapshotPointer pointer) { ClipboardSnapshot snapshot; if (Cache.TryGetValue(pointer, out snapshot)) { return(snapshot); } var blob = BlobContainer.GetBlockBlobReference(pointer.GetId()); var data = new MemoryStream(); await blob.DownloadToStreamAsync(data); if (data.Length == 0) { return(ClipboardSnapshot.CreateEmptySnapshot(pointer.Date, pointer.GetId())); } data.Position = 0; snapshot = ClipboardSnapshot.Deserialize(data); snapshot.Id = pointer.GetId(); Cache[pointer] = snapshot; return(snapshot); }
public async Task Save(ClipboardSnapshot snapshot) { var pointer = new ClipboardSnapshotPointer(GetPartitionKey(snapshot.Date), snapshot.Date, snapshot.Data.Select(f => f.Format).ToArray()); snapshot.Id = pointer.GetId(); KnownPointers.Add(pointer); Cache[pointer] = snapshot; var blob = BlobContainer.GetBlockBlobReference(pointer.GetId()); await blob.UploadFromStreamAsync(snapshot.Serialize()); var insertOperation = TableOperation.Insert(pointer); var result = await Table.ExecuteAsync(insertOperation); }
public async Task Save(ClipboardSnapshot snapshot) { var pointer = new ClipboardSnapshotPointer(GetPartitionKey(snapshot.Date), snapshot.Date, snapshot.Data.Select(f => f.Format).ToArray()); snapshot.Id = pointer.GetId(); KnownPointers.Add(pointer); Cache[pointer] = snapshot; var blob = BlobContainer.GetBlockBlobReference(pointer.GetId()); await blob.UploadFromStreamAsync(snapshot.Serialize()); var insertOperation = TableOperation.Insert(pointer); var result = await Table.ExecuteAsync(insertOperation); }
void ClipboardChanged(ClipboardSnapshot snapshot) { System.Diagnostics.Debug.WriteLine("Clipboard changed"); if (snapshot.IsNew) Storage.Save(snapshot); else { snapshot = Current; } Current = snapshot; UpdateUI(snapshot); UpdateRelatedSnapshots(); }
static void ClipboardChanged() { if (LastClipData == null || !Clipboard.IsCurrent(LastClipData)) { LastClipData = Clipboard.GetDataObject(); var snapshot = ClipboardSnapshot.TryCreateSnapshot(LastClipData); if (snapshot == null) { return; } OnChanged(snapshot); } }
void ClipboardChanged(ClipboardSnapshot snapshot) { System.Diagnostics.Debug.WriteLine("Clipboard changed"); if (snapshot.IsNew) { Storage.Save(snapshot); } else { snapshot = Current; } Current = snapshot; UpdateUI(snapshot); UpdateRelatedSnapshots(); }
public bool EqualsExceptTime(ClipboardSnapshot other) { if (other == null) { return(false); } if (other.Data.Length != Data.Length) { return(false); } for (int i = 0; i < Data.Length; i++) { if (!Data[i].Equals(other.Data[i])) { return(false); } } return(true); }
public bool EqualsExceptTime(ClipboardSnapshot other) { if (other == null) return false; if (other.Data.Length != Data.Length) return false; for (int i = 0; i < Data.Length; i++) if (!Data[i].Equals(other.Data[i])) return false; return true; }
public static ClipboardSnapshot TryCreateSnapshot(IDataObject data) { try { var exactFormats = data.GetFormats(false); var convertableFormats = data.GetFormats(true); var clip = new ClipboardSnapshot { Date = DateTime.UtcNow }; clip.Data = convertableFormats.Select(f => ClipboardDataToSnapshot(data, f, exactFormats.Contains(f))).ToArray(); if (!clip.IsNew) clip.Id = clip.Data.Where(f => f.Format == InternalFormat).Cast<SnapshotStringData>().First().Data; return clip; } catch (Exception) { throw; //return null; } }
void UpdateUI(ClipboardSnapshot data) { UpdateTimeline(); DataText.Text = ""; DataFiles.Text = ""; DataHtml.Text = ""; DataRtf.Document.Blocks.Clear(); if (data == null || data.Data == null) { if (data != null) { TimeText.Text = data.Date.ToLocalTime().ToString("HH:mm:ss") + " (" + TimeToText(data.Date) + ")"; } TabText.Visibility = Visibility.Collapsed; TabFiles.Visibility = Visibility.Collapsed; TabRtf.Visibility = Visibility.Collapsed; TabImage.Visibility = Visibility.Collapsed; TabHtml.Visibility = Visibility.Collapsed; return; } TimeText.Text = data.Date.ToLocalTime().ToString("HH:mm:ss") + " (" + TimeToText(data.Date) + ")"; var text = (data.Data.FirstOrDefault(f => f.Format == DataFormats.Text) as SnapshotStringData)?.Data; if (text.NotEmpty()) { DataText.Text = text; } TabText.Visibility = text.NotEmpty() ? Visibility.Visible : Visibility.Collapsed; var files = (data.Data.FirstOrDefault(f => f.Format == DataFormats.FileDrop) as SnapshotStringArrayData)?.Data; if (files.NotEmpty()) { DataFiles.Text = string.Join(Environment.NewLine, files); } TabFiles.Visibility = files.NotEmpty() ? Visibility.Visible : Visibility.Collapsed; var html = (data.Data.FirstOrDefault(f => f.Format == DataFormats.Html) as SnapshotStringData)?.Data; if (html.NotEmpty()) { DataHtml.Text = data.FormatHtml(html); } TabHtml.Visibility = html.NotEmpty() ? Visibility.Visible : Visibility.Collapsed; var rtf = (data.Data.FirstOrDefault(f => f.Format == DataFormats.Rtf) as SnapshotStringData)?.Data; if (rtf.NotEmpty()) { DataRtf.SelectAll(); using (var stream = new MemoryStream(Encoding.Default.GetBytes(rtf))) DataRtf.Selection.Load(stream, DataFormats.Rtf); } TabRtf.Visibility = rtf.NotEmpty() ? Visibility.Visible : Visibility.Collapsed; var bitmap = ((SnapshotBitmapData)data.Data.FirstOrDefault(f => f.Format == DataFormats.Bitmap))?.Data; if (bitmap != null) { using (MemoryStream stream = new MemoryStream(bitmap)) DataImage.Source = BitmapFrame.Create(stream, BitmapCreateOptions.None, BitmapCacheOption.OnLoad); } TabImage.Visibility = bitmap != null ? Visibility.Visible : Visibility.Collapsed; for (int i = 0; i < TabController.Items.Count; i++) { var item = TabController.Items[i] as TabItem; if (item != null && item.Visibility == Visibility.Visible) { TabController.SelectedIndex = i; break; } } }
void UpdateUI(ClipboardSnapshot data) { UpdateTimeline(); DataText.Text = ""; DataFiles.Text = ""; DataHtml.Text = ""; DataRtf.Document.Blocks.Clear(); if (data == null || data.Data == null) { if (data != null) TimeText.Text = data.Date.ToLocalTime().ToString("HH:mm:ss") + " (" + TimeToText(data.Date) + ")"; TabText.Visibility = Visibility.Collapsed; TabFiles.Visibility = Visibility.Collapsed; TabRtf.Visibility = Visibility.Collapsed; TabImage.Visibility = Visibility.Collapsed; TabHtml.Visibility = Visibility.Collapsed; return; } TimeText.Text = data.Date.ToLocalTime().ToString("HH:mm:ss") + " (" + TimeToText(data.Date) + ")"; var text = (data.Data.FirstOrDefault(f => f.Format == DataFormats.Text) as SnapshotStringData)?.Data; if (text.NotEmpty()) DataText.Text = text; TabText.Visibility = text.NotEmpty() ? Visibility.Visible : Visibility.Collapsed; var files = (data.Data.FirstOrDefault(f => f.Format == DataFormats.FileDrop) as SnapshotStringArrayData)?.Data; if (files.NotEmpty()) DataFiles.Text = string.Join(Environment.NewLine, files); TabFiles.Visibility = files.NotEmpty() ? Visibility.Visible : Visibility.Collapsed; var html = (data.Data.FirstOrDefault(f => f.Format == DataFormats.Html) as SnapshotStringData)?.Data; if (html.NotEmpty()) DataHtml.Text = data.FormatHtml(html); TabHtml.Visibility = html.NotEmpty() ? Visibility.Visible : Visibility.Collapsed; var rtf = (data.Data.FirstOrDefault(f => f.Format == DataFormats.Rtf) as SnapshotStringData)?.Data; if (rtf.NotEmpty()) { DataRtf.SelectAll(); using (var stream = new MemoryStream(Encoding.Default.GetBytes(rtf))) DataRtf.Selection.Load(stream, DataFormats.Rtf); } TabRtf.Visibility = rtf.NotEmpty() ? Visibility.Visible : Visibility.Collapsed; var bitmap = ((SnapshotBitmapData)data.Data.FirstOrDefault(f => f.Format == DataFormats.Bitmap))?.Data; if (bitmap != null) using (MemoryStream stream = new MemoryStream(bitmap)) DataImage.Source = BitmapFrame.Create(stream, BitmapCreateOptions.None, BitmapCacheOption.OnLoad); TabImage.Visibility = bitmap != null ? Visibility.Visible : Visibility.Collapsed; for (int i = 0; i < TabController.Items.Count; i++) { var item = TabController.Items[i] as TabItem; if (item != null && item.Visibility == Visibility.Visible) { TabController.SelectedIndex = i; break; } } }
private void GoToPreviousClipboard() { if (IsLoading) return; IsLoading = true; var date = Current?.Date ?? DateTime.UtcNow; Storage.GetPrevious(date).ContinueWith(task => { IsLoading = false; if (task.Result != null) { Current = task.Result; UpdateUIAndSetToClipboardAsync(); } else UpdateUIAsync(); UpdateRelatedSnapshots(); }); }
private void GoToNextClipboard() { if (Current == null) return; if (IsLoading) return; IsLoading = true; Storage.GetNext(Current.Date).ContinueWith(task => { IsLoading = false; if (task.Result != null) { Current = task.Result; UpdateUIAndSetToClipboardAsync(); } else UpdateUIAsync(); UpdateRelatedSnapshots(); }); }