diff --git a/Debug/examplebooks.csv b/Debug/examplebooks.csv index 0e27cdeb..40c10423 100644 --- a/Debug/examplebooks.csv +++ b/Debug/examplebooks.csv @@ -1,10 +1,10 @@ ISBN-13,Google Books ID,Title,Subtitle,Authors,Page Count,Publication Date,Publisher,Description,Subjects,Language Code,Started Reading,Finished Reading,Current Page,Rating,Notes,Lists -9780141913872,UY67prSIuogC,Out of Africa,,"Dinesen, Isak",336,,Penguin UK,"From the moment Karen Blixen arrived in Kenya in 1914 to manage a coffee plantation, her heart belonged to Africa. Drawn to the intense colours and ravishing landscapes, Karen Blixen spent her happiest years on the farm and her experiences and friendships with the people around her are vividly recalled in these memoirs. Out of Africa is the story of a remarkable and unconventional woman and of a way of life that has vanished for ever.",Biography & Autobiography; Essays & Travelogues; Personal Memoirs; Travel,en,2018-01-17,,212,,,TIME Top 100 (18) +9780141913872,UY67prSIuogC,Out of Africa,,"Dinesen, Isak",336,,Penguin UK,"From the moment Karen Blixen arrived in Kenya in 1914 to manage a coffee plantation, her heart belonged to Africa. Drawn to the intense colours and ravishing landscapes, Karen Blixen spent her happiest years on the farm and her experiences and friendships with the people around her are vividly recalled in these memoirs. Out of Africa is the story of a remarkable and unconventional woman and of a way of life that has vanished for ever.",Biography & Autobiography; Essays & Travelogues; Personal Memoirs; Travel,en,2020-01-17,,212,,,TIME Top 100 (18) 9780547345666,ZrsVZKWJg4UC,The Handmaid's Tale,,"Atwood, Margaret",311,,Houghton Mifflin Harcourt,"Now a Hulu Original Series The Handmaid’s Tale is a novel of such power that the reader will be unable to forget its images and its forecast. Set in the near future, it describes life in what was once the United States and is now called the Republic of Gilead, a monotheocracy that has reacted to social unrest and a sharply declining birthrate by reverting to, and going beyond, the repressive intolerance of the original Puritans. The regime takes the Book of Genesis absolutely at its word, with bizarre consequences for the women and men in its population. -The story is told through the eyes of Offred, one of the unfortunate Handmaids under the new social order. In condensed but eloquent prose, by turns cool-eyed, tender, despairing, passionate, and wry, she reveals to us the dark corners behind the establishment’s calm facade, as certain tendencies now in existence are carried to their logical conclusions. The Handmaid’s Tale is funny, unexpected, horrifying, and altogether convincing. It is at once scathing satire, dire warning, and a tour de force. It is Margaret Atwood at her best.",Fiction; Dystopian; Women; Literary,en,2018-02-04,,96,,,TIME Top 100 (14) +The story is told through the eyes of Offred, one of the unfortunate Handmaids under the new social order. In condensed but eloquent prose, by turns cool-eyed, tender, despairing, passionate, and wry, she reveals to us the dark corners behind the establishment’s calm facade, as certain tendencies now in existence are carried to their logical conclusions. The Handmaid’s Tale is funny, unexpected, horrifying, and altogether convincing. It is at once scathing satire, dire warning, and a tour de force. It is Margaret Atwood at her best.",Fiction; Dystopian; Women; Literary,en,2020-02-04,,96,,,TIME Top 100 (14) 9780385667838,Gbs7PgAACAAJ,Things Fall Apart,,"Achebe, Chinua",224,,Doubleday Canada,"THINGS FALL APART tells two overlapping, intertwining stories, both of which center around Okonkwo, a “strong man” of an Ibo village in Nigeria. The first of these stories traces Okonkwo's fall from grace with the tribal world in which he lives, and in its classical purity of line and economical beauty it provides us with a powerful fable about the immemorial conflict between the individual and society. The second story, which is as modern as the first is ancient, and which elevates the book to a tragic plane, concerns the clash of cultures and the destruction of Okonkwo's world through the arrival of aggressive, proselytizing European missionaries. These twin dramas are perfectly harmonized, and they are modulated by an awareness capable of encompassing at once the life of nature, human history, and the mysterious compulsions of the soul. THINGS FALL APART is the most illuminating and permanent monument we have to the modern African experience as seen from within. @@ -104,10 +104,10 @@ The Color Purple has sold more than five million copies, inspired an Academy Awa This ebook features a new introduction written by the author on the twenty-fifth anniversary of publication, and an illustrated biography of Alice Walker including rare photos from the author’s personal collection. -The Color Purple is the 1st book in the Color Purple Collection, which also includes The Temple of My Familiar and Possessing the Secret of Joy.",Classics; Fiction; Historical; African American; Literary,en,2017-03-04,2017-03-17,,10,,TIME Top 100 (16) +The Color Purple is the 1st book in the Color Purple Collection, which also includes The Temple of My Familiar and Possessing the Secret of Joy.",Classics; Fiction; Historical; African American; Literary,en,2019-03-04,2019-03-17,,10,,TIME Top 100 (16) 9780062369635,-D8WBAAAQBAJ,To Kill a Mockingbird,,"Lee, Harper",336,,,"This enhanced digital edition of Harper Lee’s Pulitzer prize-winning masterwork of honor and injustice in the deep south includes audio of Sissy Spacek performing the audiobook and video footage from the documentary Hey Boo: Harper Lee and To Kill a Mockingbird which includes Oprah Winfrey, Tom Brokaw, Anna Quindlen, Wally Lamb, Alice Finch Lee and others discussing Harper Lee and the book, excerpts from Harper Lee’s final radio interview, and footage from the film. -One of the best-loved stories of all time,  To Kill a Mockingbird  has been translated into more than forty languages, sold more than thirty million copies worldwide, served as the basis for an enormously popular motion picture, and was voted one of the best novels of the twentieth century by librarians across the country. A gripping, heart-wrenching, and wholly remarkable tale of coming-of-age in a South poisoned by virulent prejudice, it views a world of great beauty and savage inequities through the eyes of a young girl, as her father-a crusading local lawyer-risks everything to defend a black man unjustly accused of a terrible crime.",Classics; Fiction; Coming of Age; Literary,,2017-03-20,2017-04-08,,,,TIME Top 100 (1) +One of the best-loved stories of all time,  To Kill a Mockingbird  has been translated into more than forty languages, sold more than thirty million copies worldwide, served as the basis for an enormously popular motion picture, and was voted one of the best novels of the twentieth century by librarians across the country. A gripping, heart-wrenching, and wholly remarkable tale of coming-of-age in a South poisoned by virulent prejudice, it views a world of great beauty and savage inequities through the eyes of a young girl, as her father-a crusading local lawyer-risks everything to defend a black man unjustly accused of a terrible crime.",Classics; Fiction; Coming of Age; Literary,,2019-03-20,2019-04-08,,,,TIME Top 100 (1) 9781925410174,6DjWDAAAQBAJ,1984,,"Orwell, George",320,,Text Publishing Company,"Winston Smith works for the Ministry of Truth in what remains of a Britain ravaged by revolution. His every move is monitored by the Thought Police, who are responsible for detecting dissent against the Party and its leader, Big Brother—and eliminating it. When he meets Julia, Winston thinks he might have found love, and a fellow loather of the Party. But when the pair are arrested and sent to the sinister Room 101 for re-education, their bond—and commitment to their shared cause—will be tested to its limits. George Orwell’s dystopian vision of a world enslaved by doublethink and thoughtcrime is as terrifying now as it was on its initial publication in 1949. One of the great classics of the twentieth century, 1984 is a startlingly original and arresting novel about tyranny and the universal struggle of the individual against the malevolent tendencies of the modern state. @@ -122,11 +122,11 @@ George Orwell, born Eric Arthur Blair (1903–1950) was a teacher, novelist and ‘A book that goes through the reader like an east wind, cracking the skin...Such are the originality, the suspense, the speed of writing and withering indignation that it is impossible to put the book down.’ V. S. Pritchett -‘A remarkable book; as a virtuoso literary performance it has a sustained brilliance that has rarely been matched in other works of its genre...It is as timely as the label on a poison bottle.’ New York Herald Tribune",Political; Fiction; Dystopian,en,2017-04-09,2017-04-28,,10,,TIME Top 100 (2) -9784871876193,PCDengEACAAJ,The Catcher in the Rye,,"Salinger, J. D.",216,,,"J. D. Salinger wrote one of the most famous books ever written, The Catcher in the Rye. Salinger wrote many stories and, in 1941, after several rejections, Salinger finally cracked The New Yorker, with a story, ""Slight Rebellion Off Madison,"" that was an early sketch of what became a scene in ""The Catcher in the Rye."" The magazine then had second thoughts in part because of World War II in which Salinger was in combat, and held the story for five years before finally publishing it in 1946, buried in the back of an issue. Everyone was surprised when the story and the book that followed it became a bit hit. Even today nobody can really explain why Catcher in the Rye is so famous and so popular. Yet, millions have been sold and are still being sold even though only available as used books nowadays. When The Catcher in the Rye was published in 1951, it was registered for copyright as ""additional material."" This obviously referred to the earlier work ""Slight Rebellion Off Madison."" The copyright page on ""The Catcher in the Rye"" states ""Copyright 1945, 1946, 1951 by J. D Salinger."" The date of 1945 obviously refers to the publication of ""I'm Crazy,"" a short story written by Salinger and published in the December 22, 1945 issue of Collier's magazine that first introduced the character Holden Caulfield to the reading public. Salinger later reworked this short story to incorporate it into The Catcher in the Rye. The two earlier stories are ""I'm Crazy,"" an early version of Holden's departure from prep school that later shows up in The Catcher in the Rye. With minor alteration, much of this story is familiar to readers as the chapter where Holden visits Mr. Spencer. What sets this story apart is the presence of an additional Caulfield sister and the clarity of Holden's resignation and compromise at the end. ""Slight Rebellion off Madison"" is an early version of another scene in The Catcher in the Rye. The story follows Holden when he is home from Pency and goes to the movies, then skating with Sally Hayes, followed by his drunken calls to her apartment late at night. An early story, it is the first of Salinger's Caulfied works to be accepted for publication.",,,2017-04-29,2017-05-18,,,,TIME Top 100 (22) -9781451632965,U9V8JYt7WwoC,Catch-22,,"Heller, Joseph",464,,,"Fifty years after its original publication, Catch-22 remains a cornerstone of American lit-erature and one of the funniest—and most celebrated—novels of all time. In recent years it has been named to “best novels” lists by Time, Newsweek, the Modern Library, and the London Observer. Set in Italy during World War II, this is the story of the incomparable, malingering bombardier, Yossarian, a hero who is furious because thousands of people he has never met are trying to kill him. But his real problem is not the enemy—it is his own army, which keeps increasing the number of missions the men must fly to complete their service. Yet if Yossarian makes any attempt to excuse himself from the perilous missions he’s assigned, he’ll be in violation of Catch-22, a hilariously sinister bureaucratic rule: a man is considered insane if he willingly continues to fly dangerous combat missions, but if he makes a formal request to be removed from duty, he is proven sane and therefore ineligible to be relieved. Since its publication in 1961, no novel has matched Catch-22’s intensity and brilliance in depicting the brutal insanity of war. This fiftieth-anniversary edition commemorates Joseph Heller’s masterpiece with a new introduction by Christopher Buckley; personal essays on the genesis of the novel by the author; a wealth of critical responses and reviews by Norman Mailer, Alfred Kazin, Anthony Burgess, and others; rare papers and photos from Joseph Heller’s personal archive; and a selection of advertisements from the original publishing campaign that helped turn Catch-22 into a cultural phenomenon. Here, at last, is the definitive edition of a classic of world literature.",Classics; Fiction; Literary,,2017-05-19,2017-06-07,,,,TIME Top 100 (23) -9780099800200,gMcab1F-IL4C,Slaughterhouse 5,or The Children's Crusade - A Duty-Dance with Death,"Vonnegut, Kurt",157,,,"Prisoner of war, optometrist, time-traveller - these are the life roles of Billy Pilgrim, hero of this miraculously moving, bitter and funny story of innocence faced with apocalypse. Slaughterhouse 5 is one of the world's great anti-war books. Centring on the infamous fire-bombing of Dresden in the Second World War, Billy Pilgrim's odyssey through time reflects the journey of our own fractured lives as we search for meaning in what we are afraid to know.",Fiction,,2017-06-08,2017-06-27,,,,TIME Top 100 (24) -9780783897677,hny26rF_maMC,The Corrections,,"Franzen, Jonathan",775,,,"A New York Times BestsellerAfter almost fifty years as a wife and mother, Enid Lambert is ready to have some fun. Unfortunately, her husband, Alfred, is losing his sanity to Parkinson's disease, and their children have flown the family nest to live their own lives. Desperate for some pleasure, Enid has set her heart on bringing her family together for one last Christmas at home. Available only in Paperback Bestsellers 4 Series.",Fiction,,2017-06-28,2017-07-17,,,,TIME Top 100 (25) +‘A remarkable book; as a virtuoso literary performance it has a sustained brilliance that has rarely been matched in other works of its genre...It is as timely as the label on a poison bottle.’ New York Herald Tribune",Political; Fiction; Dystopian,en,2019-04-09,2019-04-28,,10,,TIME Top 100 (2) +9784871876193,PCDengEACAAJ,The Catcher in the Rye,,"Salinger, J. D.",216,,,"J. D. Salinger wrote one of the most famous books ever written, The Catcher in the Rye. Salinger wrote many stories and, in 1941, after several rejections, Salinger finally cracked The New Yorker, with a story, ""Slight Rebellion Off Madison,"" that was an early sketch of what became a scene in ""The Catcher in the Rye."" The magazine then had second thoughts in part because of World War II in which Salinger was in combat, and held the story for five years before finally publishing it in 1946, buried in the back of an issue. Everyone was surprised when the story and the book that followed it became a bit hit. Even today nobody can really explain why Catcher in the Rye is so famous and so popular. Yet, millions have been sold and are still being sold even though only available as used books nowadays. When The Catcher in the Rye was published in 1951, it was registered for copyright as ""additional material."" This obviously referred to the earlier work ""Slight Rebellion Off Madison."" The copyright page on ""The Catcher in the Rye"" states ""Copyright 1945, 1946, 1951 by J. D Salinger."" The date of 1945 obviously refers to the publication of ""I'm Crazy,"" a short story written by Salinger and published in the December 22, 1945 issue of Collier's magazine that first introduced the character Holden Caulfield to the reading public. Salinger later reworked this short story to incorporate it into The Catcher in the Rye. The two earlier stories are ""I'm Crazy,"" an early version of Holden's departure from prep school that later shows up in The Catcher in the Rye. With minor alteration, much of this story is familiar to readers as the chapter where Holden visits Mr. Spencer. What sets this story apart is the presence of an additional Caulfield sister and the clarity of Holden's resignation and compromise at the end. ""Slight Rebellion off Madison"" is an early version of another scene in The Catcher in the Rye. The story follows Holden when he is home from Pency and goes to the movies, then skating with Sally Hayes, followed by his drunken calls to her apartment late at night. An early story, it is the first of Salinger's Caulfied works to be accepted for publication.",,,2019-04-29,2019-05-18,,,,TIME Top 100 (22) +9781451632965,U9V8JYt7WwoC,Catch-22,,"Heller, Joseph",464,,,"Fifty years after its original publication, Catch-22 remains a cornerstone of American lit-erature and one of the funniest—and most celebrated—novels of all time. In recent years it has been named to “best novels” lists by Time, Newsweek, the Modern Library, and the London Observer. Set in Italy during World War II, this is the story of the incomparable, malingering bombardier, Yossarian, a hero who is furious because thousands of people he has never met are trying to kill him. But his real problem is not the enemy—it is his own army, which keeps increasing the number of missions the men must fly to complete their service. Yet if Yossarian makes any attempt to excuse himself from the perilous missions he’s assigned, he’ll be in violation of Catch-22, a hilariously sinister bureaucratic rule: a man is considered insane if he willingly continues to fly dangerous combat missions, but if he makes a formal request to be removed from duty, he is proven sane and therefore ineligible to be relieved. Since its publication in 1961, no novel has matched Catch-22’s intensity and brilliance in depicting the brutal insanity of war. This fiftieth-anniversary edition commemorates Joseph Heller’s masterpiece with a new introduction by Christopher Buckley; personal essays on the genesis of the novel by the author; a wealth of critical responses and reviews by Norman Mailer, Alfred Kazin, Anthony Burgess, and others; rare papers and photos from Joseph Heller’s personal archive; and a selection of advertisements from the original publishing campaign that helped turn Catch-22 into a cultural phenomenon. Here, at last, is the definitive edition of a classic of world literature.",Classics; Fiction; Literary,,2019-05-19,2019-06-07,,,,TIME Top 100 (23) +9780099800200,gMcab1F-IL4C,Slaughterhouse 5,or The Children's Crusade - A Duty-Dance with Death,"Vonnegut, Kurt",157,,,"Prisoner of war, optometrist, time-traveller - these are the life roles of Billy Pilgrim, hero of this miraculously moving, bitter and funny story of innocence faced with apocalypse. Slaughterhouse 5 is one of the world's great anti-war books. Centring on the infamous fire-bombing of Dresden in the Second World War, Billy Pilgrim's odyssey through time reflects the journey of our own fractured lives as we search for meaning in what we are afraid to know.",Fiction,,2019-06-08,2019-06-27,,,,TIME Top 100 (24) +9780783897677,hny26rF_maMC,The Corrections,,"Franzen, Jonathan",775,,,"A New York Times BestsellerAfter almost fifty years as a wife and mother, Enid Lambert is ready to have some fun. Unfortunately, her husband, Alfred, is losing his sanity to Parkinson's disease, and their children have flown the family nest to live their own lives. Desperate for some pleasure, Enid has set her heart on bringing her family together for one last Christmas at home. Available only in Paperback Bestsellers 4 Series.",Fiction,,2019-06-28,2019-07-17,,,,TIME Top 100 (25) 9780141182636,l4kYtX5FWfMC,The Great Gatsby,,"Fitzgerald, F. Scott",176,,Penguin UK,"Now the subject of a major new film from director Baz Luhrmann (Romeo+Juliet, Moulin Rouge!), starring Leonardo DiCaprio and Carey Mulligan, The Great Gatsby is F. Scott Fitzgerald's brilliant fable of the hedonistic excess and tragic reality of 1920s America. This Penguin Classics edition is edited with an introduction and notes by Tony Tanner. Young, handsome and fabulously rich, Jay Gatsby is the bright star of the Jazz Age, but as writer Nick Carraway is drawn into the decadent orbit of his Long Island mansion, where the party never seems to end, he finds himself faced by the mystery of Gatsby's origins and desires. Beneath the shimmering surface of his life, Gatsby is hiding a secret: a silent longing that can never be fulfilled. And soon, this destructive obsession will force his world to unravel. @@ -135,7 +135,7 @@ In The Great Gatsby, Fitzgerald brilliantly captures both the disillusionment of Like Jay Gatsby, F. Scott Fitzgerald (1896-1940) has acquired a mythical status in American literary history, and his masterwork The Great Gatsby is considered by many to be the 'great American novel'. In 1920 he married Zelda Sayre, dubbed 'the first American Flapper', and their traumatic marriage and Zelda's gradual descent into insanity became the leading influence on his writing. As well as many short stories, Fitzgerald wrote five novels This Side of Paradise, The Great Gatsby, The Beautiful and the Damned, Tender is the Night and, incomplete at the time of his death, The Last Tycoon. After his death The New York Times said of him that 'in fact and in the literary sense he created a ""generation"" '. 'A classic, perhaps the supreme American novel' -John Carey, Sunday Times Books of the Century",Fiction,en,2017-07-18,2017-08-06,,,,TIME Top 100 (3) +John Carey, Sunday Times Books of the Century",Fiction,en,2019-07-18,2019-08-06,,,,TIME Top 100 (3) 9780571295715,5431ugAACAAJ,Lord of the Flies,,"Golding, William",353,,,"First published in 1954, William Golding's debut novel, now a classic, is a stark story of survival, probing the depths of human nature, and what happens when civilization collapses. As dystopian stories like The Hunger Games and Battle Royale surge in popularity, this haunting tale of a group of young boys stranded on a desert island still captivates schoolchildren around the world, raising timeless and profound questions about how easily society can slip into chaos and savagery when rules and order have been abandoned. This new educational edition provides supplementary material, chapter summaries, discussion questions and additional teaching resources to help guide students and support teachers throughout the text. @@ -143,14 +143,14 @@ This new educational edition provides supplementary material, chapter summaries, When a plane crashes on a remote island, a group of schoolboys are the sole survivors. As the reality of their situation sets in, the boys attempt to establish control and their world gradually descends into brutal savagery. As Catcher in the Rye became the classic coming-of-age tale, Lord of the Flies is the classic story of innocence lost. A teacher himself, Golding clearly understood how to interest children with a gripping story and strong, sympathetic characters. The novel serves as a catalyst for thought-provoking discussion and analysis of universal issues, not only concerning the capabilities of humans for good and evil and the fragility of moral inhibition, but beyond. The boys' struggle to find a way of existing in a community with no fixed boundaries invites readers to evaluate the concepts involved in social and political constructs and moral frameworks. Symbolism is strong throughout, revealing both the boys' capacity for empathy and hope, as well as illuminating the darkest corners of the human spirit. Ideas of community, leadership, and the rule of law are called into question as the reader has to consider who has a right to power, why, and what the consequences of the acquisition of power may be. All of these concerns are current today and can be easily related to the novel through effective teaching and learning. -This new educational edition encourages original and independent thought from students, as well as guiding them through the text. The supplementary material includes a biographical section on William Golding, and his own interpretive essay 'Fable' on Lord of the Flies, as well as providing information about the novel's historical context, which will be ideal for students completing GCSE and A-Level courses as well as those studying the novel worldwide. At the end of the text there are chapter summaries, comprehension questions, discussion points and activities plus a glossary of less familiar words or phrases. All of these are intended to inspire and generate creative teaching, learning and love of the novel.",,,2017-08-07,2017-08-26,,,,TIME Top 100 (4) -9781509860289,x7amAQAACAAJ,Gone with the Wind,,"Mitchell, Margaret",1024,,,"Set against the dramatic backdrop of the American Civil War, Margaret Mitchell's magnificent historical epic is an unforgettable tale of love and loss, of a nation mortally divided and a people forever changed. Above all, it is the story of beautiful, ruthless Scarlett O'Hara and the dashing soldier of fortune, Rhett Butler.Since its first publication in 1936, Gone with the Wind has endured as a story for all our times and was immortalised in the 1939 film starring Clark Gable and Vivien Leigh.",,,2017-08-27,2017-09-15,,,,TIME Top 100 (5) +This new educational edition encourages original and independent thought from students, as well as guiding them through the text. The supplementary material includes a biographical section on William Golding, and his own interpretive essay 'Fable' on Lord of the Flies, as well as providing information about the novel's historical context, which will be ideal for students completing GCSE and A-Level courses as well as those studying the novel worldwide. At the end of the text there are chapter summaries, comprehension questions, discussion points and activities plus a glossary of less familiar words or phrases. All of these are intended to inspire and generate creative teaching, learning and love of the novel.",,,2019-08-07,2019-08-26,,,,TIME Top 100 (4) +9781509860289,x7amAQAACAAJ,Gone with the Wind,,"Mitchell, Margaret",1024,,,"Set against the dramatic backdrop of the American Civil War, Margaret Mitchell's magnificent historical epic is an unforgettable tale of love and loss, of a nation mortally divided and a people forever changed. Above all, it is the story of beautiful, ruthless Scarlett O'Hara and the dashing soldier of fortune, Rhett Butler.Since its first publication in 1936, Gone with the Wind has endured as a story for all our times and was immortalised in the 1939 film starring Clark Gable and Vivien Leigh.",,,2019-08-27,2019-09-15,,,,TIME Top 100 (5) 9780141915067,fMRcWrzMZwYC,One Flew Over the Cuckoo's Nest,,"Kesey, Ken",320,,,"Boisterous, ribald, and ultimately shattering, Ken Kesey's One Flew Over the Cuckoo's Nest is the seminal novel of the 1960s that has left an indelible mark on the literature of our time. Here is the unforgettable story of a mental ward and its inhabitants, especially the tyrannical Big Nurse Ratched and Randle Patrick McMurphy, the brawling, fun-loving new inmate who resolves to oppose her. We see the struggle through the eyes of Chief Bromden, the seemingly mute half-Indian patient who witnesses and understands McMurphy's heroic attempt to do battle with the awesome powers that keep them all imprisoned. -Contains illustrations and a preface by the author, as well as an introduction by Robert Faggen.",Classics; Fiction,,2017-09-16,2017-10-05,,,,TIME Top 100 (6) -9780141906027,bxzb1escoboC,Coming Up for Air,,"Orwell, George",256,,,Years in insurance and marriage to the joyless Hilda have been no more than death in life to George Bowling. This and fear of another war take his mind back to the peace of his childhood in a small country town. But his return journey to Lower Binfield brings complete disillusionment.,Classics; Fiction,,2017-10-06,2017-10-25,,,, -9780141913919,RMb4Et3FgN4C,Keep the Aspidistra Flying,,"Orwell, George",288,,,"Gordon Comstock loathes dull, middle-class respectability and worship of money. He gives up a 'good job' in advertising to work part-time in a bookshop, giving him more time to write. But he slides instead into a self-induced poverty that destroys his creativity and his spirit. Only Rosemary, ever-faithful Rosemary, has the strength to challenge his commitment to his chosen way of life. Through the character of Gordon Comstock, Orwell reveals his own disaffection with the society he once himself renounced.",Classics; Fiction,,2017-10-26,2017-11-14,,,, -,d1AgDQAAQBAJ,Animal Farm,,"Orwell, George",86,,,Because a little bit of politics is easily digested when set in a farmyard. Orwell wrote so few books and yet they all matter.,,,2017-11-15,2017-12-04,,,, +Contains illustrations and a preface by the author, as well as an introduction by Robert Faggen.",Classics; Fiction,,2019-09-16,2019-10-05,,,,TIME Top 100 (6) +9780141906027,bxzb1escoboC,Coming Up for Air,,"Orwell, George",256,,,Years in insurance and marriage to the joyless Hilda have been no more than death in life to George Bowling. This and fear of another war take his mind back to the peace of his childhood in a small country town. But his return journey to Lower Binfield brings complete disillusionment.,Classics; Fiction,,2019-10-06,2019-10-25,,,, +9780141913919,RMb4Et3FgN4C,Keep the Aspidistra Flying,,"Orwell, George",288,,,"Gordon Comstock loathes dull, middle-class respectability and worship of money. He gives up a 'good job' in advertising to work part-time in a bookshop, giving him more time to write. But he slides instead into a self-induced poverty that destroys his creativity and his spirit. Only Rosemary, ever-faithful Rosemary, has the strength to challenge his commitment to his chosen way of life. Through the character of Gordon Comstock, Orwell reveals his own disaffection with the society he once himself renounced.",Classics; Fiction,,2019-10-26,2019-11-14,,,, +,d1AgDQAAQBAJ,Animal Farm,,"Orwell, George",86,,,Because a little bit of politics is easily digested when set in a farmyard. Orwell wrote so few books and yet they all matter.,,,2019-11-15,2019-12-04,,,, 9780316248679,AUWbBwAAQBAJ,The Goldfinch,,"Tartt, Donna",784,,Hachette UK,"WINNER OF THE PULITZER PRIZE ""The Goldfinch is a rarity that comes along perhaps half a dozen times per decade, a smartly written literary novel that connects with the heart as well as the mind....Donna Tartt has delivered an extraordinary work of fiction.""--Stephen King, The New York Times Book Review @@ -159,11 +159,11 @@ Theo Decker, a 13-year-old New Yorker, miraculously survives an accident that ki As an adult, Theo moves silkily between the drawing rooms of the rich and the dusty labyrinth of an antiques store where he works. He is alienated and in love--and at the center of a narrowing, ever more dangerous circle. -The Goldfinch is a mesmerizing, stay-up-all-night and tell-all-your-friends triumph, an old-fashioned story of loss and obsession, survival and self-invention, and the ruthless machinations of fate.",Fiction; Literary,en,2017-12-05,2017-12-24,,8,, +The Goldfinch is a mesmerizing, stay-up-all-night and tell-all-your-friends triumph, an old-fashioned story of loss and obsession, survival and self-invention, and the ruthless machinations of fate.",Fiction; Literary,en,2019-12-05,2019-12-24,,8,, 9780141915036,hNisMz5W1DQC,The Grapes of Wrath,,"Steinbeck, John",544,,,"Shocking and controversial when it was first published in 1939, Steinbeck's Pulitzer Prize-winning epic remains his undisputed masterpiece. -Set against the background of dust bowl Oklahoma and Californian migrant life, it tells of the Joad family, who, like thousands of others, are forced to travel West in search of the promised land. Their story is one of false hopes, thwarted desires and broken dreams, yet out of their suffering Steinbeck created a drama that is intensely human yet majestic in its scale and moral vision; an eloquent tribute to the endurance and dignity of the human spirit.",Classics; Fiction,,2017-12-25,2018-01-13,,,, -9780141908328,qUI8pbpCNJUC,A Clockwork Orange,,"Burgess, Anthony",176,,,"In this nightmare vision of a not-too-distant future, fifteen-year-old Alex and his three friends rob, rape, torture and murder - for fun. Alex is jailed for his vicious crimes and the State undertakes to reform him - but how and at what cost?",Classics; Fiction,,2018-01-14,2018-02-02,,,, +Set against the background of dust bowl Oklahoma and Californian migrant life, it tells of the Joad family, who, like thousands of others, are forced to travel West in search of the promised land. Their story is one of false hopes, thwarted desires and broken dreams, yet out of their suffering Steinbeck created a drama that is intensely human yet majestic in its scale and moral vision; an eloquent tribute to the endurance and dignity of the human spirit.",Classics; Fiction,,2019-12-25,2020-01-13,,,, +9780141908328,qUI8pbpCNJUC,A Clockwork Orange,,"Burgess, Anthony",176,,,"In this nightmare vision of a not-too-distant future, fifteen-year-old Alex and his three friends rob, rape, torture and murder - for fun. Alex is jailed for his vicious crimes and the State undertakes to reform him - but how and at what cost?",Classics; Fiction,,2020-01-14,2020-02-02,,,, 9780141912561,jb_yfcu8KwUC,On the Road,,"Kerouac, Jack",320,,,"On the Road swings to the rhythms of 1950s underground America, jazz, sex, generosity, chill dawns and drugs, with Sal Paradise and his hero Dean Moriarty, traveller and mystic, the living epitome of Beat. Now recognized as a modern classic, its American Dream is nearer that of Walt Whitman than Scott Fitzgerald, and it goes racing towards the sunset with unforgettable exuberance, poignancy and autobiographical passion. -Contains an introduction by Ann Charters, as well as suggestions for further reading of acclaimed criticisms and references.",Classics; Fiction; Literary,,2018-02-03,2018-02-22,,,, +Contains an introduction by Ann Charters, as well as suggestions for further reading of acclaimed criticisms and references.",Classics; Fiction; Literary,,2020-02-03,2020-02-22,,,, diff --git a/ReadingList/Startup/LaunchManager.swift b/ReadingList/Startup/LaunchManager.swift index 6759e9cd..f2606d59 100644 --- a/ReadingList/Startup/LaunchManager.swift +++ b/ReadingList/Startup/LaunchManager.swift @@ -163,6 +163,14 @@ class LaunchManager { return true } + var presentFirstLaunchOrChangeLog: Bool { + #if DEBUG + return !CommandLine.arguments.contains("--UITests_Screenshots") + #else + return true + #endif + } + private func initialiseAfterPersistentStoreLoad() { #if DEBUG Debug.initialiseData() @@ -175,12 +183,14 @@ class LaunchManager { NotificationCenter.default.addObserver(self, selector: #selector(self.initialiseTheme), name: .ThemeSettingChanged, object: nil) } - if isFirstLaunch { - let firstOpenScreen = FirstOpenScreenProvider().build() - window.rootViewController!.present(firstOpenScreen, animated: true) - } else if let lastLaunchedVersion = AppLaunchHistory.lastLaunchedBuildInfo?.version { - if let changeList = ChangeListProvider().changeListController(after: lastLaunchedVersion) { - window.rootViewController!.present(changeList, animated: true) + if presentFirstLaunchOrChangeLog { + if isFirstLaunch { + let firstOpenScreen = FirstOpenScreenProvider().build() + window.rootViewController!.present(firstOpenScreen, animated: true) + } else if let lastLaunchedVersion = AppLaunchHistory.lastLaunchedBuildInfo?.version { + if let changeList = ChangeListProvider().changeListController(after: lastLaunchedVersion) { + window.rootViewController!.present(changeList, animated: true) + } } } diff --git a/ReadingList/ViewControllers/Add/ScanBarcode.swift b/ReadingList/ViewControllers/Add/ScanBarcode.swift index 4c53f62f..4c58f61b 100644 --- a/ReadingList/ViewControllers/Add/ScanBarcode.swift +++ b/ReadingList/ViewControllers/Add/ScanBarcode.swift @@ -178,9 +178,11 @@ final class ScanBarcode: UIViewController { private func setupAvSession() { #if DEBUG if CommandLine.arguments.contains("--UITests_Screenshots") { - let imageView = UIImageView(frame: view.frame) + // Not sure why, but the view frame seems way to big when running on iPad + let frameToUse = UIDevice.current.userInterfaceIdiom == .pad ? CGRect(x: 0, y: 0, width: 600, height: 600) : view.frame + let imageView = UIImageView(frame: frameToUse) + imageView.image = UIImage(named: "example_barcode.jpg")! imageView.contentMode = .scaleAspectFill - imageView.image = #imageLiteral(resourceName: "example_barcode.jpg") view.addSubview(imageView) return } diff --git a/ReadingList_UITests/Screenshots.swift b/ReadingList_UITests/Screenshots.swift index 76f35fcd..1b5d378f 100644 --- a/ReadingList_UITests/Screenshots.swift +++ b/ReadingList_UITests/Screenshots.swift @@ -24,8 +24,8 @@ class Screenshots: XCTestCase { func testSnapshot() { - // Screenshot is designed for iOS 13 only - guard #available(iOS 13.0, *) else { return } + // Screenshot is designed for iOS 14 only + guard #available(iOS 14.0, *) else { return } let app = ReadingListApp() app.clickTab(.toRead) @@ -50,7 +50,7 @@ class Screenshots: XCTestCase { app.swipeDown() } app.navigationBars["Finished"].buttons["Add"].tap() - app.sheets["Add New Book"].buttons["Scan Barcode"].tap() + app.collectionViews.buttons["Scan Barcode"].tap() snapshot("2_ScanBarcode") app.navigationBars["Scan Barcode"].buttons["Cancel"].tap() @@ -93,11 +93,5 @@ class Screenshots: XCTestCase { app.swipeUp() } snapshot("5_Organise") - - //app.tabBars.buttons["Settings"].tap() - //app.tables.staticTexts["General"].tap() - //app.tables.staticTexts["Black"].tap() - //app.tabBars.buttons["To Read"].tap() - //snapshot("6_DarkMode") } } diff --git a/ReadingList_UITests/SnapshotHelper.swift b/ReadingList_UITests/SnapshotHelper.swift index aaa2a9a9..1f12573c 100644 --- a/ReadingList_UITests/SnapshotHelper.swift +++ b/ReadingList_UITests/SnapshotHelper.swift @@ -38,22 +38,13 @@ func snapshot(_ name: String, timeWaitingForIdle timeout: TimeInterval = 20) { } enum SnapshotError: Error, CustomDebugStringConvertible { - case cannotDetectUser - case cannotFindHomeDirectory case cannotFindSimulatorHomeDirectory - case cannotAccessSimulatorHomeDirectory(String) case cannotRunOnPhysicalDevice var debugDescription: String { switch self { - case .cannotDetectUser: - return "Couldn't find Snapshot configuration files - can't detect current user " - case .cannotFindHomeDirectory: - return "Couldn't find Snapshot configuration files - can't detect `Users` dir" case .cannotFindSimulatorHomeDirectory: return "Couldn't find simulator home location. Please, check SIMULATOR_HOST_HOME env variable." - case .cannotAccessSimulatorHomeDirectory(let simulatorHostHome): - return "Can't prepare environment. Simulator home location is inaccessible. Does \(simulatorHostHome) exist?" case .cannotRunOnPhysicalDevice: return "Can't use Snapshot on a physical device." } @@ -75,7 +66,7 @@ open class Snapshot: NSObject { Snapshot.waitForAnimations = waitForAnimations do { - let cacheDir = try pathPrefix() + let cacheDir = try getCacheDirectory() Snapshot.cacheDirectory = cacheDir setLanguage(app) setLocale(app) @@ -174,6 +165,8 @@ open class Snapshot: NSObject { } let screenshot = XCUIScreen.main.screenshot() + let image = XCUIDevice.shared.orientation.isLandscape ? fixLandscapeOrientation(image: screenshot.image) : screenshot.image + guard var simulator = ProcessInfo().environment["SIMULATOR_DEVICE_NAME"], let screenshotsDir = screenshotsDirectory else { return } do { @@ -183,7 +176,7 @@ open class Snapshot: NSObject { simulator = regex.stringByReplacingMatches(in: simulator, range: range, withTemplate: "") let path = screenshotsDir.appendingPathComponent("\(simulator)-\(name).png") - try screenshot.pngRepresentation.write(to: path) + try image.pngData()?.write(to: path, options: .atomic) } catch let error { NSLog("Problem writing screenshot: \(name) to \(screenshotsDir)/\(simulator)-\(name).png") NSLog(error.localizedDescription) @@ -191,6 +184,19 @@ open class Snapshot: NSObject { #endif } + class func fixLandscapeOrientation(image: UIImage) -> UIImage { + if #available(iOS 10.0, *) { + let format = UIGraphicsImageRendererFormat() + format.scale = image.scale + let renderer = UIGraphicsImageRenderer(size: image.size, format: format) + return renderer.image { context in + image.draw(in: CGRect(x: 0, y: 0, width: image.size.width, height: image.size.height)) + } + } else { + return image + } + } + class func waitForLoadingIndicatorToDisappear(within timeout: TimeInterval) { #if os(tvOS) return @@ -206,40 +212,28 @@ open class Snapshot: NSObject { _ = XCTWaiter.wait(for: [networkLoadingIndicatorDisappeared], timeout: timeout) } - class func pathPrefix() throws -> URL? { - let homeDir: URL + class func getCacheDirectory() throws -> URL { + let cachePath = "Library/Caches/tools.fastlane" // on OSX config is stored in /Users//Library // and on iOS/tvOS/WatchOS it's in simulator's home dir #if os(OSX) - guard let user = ProcessInfo().environment["USER"] else { - throw SnapshotError.cannotDetectUser - } - - guard let usersDir = FileManager.default.urls(for: .userDirectory, in: .localDomainMask).first else { - throw SnapshotError.cannotFindHomeDirectory + let homeDir = URL(fileURLWithPath: NSHomeDirectory()) + return homeDir.appendingPathComponent(cachePath) + #elseif arch(i386) || arch(x86_64) + guard let simulatorHostHome = ProcessInfo().environment["SIMULATOR_HOST_HOME"] else { + throw SnapshotError.cannotFindSimulatorHomeDirectory } - - homeDir = usersDir.appendingPathComponent(user) + let homeDir = URL(fileURLWithPath: simulatorHostHome) + return homeDir.appendingPathComponent(cachePath) #else - #if arch(i386) || arch(x86_64) - guard let simulatorHostHome = ProcessInfo().environment["SIMULATOR_HOST_HOME"] else { - throw SnapshotError.cannotFindSimulatorHomeDirectory - } - guard let homeDirUrl = URL(string: simulatorHostHome) else { - throw SnapshotError.cannotAccessSimulatorHomeDirectory(simulatorHostHome) - } - homeDir = URL(fileURLWithPath: homeDirUrl.path) - #else - throw SnapshotError.cannotRunOnPhysicalDevice - #endif + throw SnapshotError.cannotRunOnPhysicalDevice #endif - return homeDir.appendingPathComponent("Library/Caches/tools.fastlane") } } private extension XCUIElementAttributes { var isNetworkLoadingIndicator: Bool { - if hasWhiteListedIdentifier { return false } + if hasAllowListedIdentifier { return false } let hasOldLoadingIndicatorSize = frame.size == CGSize(width: 10, height: 20) let hasNewLoadingIndicatorSize = frame.size.width.isBetween(46, and: 47) && frame.size.height.isBetween(2, and: 3) @@ -247,10 +241,10 @@ private extension XCUIElementAttributes { return hasOldLoadingIndicatorSize || hasNewLoadingIndicatorSize } - var hasWhiteListedIdentifier: Bool { - let whiteListedIdentifiers = ["GeofenceLocationTrackingOn", "StandardLocationTrackingOn"] + var hasAllowListedIdentifier: Bool { + let allowListedIdentifiers = ["GeofenceLocationTrackingOn", "StandardLocationTrackingOn"] - return whiteListedIdentifiers.contains(identifier) + return allowListedIdentifiers.contains(identifier) } func isStatusBar(_ deviceWidth: CGFloat) -> Bool { @@ -300,4 +294,4 @@ private extension CGFloat { // Please don't remove the lines below // They are used to detect outdated configuration files -// SnapshotHelperVersion [1.21] +// SnapshotHelperVersion [1.24] diff --git a/fastlane/Fastfile b/fastlane/Fastfile index 2bd5c045..5957f2b1 100644 --- a/fastlane/Fastfile +++ b/fastlane/Fastfile @@ -68,7 +68,7 @@ platform :ios do desc "Create framed screenshots for a range of devices" lane :snaps do - snapshot(xcargs: '-only-testing:ReadingList_UITests/Screenshots') + snapshot(xcargs: '-only-testing:ReadingList_UITests/Screenshots', override_status_bar: true) frame_screenshots(white: true) end diff --git a/fastlane/Snapfile b/fastlane/Snapfile index a935b788..17d67bc0 100644 --- a/fastlane/Snapfile +++ b/fastlane/Snapfile @@ -1,25 +1,24 @@ devices([ -# "iPhone SE", -# "iPhone 8", -# "iPhone 8 Plus", -# "iPhone 11 Pro", -# "iPhone 11 Pro Max", -# "iPad Pro (9.7-inch)", -# "iPad Pro (12.9-inch)", - "iPad Pro (12.9-inch) (3rd generation)" + #"iPhone SE (1st generation)", + #"iPhone 8", + #"iPhone 8 Plus", + #"iPhone 11 Pro", + "iPhone 11 Pro Max", + "iPad Pro (9.7-inch)", + "iPad Pro (12.9-inch) (4th generation)" ]) languages([ - "en-GB", -# "en-US" + "en-GB" ]) scheme("ReadingList_UITests") workspace("ReadingList.xcworkspace") +ios_version("14.0") #clear_previous_screenshots(true) reinstall_app(true) concurrent_simulators(false) # Arguments to pass to the app on launch. See https://docs.fastlane.tools/actions/snapshot/#launch-arguments -# launch_arguments(["--reset", "--UITests", "--UITests_PopulateData", "--UITests_Screenshots", "-UIPreferredContentSizeCategoryName", "UICTContentSizeCategoryXL"]) +#launch_arguments(["--reset", "--UITests", "--UITests_PopulateData", "--UITests_Screenshots", "-UIPreferredContentSizeCategoryName", "UICTContentSizeCategoryXL"]) # For more information about all available options run # fastlane action snapshot diff --git a/project.yml b/project.yml index cad308a5..0841f1ee 100644 --- a/project.yml +++ b/project.yml @@ -6,7 +6,7 @@ options: indentWith: 4 bundleIdPrefix: com.andrewbennet groupOrdering: - - order: [ReadingList, ReadingList_Foundation, ReadingList_UITests, ReadingList_UnitTests, ReadingListWidget, Debug] + - order: [ReadingList, ReadingList_Foundation, ReadingList_UITests, ReadingList_UnitTests, ReadingListWidget, Debug, fastlane] packages: Cosmos: @@ -36,6 +36,7 @@ packages: fileGroups: - Debug/ + - fastlane/ - README.md - Podfile - project.yml @@ -137,38 +138,6 @@ targets: scheme: testTargets: - ReadingList_UITests - preActions: - - name: Set simulator status bar overrides - settingsTarget: ReadingList_UITests - script: | - function version { - echo "$@" | awk -F. '{ printf("%d%03d%03d%03d\n", $1,$2,$3,$4); }'; - } - - if [[ "${SDKROOT}" != *"simulator"* ]]; then - exit 0; - fi - - if [ $(version "${TARGET_DEVICE_OS_VERSION}") -ge $(version "13") ]; then - xcrun simctl boot "${TARGET_DEVICE_IDENTIFIER}"; - xcrun simctl status_bar "${TARGET_DEVICE_IDENTIFIER}" override --dataNetwork wifi --wifiMode active --wifiBars 3 --cellularMode notSupported --batteryState discharging --batteryLevel 100; - fi - postActions: - - name: Reset simulator status bar - settingsTarget: ReadingList_UITests - script: | - function version { - echo "$@" | awk -F. '{ printf("%d%03d%03d%03d\n", $1,$2,$3,$4); }'; - } - - if [[ "${SDKROOT}" != *"simulator"* ]]; then - exit 0; - fi - - if [ $(version "${TARGET_DEVICE_OS_VERSION}") -ge $(version "13") ]; then - xcrun simctl boot "${TARGET_DEVICE_IDENTIFIER}"; - xcrun simctl status_bar "${TARGET_DEVICE_IDENTIFIER}" clear; - fi ReadingListWidget: type: app-extension