void OpenDocument(DocItemView itemView) { DocItem item = null; using (var db = new AppDataBase()) { item = (from i in db.Items where i.DocItemId == itemView.Id select i).First(); } if (item != null) { if (Storage.Default.IsFileExist(item) == false) { string fileName = Storage.Default.GetFullPath(item); WindowAsyncOperation.RunAsync(Properties.Resources.MsgDownload, (ReportProgress progress) => { WebDownload d = new WebDownload(item.Uri, progress); d.Save(fileName); }); } Storage.Default.OpenFile(item); } }
public static void AddItem(NewItem param, ReportProgress progressReport) { // 0% ReportProgress(progressReport, 0); string[] sc = {";", " ", ","}; string[] tags = param.Tags.Split(sc, StringSplitOptions.RemoveEmptyEntries); // check uri bool isUriLocal = IsUriLocal(param.Uri); /* * Local URI * [keep local] store to database * [not keep] only link * * Web file * [keep local] store to database * [not keep] only link */ var item = new DocItem() { Uri = param.Uri, Name = param.Name, Rating = 3 }; // Download file // 90% if (isUriLocal) { // local filesystem item.FileName = Path.GetFileName(param.Uri); item.HashCode = HashCalc.GetHash(param.Uri); } else { var download = new WebDownload(param.Uri, (int p, string d) => { int percentage = p * 90; percentage /= 100; ReportProgress(progressReport, percentage); }); item.FileName = download.FileName; item.HashCode = HashCalc.GetHash(download.Content); } ReportProgress(progressReport, 90); // add DB record // 100% using (var db = new AppDataBase()) using(var transaction = db.Database.BeginTransaction()) { // try to select existing tags //var registeredTags = db.Tags.Select(x => x.Name).Intersect(tags, StringComparer.InvariantCultureIgnoreCase).ToArray(); var registeredTags = from i in db.Tags where tags.Contains(i.Name.ToLower()) select i; // save new tags var newTags = tags.Except(registeredTags.Select(x => x.Name), StringComparer.InvariantCultureIgnoreCase); item.Tags = new List<Tag>(); // add link to existing tags foreach(var i in registeredTags) { item.Tags.Add(i); } // add new tags and link with document foreach(var i in newTags) { var newTagRecord = db.Tags.Add(new Tag() { Name = i }); item.Tags.Add(newTagRecord); } // save tags db.SaveChanges(); // add item db.Items.Add(item); // save item db.SaveChanges(); transaction.Commit(); } }