public async Task <IActionResult> DeleteBookmark(int id) { string currentUserId = HttpContext.User.GetUserId(); ApplicationUser user = await ControllerHelpers.GetCurrentUserAsync(_userManager, _dataAccess, currentUserId); if (user.EvernoteCredentials == null) { return(View("MustAuthoriseEvernote")); } // checks Bookmark bookmark = _dataAccess.GetBookmarkById(id); if (bookmark == null) { return(View("BookmarkNotFoundError")); } if (bookmark.UserId != currentUserId) { return(HttpBadRequest()); } // delete bookmark _dataAccess.DeleteBookmark(bookmark); return(RedirectToAction("RecentlyRead")); }
public async Task <IActionResult> NoteResource(string resourceGuid) { string currentUserId = HttpContext.User.GetUserId(); ApplicationUser user = await ControllerHelpers.GetCurrentUserAsync(_userManager, _dataAccess, currentUserId); if (user.EvernoteCredentials == null) { return(View("MustAuthoriseEvernote")); } IEvernoteService evernoteService = new EvernoteServiceSDK1(user.EvernoteCredentials); Resource resource; try { resource = evernoteService.GetResource(resourceGuid); } catch (EvernoteServiceSDK1AuthorisationException) { // thrown if the user's credentials are no longer valid return(View("EvernoteAuthorisationError")); } if (!resource.Mime.StartsWith("image")) { return(View("UnknownResourceTypeError")); } if (resource.Data.Size > 1024 * 512) { return(new HttpNotFoundResult()); } return(File(resource.Data.Body, resource.Mime)); }
// GET: /<controller>/ public async Task <IActionResult> Index() { ApplicationUser user = await ControllerHelpers.GetCurrentUserAsync(_userManager, _dataAccess, HttpContext.User.GetUserId()); if (user.EvernoteCredentials == null) { return(View("MustAuthoriseEvernote")); } return(View("FindNotes", new FindNotesViewModel())); }
public async Task <IActionResult> RecentlyRead() { string currentUserId = HttpContext.User.GetUserId(); ApplicationUser user = await ControllerHelpers.GetCurrentUserAsync(_userManager, _dataAccess, currentUserId); if (user.EvernoteCredentials == null) { return(View("MustAuthoriseEvernote")); } List <Bookmark> bookmarks = _dataAccess.GetRecentlyRead(currentUserId); return(View(new RecentlyReadViewModel() { RecentlyReadNotes = bookmarks })); }
private async Task <IActionResult> PerformSearch(FindNotesViewModel findNotesViewModel) { ApplicationUser user = await ControllerHelpers.GetCurrentUserAsync(_userManager, _dataAccess, HttpContext.User.GetUserId()); if (user.EvernoteCredentials == null) { return(View("MustAuthoriseEvernote")); } if (ModelState.IsValid) { findNotesViewModel.SearchPerformed = true; IEvernoteService evernoteService = new EvernoteServiceSDK1(user.EvernoteCredentials); try { ISearchResults searchResults = evernoteService.GetNotesMetaList( findNotesViewModel.SearchField, (Evernote.EDAM.Type.NoteSortOrder)findNotesViewModel.SortOrder, findNotesViewModel.SortAscending, findNotesViewModel.CurrentResultsPage, findNotesViewModel.PageSize); findNotesViewModel.NumberUnfilteredResults = searchResults.NotesMetadata.Count; if (findNotesViewModel.ExcludeShortNotes) { searchResults.NotesMetadata.RemoveAll(metadata => metadata.ContentLength < (1024 * 3)); } // now we populate with tags and notebook name foreach (INoteMetadata noteMetadata in searchResults.NotesMetadata) { if (noteMetadata.TagGuids != null) { List <TagData> tags = _dataAccess.GetCachedTagData(user.Id, noteMetadata.TagGuids); noteMetadata.TagNames = new List <string>(); foreach (string tagGuid in noteMetadata.TagGuids) { TagData tag = tags.FirstOrDefault(t => t.Guid == tagGuid); if (tag == null) { // save tag Tag evernoteTag = evernoteService.GetTag(tagGuid); tag = new TagData { Guid = tagGuid, Name = evernoteTag.Name, UserId = user.Id }; _dataAccess.SaveTag(tag); } noteMetadata.TagNames.Add(tag.Name); } } noteMetadata.NotebookName = _dataAccess.GetCachedNotebookName(user.Id, noteMetadata.NotebookGuid); if (noteMetadata.NotebookName == null) { Notebook notebook = evernoteService.GetNotebook(noteMetadata.NotebookGuid); noteMetadata.NotebookName = notebook.Name; NotebookData notebookData = new NotebookData() { UserId = user.Id, Guid = noteMetadata.NotebookGuid, Name = notebook.Name }; _dataAccess.SaveNotebook(notebookData); } } findNotesViewModel.SearchResults = searchResults.NotesMetadata.ConvertAll(noteMeta => new EverReaderNodeMetadataFormatter(noteMeta)); findNotesViewModel.TotalResultsForSearch = searchResults.TotalResults; } catch (EvernoteServiceSDK1AuthorisationException) { return(View("EvernoteAuthorisationError")); } } return(View("FindNotes", findNotesViewModel)); }
public async Task <IActionResult> Read(string guid) { string currentUserId = HttpContext.User.GetUserId(); ApplicationUser user = await ControllerHelpers.GetCurrentUserAsync(_userManager, _dataAccess, currentUserId); if (user.EvernoteCredentials == null) { return(View("MustAuthoriseEvernote")); } IEvernoteService evernoteService = new EvernoteServiceSDK1(user.EvernoteCredentials); Note note; try { note = evernoteService.GetNote(guid); } catch (EvernoteServiceSDK1AuthorisationException) { // thrown if the user's credentials are no longer valid return(View("EvernoteAuthorisationError")); } catch (EvernoteServiceSDK1NoteNotFoundException) { return(View("NoteNotFoundError")); } Bookmark bookmark = _dataAccess.GetAutomaticBookmark(currentUserId, guid); if (bookmark == null) { bookmark = new Bookmark() { NoteGuid = guid, PercentageRead = 0, UserId = currentUserId, Type = BookmarkType.Automatic, Updated = DateTime.Now }; } // update all the note metadata we store bookmark.NoteTitle = note.Title; bookmark.NoteLength = note.ContentLength; bookmark.NoteCreated = EvernoteSDKHelper.ConvertEvernoteDateToDateTime(note.Created); bookmark.NoteUpdated = EvernoteSDKHelper.ConvertEvernoteDateToDateTime(note.Updated); _dataAccess.SaveBookmark(bookmark); string decodedContent = WebUtility.HtmlDecode(note.Content); // ensure that links to other Evernote notes are directed through EverReader decodedContent = Regex.Replace(decodedContent, "<a href=\"evernote:///view/[^/]+/[^/]+/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})/", "<a href=\"/Reader/Read/$1"); // convert en-media tags to img tags // get a list of image resources, indexed to the MD5SUM hash if (note.Resources != null) { Dictionary <string, string> hashGuidMapping = new Dictionary <string, string>(); foreach (Resource resource in note.Resources) { if (resource.Mime.StartsWith("image") && resource.Data.Size < 1024 * 512) { hashGuidMapping.Add(resource.Data.BodyHash.ToHexString(), resource.Guid); } } // search and replace each resource in the document foreach (string hash in hashGuidMapping.Keys) { decodedContent = Regex.Replace(decodedContent, "en-media( [^>]*)? hash=[\"'](" + hash + ")[\"']", "img $1 src=\"/Reader/NoteResource/" + hashGuidMapping[hash] + "\""); decodedContent = Regex.Replace(decodedContent, "<img([^>]*);height:auto;([^>]*)>", "<img $1;$2>"); } } ENNoteINoteMetadataAdapter erNoteMetaData = new ENNoteINoteMetadataAdapter(note); // Create view model for page ReaderViewModel readerViewModel = new ReaderViewModel() { FormattedNoteMetadata = new EverReaderNodeMetadataFormatter(erNoteMetaData), Content = decodedContent, PercentageRead = bookmark == null ? 0 : bookmark.PercentageRead }; return(View(readerViewModel)); }