mirror of
https://github.com/VDR4Arch/vdr.git
synced 2023-10-10 13:36:52 +02:00
Fixed moving channels between number groups in SVDRP's MOVC command and the Channels menu, in case a channel is moved to a higher number and into a numbered group
This commit is contained in:
parent
f63a066b98
commit
6e0f5287ea
@ -2918,6 +2918,7 @@ Manuel Reimer <Manuel.Reimer@gmx.de>
|
|||||||
order to avoid discontinuities
|
order to avoid discontinuities
|
||||||
for setting the environment variables HOME, USER, LOGNAME and SHELL accordingly
|
for setting the environment variables HOME, USER, LOGNAME and SHELL accordingly
|
||||||
when switching to a less privileged user id
|
when switching to a less privileged user id
|
||||||
|
for reporting a bug in moving channels between number groups in SVDRP's MOVC command
|
||||||
|
|
||||||
Rene van den Braken <rene@vandenbraken.name>
|
Rene van den Braken <rene@vandenbraken.name>
|
||||||
for reporting a bug in writing the PCR pid into the PMT in
|
for reporting a bug in writing the PCR pid into the PMT in
|
||||||
|
6
HISTORY
6
HISTORY
@ -9419,3 +9419,9 @@ Video Disk Recorder Revision History
|
|||||||
the call is now automatically forwarded to QueueMessage().
|
the call is now automatically forwarded to QueueMessage().
|
||||||
- Fixed handling the S2SatelliteDeliverySystemDescriptor for transponders broadcasting
|
- Fixed handling the S2SatelliteDeliverySystemDescriptor for transponders broadcasting
|
||||||
in "backwards compatibility mode" according to ETSI EN 300 468 (thanks to Onur Sentürk).
|
in "backwards compatibility mode" according to ETSI EN 300 468 (thanks to Onur Sentürk).
|
||||||
|
|
||||||
|
2020-04-11:
|
||||||
|
|
||||||
|
- Fixed moving channels between number groups in SVDRP's MOVC command and the Channels
|
||||||
|
menu, in case a channel is moved to a higher number and into a numbered group
|
||||||
|
(reported by Manuel Reimer).
|
||||||
|
21
channels.c
21
channels.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: channels.c 4.5 2017/06/10 15:08:56 kls Exp $
|
* $Id: channels.c 4.6 2020/04/11 09:22:05 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "channels.h"
|
#include "channels.h"
|
||||||
@ -946,6 +946,25 @@ void cChannels::ReNumber(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool cChannels::MoveNeedsDecrement(cChannel *From, cChannel *To)
|
||||||
|
{
|
||||||
|
int Number = From->Number();
|
||||||
|
if (Number < To->Number()) {
|
||||||
|
for (cChannel *Channel = Next(From); Channel; Channel = Next(Channel)) {
|
||||||
|
if (Channel == To)
|
||||||
|
break;
|
||||||
|
if (Channel->GroupSep()) {
|
||||||
|
if (Channel->Number() > Number)
|
||||||
|
Number = Channel->Number();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
Number++;
|
||||||
|
}
|
||||||
|
return Number == To->Number();
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
void cChannels::Del(cChannel *Channel)
|
void cChannels::Del(cChannel *Channel)
|
||||||
{
|
{
|
||||||
UnhashChannel(Channel);
|
UnhashChannel(Channel);
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: channels.h 4.3 2017/06/10 15:06:40 kls Exp $
|
* $Id: channels.h 4.4 2020/04/11 09:22:05 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __CHANNELS_H
|
#ifndef __CHANNELS_H
|
||||||
@ -230,6 +230,7 @@ public:
|
|||||||
int GetNextNormal(int Idx) const; ///< Get next normal channel (not group)
|
int GetNextNormal(int Idx) const; ///< Get next normal channel (not group)
|
||||||
int GetPrevNormal(int Idx) const; ///< Get previous normal channel (not group)
|
int GetPrevNormal(int Idx) const; ///< Get previous normal channel (not group)
|
||||||
void ReNumber(void); ///< Recalculate 'number' based on channel type
|
void ReNumber(void); ///< Recalculate 'number' based on channel type
|
||||||
|
bool MoveNeedsDecrement(cChannel *From, cChannel *To); // Detect special case when moving a channel (closely related to Renumber())
|
||||||
void Del(cChannel *Channel); ///< Delete the given Channel from the list
|
void Del(cChannel *Channel); ///< Delete the given Channel from the list
|
||||||
const cChannel *GetByNumber(int Number, int SkipGap = 0) const;
|
const cChannel *GetByNumber(int Number, int SkipGap = 0) const;
|
||||||
cChannel *GetByNumber(int Number, int SkipGap = 0) { return const_cast<cChannel *>(static_cast<const cChannels *>(this)->GetByNumber(Number, SkipGap)); }
|
cChannel *GetByNumber(int Number, int SkipGap = 0) { return const_cast<cChannel *>(static_cast<const cChannels *>(this)->GetByNumber(Number, SkipGap)); }
|
||||||
|
9
menu.c
9
menu.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: menu.c 4.80 2019/05/28 15:24:43 kls Exp $
|
* $Id: menu.c 4.81 2020/04/11 09:22:05 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "menu.h"
|
#include "menu.h"
|
||||||
@ -516,7 +516,6 @@ eOSState cMenuChannels::Delete(void)
|
|||||||
Channels->Del(Channel);
|
Channels->Del(Channel);
|
||||||
cOsdMenu::Del(Index);
|
cOsdMenu::Del(Index);
|
||||||
Propagate(Channels);
|
Propagate(Channels);
|
||||||
Channels->SetModifiedByUser();
|
|
||||||
isyslog("channel %d deleted", DeletedChannel);
|
isyslog("channel %d deleted", DeletedChannel);
|
||||||
Deleted = true;
|
Deleted = true;
|
||||||
if (CurrentChannel && CurrentChannel->Number() != CurrentChannelNr) {
|
if (CurrentChannel && CurrentChannel->Number() != CurrentChannelNr) {
|
||||||
@ -541,10 +540,14 @@ void cMenuChannels::Move(int From, int To)
|
|||||||
if (FromChannel && ToChannel) {
|
if (FromChannel && ToChannel) {
|
||||||
int FromNumber = FromChannel->Number();
|
int FromNumber = FromChannel->Number();
|
||||||
int ToNumber = ToChannel->Number();
|
int ToNumber = ToChannel->Number();
|
||||||
|
if (Channels->MoveNeedsDecrement(FromChannel, ToChannel)) {
|
||||||
|
ToChannel = Channels->Prev(ToChannel); // cListBase::Move() doesn't know about the channel list's numbered groups!
|
||||||
|
To--;
|
||||||
|
}
|
||||||
Channels->Move(FromChannel, ToChannel);
|
Channels->Move(FromChannel, ToChannel);
|
||||||
cOsdMenu::Move(From, To);
|
cOsdMenu::Move(From, To);
|
||||||
|
SetCurrent(Get(To));
|
||||||
Propagate(Channels);
|
Propagate(Channels);
|
||||||
Channels->SetModifiedByUser();
|
|
||||||
isyslog("channel %d moved to %d", FromNumber, ToNumber);
|
isyslog("channel %d moved to %d", FromNumber, ToNumber);
|
||||||
if (CurrentChannel && CurrentChannel->Number() != CurrentChannelNr) {
|
if (CurrentChannel && CurrentChannel->Number() != CurrentChannelNr) {
|
||||||
if (!cDevice::PrimaryDevice()->Replaying() || cDevice::PrimaryDevice()->Transferring())
|
if (!cDevice::PrimaryDevice()->Replaying() || cDevice::PrimaryDevice()->Transferring())
|
||||||
|
4
svdrp.c
4
svdrp.c
@ -10,7 +10,7 @@
|
|||||||
* and interact with the Video Disk Recorder - or write a full featured
|
* and interact with the Video Disk Recorder - or write a full featured
|
||||||
* graphical interface that sits on top of an SVDRP connection.
|
* graphical interface that sits on top of an SVDRP connection.
|
||||||
*
|
*
|
||||||
* $Id: svdrp.c 4.39 2019/05/06 15:11:15 kls Exp $
|
* $Id: svdrp.c 4.40 2020/04/11 09:22:05 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "svdrp.h"
|
#include "svdrp.h"
|
||||||
@ -2087,6 +2087,8 @@ void cSVDRPServer::CmdMOVC(const char *Option)
|
|||||||
int FromNumber = FromChannel->Number();
|
int FromNumber = FromChannel->Number();
|
||||||
int ToNumber = ToChannel->Number();
|
int ToNumber = ToChannel->Number();
|
||||||
if (FromNumber != ToNumber) {
|
if (FromNumber != ToNumber) {
|
||||||
|
if (Channels->MoveNeedsDecrement(FromChannel, ToChannel))
|
||||||
|
ToChannel = Channels->Prev(ToChannel); // cListBase::Move() doesn't know about the channel list's numbered groups!
|
||||||
Channels->Move(FromChannel, ToChannel);
|
Channels->Move(FromChannel, ToChannel);
|
||||||
Channels->ReNumber();
|
Channels->ReNumber();
|
||||||
Channels->SetModifiedByUser();
|
Channels->SetModifiedByUser();
|
||||||
|
Loading…
Reference in New Issue
Block a user