2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-02-26 10:34:52 +00:00

98_todoist: new command reorderTasks/widget reorder repaired

git-svn-id: https://svn.fhem.de/fhem/trunk@20965 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
marvin78 2020-01-13 20:41:13 +00:00
parent 30230329c0
commit 22a885b3ae
3 changed files with 135 additions and 2 deletions

View File

@ -1,5 +1,6 @@
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide. # Add changes at the top of the list. Keep it in ASCII, and 80-char wide.
# Do not insert empty lines here, update check depends on it. # Do not insert empty lines here, update check depends on it.
- change: 98_todoist: reorder tasks - widget reorder
- change: 73_NUKIBridge: 74_NUKIDevice use packages - change: 73_NUKIBridge: 74_NUKIDevice use packages
- change: 98_Heating_Control: move to contrib - change: 98_Heating_Control: move to contrib
- bugfix: 98_livetracking: DoTrigger after readingsEndUpdate, decimals - bugfix: 98_livetracking: DoTrigger after readingsEndUpdate, decimals

View File

@ -17,7 +17,7 @@ eval "use Date::Parse;1" or $missingModule .= "Date::Parse ";
####################### #######################
# Global variables # Global variables
my $version = "1.2.13"; my $version = "1.3.0";
my $srandUsed; my $srandUsed;
@ -250,6 +250,111 @@ sub todoist_ErrorReadings($;$$) {
} }
# reorderTasks
sub todoist_ReorderTasks ($$) {
my ($hash,$cmd) = @_;
my $name=$hash->{NAME};
Log3 $name,4, "$name: cmd: ".$cmd;
my $pwd="";
my $param;
my %commands=();
# some random string for UUID
my $uuid = todoist_genUUID();
# JSON String start- and endpoint
my $commandsStart="[{";
my $commandsEnd="}]";
my $tType;
my $argsStart = "{\"items\": [";
my $argsEnd = "]}";
my $args = "";
## if no token is needed and device is not disabled, check token and get list vom todoist
if (!$hash->{helper}{PWD_NEEDED} && !IsDisabled($name)) {
## get password
$pwd=todoist_GetPwd($hash);
if ($pwd) {
Log3 $name,5, "$name: hash: ".Dumper($hash);
# get Task - IDs in order
my $tids = $cmd;
my @taskIds = split(",",$tids);
$tType = "item_reorder";
my $i=0;
foreach my $taskId (@taskIds) {
$i++;
$args .= "," if ($i>1);
$args .= "{\"id\":".$taskId.",\"child_order\":".$i."}";
}
$args = $argsStart.$args.$argsEnd;
Log3 $name,5, "todoist ($name): Data sent to todoist API: ".$args;
my $dataArr=$commandsStart.'"type":"'.$tType.'","uuid":"'.$uuid.'","args":'.$args.$commandsEnd;
Log3 $name,4, "todoist ($name): Data Array sent to todoist API: ".$dataArr;
my $data= {
token => $pwd,
commands => $dataArr
};
Log3 $name,4, "todoist ($name): JSON sent to todoist API: ".Dumper($data);
my $method="POST";
$param = {
url => "https://api.todoist.com/sync/v8/sync",
data => $data,
method => $method,
wType => "reorder",
timeout => 7,
header => "Content-Type: application/x-www-form-urlencoded",
hash => $hash,
callback => \&todoist_HandleTaskCallback, ## call callback sub to work with the data we get
};
Log3 $name,5, "todoist ($name): Param: ".Dumper($param);
## non-blocking access to todoist API
InternalTimer(gettimeofday()+0.1, "HttpUtils_NonblockingGet", $param, 0);
}
else {
todoist_ErrorReadings($hash,"access token empty");
}
}
else {
if (!IsDisabled($name)) {
todoist_ErrorReadings($hash,"no access token set");
}
else {
todoist_ErrorReadings($hash,"device is disabled");
}
}
return undef;
}
# update Task # update Task
sub todoist_UpdateTask($$$) { sub todoist_UpdateTask($$$) {
my ($hash,$cmd, $type) = @_; my ($hash,$cmd, $type) = @_;
@ -1679,6 +1784,7 @@ sub todoist_Set ($@) {
push @sets, "getTasks:noArg"; push @sets, "getTasks:noArg";
push @sets, "cChildProjects:noArg"; push @sets, "cChildProjects:noArg";
push @sets, "getUsers:noArg"; push @sets, "getUsers:noArg";
push @sets, "reorderTasks";
} }
push @sets, "accessToken" if ($hash->{helper}{PWD_NEEDED}); push @sets, "accessToken" if ($hash->{helper}{PWD_NEEDED});
push @sets, "newAccessToken" if (!$hash->{helper}{PWD_NEEDED}); push @sets, "newAccessToken" if (!$hash->{helper}{PWD_NEEDED});
@ -1753,6 +1859,14 @@ sub todoist_Set ($@) {
} }
return "in order to complete a task, we need it's ID" if ($count==0); return "in order to complete a task, we need it's ID" if ($count==0);
} }
elsif ($cmd eq "reorderTasks") {
my $count=@args;
if ($count!=0) {
my $exp=$args[0];
todoist_ReorderTasks ($hash,$exp);
}
return "in order to delete a task, we need it's ID" if ($count==0);
}
elsif ($cmd eq "deleteTask") { elsif ($cmd eq "deleteTask") {
my $count=@args; my $count=@args;
if ($count!=0) { if ($count!=0) {
@ -2366,6 +2480,18 @@ sub todoist_genUUID() {
<li>1: show order number</li> <li>1: show order number</li>
</ul></li> </ul></li>
<br /> <br />
<li>showParent
<ul>
<li>0: don't show parent_id of the task</li>
<li>1: show parent_id (default)</li>
</ul></li>
<br />
<li>showSection
<ul>
<li>0: don't show section_id of the task</li>
<li>1: show section_id (default)</li>
</ul></li>
<br />
<li>showChecked <li>showChecked
<ul> <ul>
<li>0: don't show if a task is checked (for tasks with parent_id)</li> <li>0: don't show if a task is checked (for tasks with parent_id)</li>

View File

@ -53,15 +53,21 @@ if (typeof todoist_checkVar === 'undefined') {
function todoist_refreshTable(name,sortit) { function todoist_refreshTable(name,sortit) {
var i=1; var i=1;
var order = "";
$('#todoistTable_' + name).find('tr.todoist_data').each(function() { $('#todoistTable_' + name).find('tr.todoist_data').each(function() {
// order // order
var tid = $(this).attr("data-line-id"); var tid = $(this).attr("data-line-id");
$(this).removeClass("odd even"); $(this).removeClass("odd even");
if (i%2==0) $(this).addClass("even"); if (i%2==0) $(this).addClass("even");
else $(this).addClass("odd"); else $(this).addClass("odd");
if (typeof sortit != 'undefined') todoist_sendCommand('set ' + name + ' updateTask ID:'+ tid + ' order="' + i + '"');
if (typeof sortit != 'undefined') {
if (i>1) order = order + ",";
order = order + tid;
}
i++; i++;
}); });
if (order!="") todoist_sendCommand('set ' + name + ' reorderTasks '+ order);
if (i!=1) $('#todoistTable_' + name).find("tr.todoist_ph").hide(); if (i!=1) $('#todoistTable_' + name).find("tr.todoist_ph").hide();
if (i==1) $('#todoistTable_' + name).find("tr.todoist_ph").show(); if (i==1) $('#todoistTable_' + name).find("tr.todoist_ph").show();
refreshInput(name); refreshInput(name);