fix settingscontroller bug, add more props to db backend

This commit is contained in:
Jonas Heinrich 2020-11-19 22:35:13 +01:00
parent ff3a745441
commit 05d6634d0c
11 changed files with 130 additions and 51 deletions

View File

@ -44,18 +44,27 @@ class FavoriteController extends Controller {
/** /**
* @NoAdminRequired * @NoAdminRequired
*/ */
public function create(string $stationuuid, string $name, string $favicon, string $urlresolved): DataResponse { public function create(string $stationuuid, string $name, string $favicon, string $urlresolved,
string $bitrate, string $country, string $language, string $homepage,
string $codec, string $tags): DataResponse {
return new DataResponse($this->service->create($stationuuid, $name, return new DataResponse($this->service->create($stationuuid, $name,
$favicon, $urlresolved, $this->userId)); $favicon, $urlresolved, $bitrate, $country, $language, $homepage, $codec,
$tags, $this->userId));
} }
/** /**
* @NoAdminRequired * @NoAdminRequired
*/ */
public function update(int $id, string $stationuuid, public function update(int $id, string $stationuuid,
string $name, string $favicon, string $urlresolved): DataResponse { string $name, string $favicon, string $urlresolved,
return $this->handleNotFound(function () use ($id, $stationuuid, $name, $favicon, $urlresolved) { string $bitrate, string $country, string $language, string $homepage,
return $this->service->update($id, $stationuuid, $name, $favicon, $urlresolved, $this->userId); string $codec, string $tags): DataResponse {
return $this->handleNotFound(function () use ($id, $stationuuid, $name,
$favicon, $urlresolved, $bitrate, $country, $language, $homepage, $codec,
$tags) {
return $this->service->update($id, $stationuuid, $name, $favicon,
$urlresolved, $bitrate, $country, $language, $homepage, $codec,
$tags, $this->userId);
}); });
} }

View File

@ -44,18 +44,26 @@ class RecentController extends Controller {
/** /**
* @NoAdminRequired * @NoAdminRequired
*/ */
public function create(string $stationuuid, string $name, string $favicon, string $urlresolved): DataResponse { public function create(string $stationuuid, string $name, string $favicon, string $urlresolved,
string $bitrate, string $country, string $language, string $homepage,
string $codec, string $tags): DataResponse {
return new DataResponse($this->service->create($stationuuid, $name, return new DataResponse($this->service->create($stationuuid, $name,
$favicon, $urlresolved, $this->userId)); $favicon, $urlresolved, $bitrate, $country, $language, $homepage, $codec,
$tags, $this->userId));
} }
/** /**
* @NoAdminRequired * @NoAdminRequired
*/ */
public function update(int $id, string $stationuuid, public function update(int $id, string $stationuuid, string $name,
string $name, string $favicon, string $urlresolved): DataResponse { string $favicon, string $urlresolved, string $bitrate, string $country,
return $this->handleNotFound(function () use ($id, $stationuuid, $name, $favicon, $urlresolved) { string $language, string $homepage, string $codec, string $tags): DataResponse {
return $this->service->update($id, $stationuuid, $name, $favicon, $urlresolved, $this->userId); return $this->handleNotFound(function () use ($id, $stationuuid, $name,
$favicon, $urlresolved, $bitrate, $country, $language, $homepage, $codec,
$tags) {
return $this->service->update($id, $stationuuid, $name, $favicon,
$urlresolved, $bitrate, $country, $language, $homepage, $codec,
$tags, $this->userId);
}); });
} }

View File

@ -79,7 +79,7 @@ class SettingsController extends ApiController {
*/ */
public function setMenuState($menuState = ""): JSONResponse { public function setMenuState($menuState = ""): JSONResponse {
if ($menuState == 'SEARCH') { if ($menuState == 'SEARCH') {
return true; return new JSONResponse(['status' => 'success'], Http::STATUS_OK);
}; };
$legalArguments = ['TOP', 'RECENT', 'NEW', 'FAVORITES', 'CATEGORIES']; $legalArguments = ['TOP', 'RECENT', 'NEW', 'FAVORITES', 'CATEGORIES'];
if (!in_array($menuState, $legalArguments)) { if (!in_array($menuState, $legalArguments)) {

View File

@ -27,6 +27,12 @@ class RecentMapper extends QBMapper {
->addSelect('name') ->addSelect('name')
->addSelect('favicon') ->addSelect('favicon')
->addSelect('urlresolved') ->addSelect('urlresolved')
->addSelect('bitrate')
->addSelect('country')
->addSelect('language')
->addSelect('homepage')
->addSelect('codec')
->addSelect('tags')
->from('recent') ->from('recent')
->orderBy('id', 'DESC') ->orderBy('id', 'DESC')
->where($qb->expr()->eq('id', $qb->createNamedParameter($id, IQueryBuilder::PARAM_INT))) ->where($qb->expr()->eq('id', $qb->createNamedParameter($id, IQueryBuilder::PARAM_INT)))
@ -45,6 +51,12 @@ class RecentMapper extends QBMapper {
->addSelect('name') ->addSelect('name')
->addSelect('favicon') ->addSelect('favicon')
->addSelect('urlresolved') ->addSelect('urlresolved')
->addSelect('bitrate')
->addSelect('country')
->addSelect('language')
->addSelect('homepage')
->addSelect('codec')
->addSelect('tags')
->from('recent') ->from('recent')
->orderBy('id', 'DESC') ->orderBy('id', 'DESC')
->where($qb->expr()->eq('user_id', $qb->createNamedParameter($userId))); ->where($qb->expr()->eq('user_id', $qb->createNamedParameter($userId)));

View File

@ -11,6 +11,12 @@ class Station extends Entity implements JsonSerializable {
protected $name; protected $name;
protected $favicon; protected $favicon;
protected $urlresolved; protected $urlresolved;
protected $bitrate;
protected $country;
protected $language;
protected $homepage;
protected $codec;
protected $tags;
protected $userId; protected $userId;
public function jsonSerialize(): array { public function jsonSerialize(): array {
@ -19,7 +25,13 @@ class Station extends Entity implements JsonSerializable {
'stationuuid' => $this->stationuuid, 'stationuuid' => $this->stationuuid,
'name' => $this->name, 'name' => $this->name,
'favicon' => $this->favicon, 'favicon' => $this->favicon,
'urlresolved' => $this->urlresolved 'urlresolved' => $this->urlresolved,
'bitrate' => $this->bitrate,
'country' => $this->country,
'language' => $this->language,
'homepage' => $this->homepage,
'codec' => $this->codec,
'tags' => $this->tags
]; ];
} }
} }

View File

@ -38,6 +38,12 @@ class Version000000Date20181013124731 extends SimpleMigrationStep {
]); ]);
$table->addColumn('favicon', 'text'); $table->addColumn('favicon', 'text');
$table->addColumn('urlresolved', 'text'); $table->addColumn('urlresolved', 'text');
$table->addColumn('bitrate', 'text');
$table->addColumn('country', 'text');
$table->addColumn('language', 'text');
$table->addColumn('homepage', 'text');
$table->addColumn('codec', 'text');
$table->addColumn('tags', 'text');
$table->setPrimaryKey(['id']); $table->setPrimaryKey(['id']);
$table->addIndex(['user_id'], 'favorites_user_id_index'); $table->addIndex(['user_id'], 'favorites_user_id_index');
@ -60,6 +66,12 @@ class Version000000Date20181013124731 extends SimpleMigrationStep {
]); ]);
$table->addColumn('favicon', 'text'); $table->addColumn('favicon', 'text');
$table->addColumn('urlresolved', 'text'); $table->addColumn('urlresolved', 'text');
$table->addColumn('bitrate', 'text');
$table->addColumn('country', 'text');
$table->addColumn('language', 'text');
$table->addColumn('homepage', 'text');
$table->addColumn('codec', 'text');
$table->addColumn('tags', 'text');
$table->setPrimaryKey(['id']); $table->setPrimaryKey(['id']);
$table->addIndex(['user_id'], 'recent_user_id_index'); $table->addIndex(['user_id'], 'recent_user_id_index');

View File

@ -45,23 +45,37 @@ class FavoriteService {
} }
} }
public function create($stationuuid, $name, $favicon, $urlresolved, $userId) { public function create($stationuuid, $name, $favicon, $urlresolved,
$bitrate, $country, $language, $homepage, $codec, $tags, $userId) {
$station = new Station(); $station = new Station();
$station->setStationuuid($stationuuid); $station->setStationuuid($stationuuid);
$station->setName($name); $station->setName($name);
$station->setFavicon($favicon); $station->setFavicon($favicon);
$station->setUrlresolved($urlresolved); $station->setUrlresolved($urlresolved);
$station->setBitrate($bitrate);
$station->setCountry($country);
$station->setLanguage($language);
$station->setHomepage($homepage);
$station->setCodec($codec);
$station->setTags($tags);
$station->setUserId($userId); $station->setUserId($userId);
return $this->mapper->insert($station); return $this->mapper->insert($station);
} }
public function update($id, $stationuuid, $name, $favicon, $urlresolved, $userId) { public function update($id, $stationuuid, $name, $favicon, $urlresolved,
$bitrate, $country, $language, $homepage, $codec, $tags, $userId) {
try { try {
$station = $this->mapper->find($id, $userId); $station = $this->mapper->find($id, $userId);
$station->setStationuuid($stationuuid); $station->setStationuuid($stationuuid);
$station->setName($name); $station->setName($name);
$station->setFavicon($favicon); $station->setFavicon($favicon);
$station->setUrlresolved($urlresolved); $station->setUrlresolved($urlresolved);
$station->setBitrate($bitrate);
$station->setCountry($country);
$station->setLanguage($language);
$station->setHomepage($homepage);
$station->setCodec($codec);
$station->setTags($tags);
return $this->mapper->update($station); return $this->mapper->update($station);
} catch (Exception $e) { } catch (Exception $e) {
$this->handleException($e); $this->handleException($e);

View File

@ -45,23 +45,37 @@ class RecentService {
} }
} }
public function create($stationuuid, $name, $favicon, $urlresolved, $userId) { public function create($stationuuid, $name, $favicon, $urlresolved,
$bitrate, $country, $language, $homepage, $codec, $tags, $userId) {
$station = new Station(); $station = new Station();
$station->setStationuuid($stationuuid); $station->setStationuuid($stationuuid);
$station->setName($name); $station->setName($name);
$station->setFavicon($favicon); $station->setFavicon($favicon);
$station->setUrlresolved($urlresolved); $station->setUrlresolved($urlresolved);
$station->setBitrate($bitrate);
$station->setCountry($country);
$station->setLanguage($language);
$station->setHomepage($homepage);
$station->setCodec($codec);
$station->setTags($tags);
$station->setUserId($userId); $station->setUserId($userId);
return $this->mapper->insert($station); return $this->mapper->insert($station);
} }
public function update($id, $stationuuid, $name, $favicon, $urlresolved, $userId) { public function update($id, $stationuuid, $name, $favicon, $urlresolved,
$bitrate, $country, $language, $homepage, $codec, $tags, $userId) {
try { try {
$station = $this->mapper->find($id, $userId); $station = $this->mapper->find($id, $userId);
$station->setStationuuid($stationuuid); $station->setStationuuid($stationuuid);
$station->setName($name); $station->setName($name);
$station->setFavicon($favicon); $station->setFavicon($favicon);
$station->setUrlresolved($urlresolved); $station->setUrlresolved($urlresolved);
$station->setBitrate($bitrate);
$station->setCountry($country);
$station->setLanguage($language);
$station->setHomepage($homepage);
$station->setCodec($codec);
$station->setTags($tags);
return $this->mapper->update($station); return $this->mapper->update($station);
} catch (Exception $e) { } catch (Exception $e) {
$this->handleException($e); $this->handleException($e);

View File

@ -55,7 +55,7 @@ export default {
targetUrl: generateUrl('/apps/radio/#/favorites'), targetUrl: generateUrl('/apps/radio/#/favorites'),
avatarUrl: n.favicon, avatarUrl: n.favicon,
mainText: n.name, mainText: n.name,
subText: n.tags, subText: n.tags.replaceAll(',', ', '),
} }
}) })
}, },

View File

@ -61,7 +61,7 @@ export default {
blurHashes: require('../assets/blurHashes.json'), blurHashes: require('../assets/blurHashes.json'),
favorites: [], favorites: [],
showSidebar: false, showSidebar: false,
sidebarStation: [], sidebarStation: {},
}), }),
computed: { computed: {
player() { player() {
@ -161,10 +161,16 @@ export default {
} }
const stationMap = { const stationMap = {
id: -1, id: -1,
name: station.name, name: station.name.toString(),
urlresolved: stationSrc, urlresolved: stationSrc.toString(),
favicon: station.favicon, favicon: station.favicon.toString(),
stationuuid: station.stationuuid, stationuuid: station.stationuuid.toString(),
bitrate: station.bitrate.toString(),
country: station.country.toString(),
language: station.language.toString(),
homepage: station.homepage.toString(),
codec: station.codec.toString(),
tags: station.tags.toString(),
} }
await axios await axios
.post(generateUrl('/apps/radio/api/favorites'), stationMap) .post(generateUrl('/apps/radio/api/favorites'), stationMap)
@ -246,10 +252,16 @@ export default {
} }
const stationMap = { const stationMap = {
id: -1, id: -1,
name: station.name, name: station.name.toString(),
urlresolved: stationSrc, urlresolved: stationSrc.toString(),
favicon: station.favicon, favicon: station.favicon.toString(),
stationuuid: station.stationuuid, stationuuid: station.stationuuid.toString(),
bitrate: station.bitrate.toString(),
country: station.country.toString(),
language: station.language.toString(),
homepage: station.homepage.toString(),
codec: station.codec.toString(),
tags: station.tags.toString(),
} }
await axios await axios
.post(generateUrl('/apps/radio/api/recent'), stationMap) .post(generateUrl('/apps/radio/api/recent'), stationMap)
@ -390,27 +402,10 @@ export default {
<style> <style>
/* Make breadcrumbs sticky and intransparent.
Move them to the right and show navigation
toggle on smaller screens */
.breadcrumbs {
background-color: var(--color-main-background-translucent);
z-index: 60;
position: sticky;
position: -webkit-sticky;
top: 50px;
padding-bottom: 5px;
margin-left: 35px;
}
@media only screen and (min-width: 1024px) { @media only screen and (min-width: 1024px) {
.app-navigation-toggle { .app-navigation-toggle {
display: none; display: none;
} }
.breadcrumbs {
margin-left: 0px;
}
} }
</style> </style>

View File

@ -79,8 +79,10 @@ export default {
default() { return false }, default() { return false },
}, },
sidebarStation: { sidebarStation: {
type: Array, type: Object,
default() { return [] }, default() {
return {}
},
}, },
}, },
computed: { computed: {
@ -103,6 +105,7 @@ export default {
this.$emit('toggleSidebar') this.$emit('toggleSidebar')
}, },
copyLink() { copyLink() {
console.log(this.sidebarStation.favicon)
this.$copyText(this.urlResolved).then( this.$copyText(this.urlResolved).then(
function() { function() {
showSuccess(t('radio', 'Link copied to clipboard')) showSuccess(t('radio', 'Link copied to clipboard'))