mirror of
https://code.mensbeam.com/MensBeam/Arsse.git
synced 2025-01-03 14:32:40 +00:00
TTRSS: Correct mark toggling; fixes #132
This commit is contained in:
parent
821bb22a72
commit
adece521a9
4 changed files with 30 additions and 8 deletions
|
@ -2,8 +2,10 @@ Version 0.2.1 (2017-12-??)
|
||||||
==========================
|
==========================
|
||||||
|
|
||||||
Bug fixes:
|
Bug fixes:
|
||||||
|
- Make SQLite timeouts much less likely
|
||||||
- Accept base64-encoded passwords from TTRSS clients
|
- Accept base64-encoded passwords from TTRSS clients
|
||||||
- Rename feeds correctly via TTRSS protocol
|
- Rename feeds correctly via TTRSS protocol
|
||||||
|
- Toggle marks correctly via TTRSS protocol
|
||||||
- Be even stricter about output data types in NextCloud News
|
- Be even stricter about output data types in NextCloud News
|
||||||
|
|
||||||
Version 0.2.0 (2017-11-30)
|
Version 0.2.0 (2017-11-30)
|
||||||
|
|
|
@ -1095,8 +1095,14 @@ class API extends \JKingWeb\Arsse\REST\AbstractHandler {
|
||||||
$out += Arsse::$db->articleMark(Arsse::$user->id, ['starred' => (bool) $data['mode']], (new Context)->articles($articles));
|
$out += Arsse::$db->articleMark(Arsse::$user->id, ['starred' => (bool) $data['mode']], (new Context)->articles($articles));
|
||||||
break;
|
break;
|
||||||
case 2: //toggle
|
case 2: //toggle
|
||||||
$out += Arsse::$db->articleMark(Arsse::$user->id, ['starred' => true], (new Context)->articles($articles)->starred(false));
|
$on = array_column(Arsse::$db->articleList(Arsse::$user->id, (new Context)->articles($articles)->starred(true), Database::LIST_MINIMAL)->getAll(), "id");
|
||||||
$out += Arsse::$db->articleMark(Arsse::$user->id, ['starred' => false], (new Context)->articles($articles)->starred(true));
|
$off = array_column(Arsse::$db->articleList(Arsse::$user->id, (new Context)->articles($articles)->starred(false), Database::LIST_MINIMAL)->getAll(), "id");
|
||||||
|
if ($off) {
|
||||||
|
$out += Arsse::$db->articleMark(Arsse::$user->id, ['starred' => true], (new Context)->articles($off));
|
||||||
|
}
|
||||||
|
if ($on) {
|
||||||
|
$out += Arsse::$db->articleMark(Arsse::$user->id, ['starred' => false], (new Context)->articles($on));
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
throw new Exception("INCORRECT_USAGE");
|
throw new Exception("INCORRECT_USAGE");
|
||||||
|
@ -1121,8 +1127,14 @@ class API extends \JKingWeb\Arsse\REST\AbstractHandler {
|
||||||
$out += Arsse::$db->articleMark(Arsse::$user->id, ['read' => !$data['mode']], (new Context)->articles($articles));
|
$out += Arsse::$db->articleMark(Arsse::$user->id, ['read' => !$data['mode']], (new Context)->articles($articles));
|
||||||
break;
|
break;
|
||||||
case 2: //toggle
|
case 2: //toggle
|
||||||
$out += Arsse::$db->articleMark(Arsse::$user->id, ['read' => true], (new Context)->articles($articles)->unread(true));
|
$on = array_column(Arsse::$db->articleList(Arsse::$user->id, (new Context)->articles($articles)->unread(true), Database::LIST_MINIMAL)->getAll(), "id");
|
||||||
$out += Arsse::$db->articleMark(Arsse::$user->id, ['read' => false], (new Context)->articles($articles)->unread(false));
|
$off = array_column(Arsse::$db->articleList(Arsse::$user->id, (new Context)->articles($articles)->unread(false), Database::LIST_MINIMAL)->getAll(), "id");
|
||||||
|
if ($off) {
|
||||||
|
$out += Arsse::$db->articleMark(Arsse::$user->id, ['read' => false], (new Context)->articles($off));
|
||||||
|
}
|
||||||
|
if ($on) {
|
||||||
|
$out += Arsse::$db->articleMark(Arsse::$user->id, ['read' => true], (new Context)->articles($on));
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
throw new Exception("INCORRECT_USAGE");
|
throw new Exception("INCORRECT_USAGE");
|
||||||
|
|
|
@ -1255,15 +1255,19 @@ LONG_STRING;
|
||||||
['op' => "updateArticle", 'sid' => "PriestsOfSyrinx", 'article_ids' => "42, 2112, -1", 'field' => 4], // invalid field
|
['op' => "updateArticle", 'sid' => "PriestsOfSyrinx", 'article_ids' => "42, 2112, -1", 'field' => 4], // invalid field
|
||||||
['op' => "updateArticle", 'sid' => "PriestsOfSyrinx", 'article_ids' => "0, -1", 'field' => 3], // no valid IDs
|
['op' => "updateArticle", 'sid' => "PriestsOfSyrinx", 'article_ids' => "0, -1", 'field' => 3], // no valid IDs
|
||||||
];
|
];
|
||||||
|
Phake::when(Arsse::$db)->articleList($this->anything(), (new Context)->articles([42, 2112])->starred(true), $this->anything())->thenReturn(new Result([['id' => 42]]));
|
||||||
|
Phake::when(Arsse::$db)->articleList($this->anything(), (new Context)->articles([42, 2112])->starred(false), $this->anything())->thenReturn(new Result([['id' => 2112]]));
|
||||||
|
Phake::when(Arsse::$db)->articleList($this->anything(), (new Context)->articles([42, 2112])->unread(true), $this->anything())->thenReturn(new Result([['id' => 42]]));
|
||||||
|
Phake::when(Arsse::$db)->articleList($this->anything(), (new Context)->articles([42, 2112])->unread(false), $this->anything())->thenReturn(new Result([['id' => 2112]]));
|
||||||
Phake::when(Arsse::$db)->articleMark->thenReturn(1);
|
Phake::when(Arsse::$db)->articleMark->thenReturn(1);
|
||||||
Phake::when(Arsse::$db)->articleMark($this->anything(), ['starred' => false], (new Context)->articles([42, 2112]))->thenReturn(2);
|
Phake::when(Arsse::$db)->articleMark($this->anything(), ['starred' => false], (new Context)->articles([42, 2112]))->thenReturn(2);
|
||||||
Phake::when(Arsse::$db)->articleMark($this->anything(), ['starred' => true], (new Context)->articles([42, 2112]))->thenReturn(4);
|
Phake::when(Arsse::$db)->articleMark($this->anything(), ['starred' => true], (new Context)->articles([42, 2112]))->thenReturn(4);
|
||||||
Phake::when(Arsse::$db)->articleMark($this->anything(), ['starred' => false], (new Context)->articles([42, 2112])->starred(true))->thenReturn(8);
|
Phake::when(Arsse::$db)->articleMark($this->anything(), ['starred' => false], (new Context)->articles([42]))->thenReturn(8);
|
||||||
Phake::when(Arsse::$db)->articleMark($this->anything(), ['starred' => true], (new Context)->articles([42, 2112])->starred(false))->thenReturn(16);
|
Phake::when(Arsse::$db)->articleMark($this->anything(), ['starred' => true], (new Context)->articles([2112]))->thenReturn(16);
|
||||||
Phake::when(Arsse::$db)->articleMark($this->anything(), ['read' => true], (new Context)->articles([42, 2112]))->thenReturn(32); // false is read for TT-RSS
|
Phake::when(Arsse::$db)->articleMark($this->anything(), ['read' => true], (new Context)->articles([42, 2112]))->thenReturn(32); // false is read for TT-RSS
|
||||||
Phake::when(Arsse::$db)->articleMark($this->anything(), ['read' => false], (new Context)->articles([42, 2112]))->thenReturn(64);
|
Phake::when(Arsse::$db)->articleMark($this->anything(), ['read' => false], (new Context)->articles([42, 2112]))->thenReturn(64);
|
||||||
Phake::when(Arsse::$db)->articleMark($this->anything(), ['read' => true], (new Context)->articles([42, 2112])->unread(true))->thenReturn(128);
|
Phake::when(Arsse::$db)->articleMark($this->anything(), ['read' => true], (new Context)->articles([42]))->thenReturn(128);
|
||||||
Phake::when(Arsse::$db)->articleMark($this->anything(), ['read' => false], (new Context)->articles([42, 2112])->unread(false))->thenReturn(256);
|
Phake::when(Arsse::$db)->articleMark($this->anything(), ['read' => false], (new Context)->articles([2112]))->thenReturn(256);
|
||||||
Phake::when(Arsse::$db)->articleMark($this->anything(), ['note' => ""], (new Context)->articles([42, 2112]))->thenReturn(512);
|
Phake::when(Arsse::$db)->articleMark($this->anything(), ['note' => ""], (new Context)->articles([42, 2112]))->thenReturn(512);
|
||||||
Phake::when(Arsse::$db)->articleMark($this->anything(), ['note' => "eh"], (new Context)->articles([42, 2112]))->thenReturn(1024);
|
Phake::when(Arsse::$db)->articleMark($this->anything(), ['note' => "eh"], (new Context)->articles([42, 2112]))->thenReturn(1024);
|
||||||
$out = [
|
$out = [
|
||||||
|
|
|
@ -416,6 +416,7 @@ trait SeriesArticle {
|
||||||
$this->compareIds([19], (new Context)->subscription(5)->unread(false));
|
$this->compareIds([19], (new Context)->subscription(5)->unread(false));
|
||||||
// get starred articles
|
// get starred articles
|
||||||
$this->compareIds([1,20], (new Context)->starred(true));
|
$this->compareIds([1,20], (new Context)->starred(true));
|
||||||
|
$this->compareIds([2,3,4,5,6,7,8,19], (new Context)->starred(false));
|
||||||
$this->compareIds([1], (new Context)->starred(true)->unread(false));
|
$this->compareIds([1], (new Context)->starred(true)->unread(false));
|
||||||
$this->compareIds([], (new Context)->starred(true)->unread(false)->subscription(5));
|
$this->compareIds([], (new Context)->starred(true)->unread(false)->subscription(5));
|
||||||
// get items relative to edition
|
// get items relative to edition
|
||||||
|
@ -466,6 +467,9 @@ trait SeriesArticle {
|
||||||
// get articles base on whether or not they have notes
|
// get articles base on whether or not they have notes
|
||||||
$this->compareIds([1,3,4,5,6,7,8,19,20], (new Context)->annotated(false));
|
$this->compareIds([1,3,4,5,6,7,8,19,20], (new Context)->annotated(false));
|
||||||
$this->compareIds([2], (new Context)->annotated(true));
|
$this->compareIds([2], (new Context)->annotated(true));
|
||||||
|
// get specific starred articles
|
||||||
|
$this->compareIds([1], (new Context)->articles([1,2,3])->starred(true));
|
||||||
|
$this->compareIds([2,3], (new Context)->articles([1,2,3])->starred(false));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testListArticlesOfAMissingFolder() {
|
public function testListArticlesOfAMissingFolder() {
|
||||||
|
|
Loading…
Reference in a new issue