Finalize move from library scraping to api
This commit is contained in:
parent
55b57cf9a9
commit
664fcc50e2
29 changed files with 604 additions and 180 deletions
|
|
@ -17,7 +17,7 @@ namespace LibationWinForm
|
|||
|
||||
public string StringBasedValidate() => null;
|
||||
|
||||
List<string> successMessages = new List<string>();
|
||||
List<string> successMessages { get; } = new List<string>();
|
||||
public string SuccessMessage => string.Join("\r\n", successMessages);
|
||||
|
||||
public int NewBooksAdded { get; private set; }
|
||||
|
|
|
|||
66
LibationWinForm/UNTESTED/Dialogs/IndexLibraryDialog.Designer.cs
generated
Normal file
66
LibationWinForm/UNTESTED/Dialogs/IndexLibraryDialog.Designer.cs
generated
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
namespace LibationWinForm
|
||||
{
|
||||
partial class IndexLibraryDialog
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.label1 = new System.Windows.Forms.Label();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// label1
|
||||
//
|
||||
this.label1.AutoSize = true;
|
||||
this.label1.Location = new System.Drawing.Point(28, 24);
|
||||
this.label1.Name = "label1";
|
||||
this.label1.Size = new System.Drawing.Size(260, 13);
|
||||
this.label1.TabIndex = 0;
|
||||
this.label1.Text = "Scanning Audible library. This may take a few minutes";
|
||||
//
|
||||
// IndexLibraryDialog
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(319, 63);
|
||||
this.Controls.Add(this.label1);
|
||||
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
|
||||
this.MaximizeBox = false;
|
||||
this.MinimizeBox = false;
|
||||
this.Name = "IndexLibraryDialog";
|
||||
this.ShowIcon = false;
|
||||
this.ShowInTaskbar = false;
|
||||
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
|
||||
this.Text = "Scan Library";
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.Label label1;
|
||||
}
|
||||
}
|
||||
43
LibationWinForm/UNTESTED/Dialogs/IndexLibraryDialog.cs
Normal file
43
LibationWinForm/UNTESTED/Dialogs/IndexLibraryDialog.cs
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
using ApplicationService;
|
||||
|
||||
namespace LibationWinForm
|
||||
{
|
||||
public partial class IndexLibraryDialog : Form, IIndexLibraryDialog
|
||||
{
|
||||
public IndexLibraryDialog()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
var btn = new Button();
|
||||
AcceptButton = btn;
|
||||
|
||||
btn.Location = new System.Drawing.Point(this.Size.Width + 10, 0);
|
||||
// required for FindForm() to work
|
||||
this.Controls.Add(btn);
|
||||
|
||||
this.Shown += (_, __) => AcceptButton.PerformClick();
|
||||
}
|
||||
|
||||
public string StringBasedValidate() => null;
|
||||
|
||||
List<string> successMessages { get; } = new List<string>();
|
||||
public string SuccessMessage => string.Join("\r\n", successMessages);
|
||||
|
||||
public int NewBooksAdded { get; private set; }
|
||||
public int TotalBooksProcessed { get; private set; }
|
||||
|
||||
public async Task DoMainWorkAsync()
|
||||
{
|
||||
var callback = new Login.WinformResponder();
|
||||
var refresher = new LibraryIndexer();
|
||||
(TotalBooksProcessed, NewBooksAdded) = await refresher.IndexAsync(callback);
|
||||
|
||||
successMessages.Add($"Total processed: {TotalBooksProcessed}");
|
||||
successMessages.Add($"New: {NewBooksAdded}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -360,66 +360,7 @@ namespace LibationWinForm
|
|||
// legacy/scraping method
|
||||
//await indexDialog(new ScanLibraryDialog());
|
||||
// new/api method
|
||||
await audibleApi();
|
||||
}
|
||||
|
||||
private async Task audibleApi()
|
||||
{
|
||||
var identityFilePath = System.IO.Path.Combine(config.LibationFiles, "IdentityTokens.json");
|
||||
var callback = new Login.WinformResponder();
|
||||
var api = await AudibleApi.EzApiCreator.GetApiAsync(identityFilePath, callback, config.LocaleCountryCode);
|
||||
|
||||
int totalCount;
|
||||
int newCount;
|
||||
|
||||
// bug on audible's side. the 1st time after a long absence, a query to get library will return without titles or authors. a subsequent identical query will be successful. this is true whether or tokens are refreshed
|
||||
// worse, this 1st dummy call doesn't seem to help:
|
||||
// var page = await api.GetLibraryAsync(new AudibleApi.LibraryOptions { NumberOfResultPerPage = 1, PageNumber = 1, PurchasedAfter = DateTime.Now.AddYears(-20), ResponseGroups = AudibleApi.LibraryOptions.ResponseGroupOptions.ALL_OPTIONS });
|
||||
// i don't want to incur the cost of making a full dummy call every time because it fails sometimes
|
||||
try
|
||||
{
|
||||
var items = await InternalUtilities.AudibleApiExtensions.GetAllLibraryItemsAsync(api);
|
||||
|
||||
// remove episode parents
|
||||
items.RemoveAll(i => i.Episodes);
|
||||
// // add individual/children episodes
|
||||
// var childIds = items
|
||||
// .Where(i => i.Episodes)
|
||||
// .SelectMany(ep => ep.Relationships)
|
||||
// .Where(r => r.RelationshipToProduct == AudibleApiDTOs.RelationshipToProduct.Child && r.RelationshipType == AudibleApiDTOs.RelationshipType.Episode)
|
||||
// .Select(c => c.Asin)
|
||||
// .ToList();
|
||||
// foreach (var childId in childIds)
|
||||
// {
|
||||
//// clean this up
|
||||
// var bookResult = await api.GetLibraryBookAsync(childId, AudibleApi.LibraryOptions.ResponseGroupOptions.ALL_OPTIONS);
|
||||
// var bookResultString = bookResult.ToString();
|
||||
// var bookResultJson = AudibleApiDTOs.LibraryApiV10.FromJson(bookResultString);
|
||||
// var bookItem = bookResultJson.Item;
|
||||
// items.Add(bookItem);
|
||||
// }
|
||||
// extract code in 'try' so retry in 'catch' isn't duplicate code
|
||||
totalCount = items.Count;
|
||||
newCount = await Task.Run(() => new DtoImporterService.LibraryImporter().Import(items));
|
||||
}
|
||||
catch (Exception ex1)
|
||||
{
|
||||
try
|
||||
{
|
||||
var items = await InternalUtilities.AudibleApiExtensions.GetAllLibraryItemsAsync(api);
|
||||
items.RemoveAll(i => i.Episodes);
|
||||
totalCount = items.Count;
|
||||
newCount = await Task.Run(() => new DtoImporterService.LibraryImporter().Import(items));
|
||||
}
|
||||
catch (Exception ex2)
|
||||
{
|
||||
MessageBox.Show("Error importing library.\r\n" + ex2.Message, "Error importing library", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
await InternalUtilities.SearchEngineActions.FullReIndexAsync();
|
||||
await indexComplete(totalCount, newCount);
|
||||
await indexDialog(new IndexLibraryDialog());
|
||||
}
|
||||
|
||||
private async void reimportMostRecentLibraryScanToolStripMenuItem_Click(object sender, EventArgs e)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue