You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
338 lines
10 KiB
JavaScript
338 lines
10 KiB
JavaScript
/*
|
|
* Copyright 2016 Smith AR <audoban@openmailbox.org>
|
|
* Michail Vourlakos <mvourlakos@gmail.com>
|
|
*
|
|
* This file is part of Latte-Dock
|
|
*
|
|
* Latte-Dock is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License as
|
|
* published by the Free Software Foundation; either version 2 of
|
|
* the License, or (at your option) any later version.
|
|
*
|
|
* Latte-Dock is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
var currentActivity;
|
|
var launchersOnActivities;
|
|
//it is used as the first item in the stringList in order to check the list is ok
|
|
var indicator = 'multi';
|
|
var plasmoid;
|
|
|
|
function restoreLaunchers(){
|
|
///this is a stringlist of types activityId, number of launchers, launchers
|
|
if(plasmoid && plasmoid.configuration && currentActivity != "00000000-0000-0000-0000-000000000000"){
|
|
var values = plasmoid.configuration.launchers;
|
|
values = values.split(";");
|
|
var returnedStringList = [];
|
|
|
|
// console.log("----------------------- Restoring ---------------------");
|
|
// console.log("Full Restoration:"+values);
|
|
var type = values.splice(0,1);
|
|
|
|
// console.log("Pass 1 - " +type);
|
|
if (type == indicator){
|
|
// console.log("Pass 2");
|
|
while (values.length > 2){
|
|
// console.log("Pass 3 - "+values);
|
|
var actId = values[0];
|
|
var subLaunchers = values.splice(2,values[1]);
|
|
// console.log("To Be Restored launchers, "+actId+ ", "+subLaunchers.length+", "+subLaunchers);
|
|
|
|
var activityRecord = get(actId);
|
|
if(activityRecord){
|
|
// console.log("Activity item found...");
|
|
if(activityRecord.launchers)
|
|
activityRecord.launchers.splice(0,activityRecord.launchers.length);
|
|
|
|
activityRecord.launchers = subLaunchers;
|
|
}
|
|
else{
|
|
// console.log("Activity item is added...");
|
|
var res = {id:values[0], launchers:subLaunchers};
|
|
launchersOnActivities.push(res);
|
|
}
|
|
|
|
values.splice(0,2);
|
|
|
|
}
|
|
}
|
|
|
|
if (get('*'))
|
|
returnedStringList = returnedStringList.concat(get('*').launchers);
|
|
else{
|
|
var result = {id:'*', launchers:[]};
|
|
launchersOnActivities.push(result);
|
|
}
|
|
|
|
if (get(currentActivity))
|
|
returnedStringList = returnedStringList.concat(get(currentActivity).launchers);
|
|
|
|
// console.log("Restored Strings:"+returnedStringList);
|
|
|
|
return returnedStringList;
|
|
}
|
|
else
|
|
return [];
|
|
}
|
|
|
|
function saveLaunchers(){
|
|
// console.log("----------------------- Saving ---------------------");
|
|
|
|
var returnedStringList = [];
|
|
returnedStringList.push(indicator);
|
|
|
|
// console.log("Array Size:"+launchersOnActivities.length);
|
|
var size = launchersOnActivities.length;
|
|
for(var i=size-1; i>=0; --i){
|
|
var activitySaving = get(launchersOnActivities[i].id);
|
|
// console.log("Saving, "+activitySaving.id + " - "+activitySaving.launchers.length+" - "+activitySaving.launchers);
|
|
if(activitySaving.launchers.length>0){
|
|
/* console.log("------- "+activitySaving.id+" ----------");
|
|
for(var j=0; j<activitySaving.launchers.length; ++j){
|
|
console.log(activitySaving.launchers[j]);
|
|
}*/
|
|
|
|
returnedStringList = returnedStringList.concat(String(activitySaving.id));
|
|
returnedStringList = returnedStringList.concat(String(activitySaving.launchers.length));
|
|
// this creates segmentation faults in some cases!!!!
|
|
// returnedStringList = returnedStringList.concat(activitySaving.launchers);
|
|
|
|
//this fixes the segmentation fault of previous command....
|
|
for(var j=0; j<activitySaving.launchers.length; ++j){
|
|
returnedStringList.push(String(activitySaving.launchers[j]));
|
|
}
|
|
|
|
///check returnedStringList integrity
|
|
/* for(var j=0; j<returnedStringList.length; ++j){
|
|
console.log("--- "+j+". "+returnedStringList[j]);
|
|
}*/
|
|
}
|
|
}
|
|
|
|
/* console.log("I am out..... "+returnedStringList.length);
|
|
for(var i=0; i<returnedStringList.length; ++i){
|
|
console.log(i+". "+returnedStringList[i]);
|
|
}*/
|
|
|
|
// console.log("IMPORTANT SAVED LIST: "+returnedStringList);
|
|
|
|
plasmoid.configuration.launchers = returnedStringList.join(";");
|
|
}
|
|
|
|
function updateLaunchers(launcherList){
|
|
// console.log("----------------------- Updating ---------------------");
|
|
// console.log("---- Full Launchers ------");
|
|
/* for(var j=0; j<launcherList.length; ++j){
|
|
console.log(launcherList[j]);
|
|
} */
|
|
|
|
|
|
var tempList;
|
|
if(launcherList.length > 0){
|
|
tempList = launcherList.slice(0);
|
|
}
|
|
else{
|
|
tempList =[];
|
|
}
|
|
|
|
// console.log("IMPORTANT SENT LIST: "+tempList.length+" - "+launcherList.length+" - "+tempList);
|
|
//
|
|
// console.log("In memory Defaults:" + get('*').launchers);
|
|
// if(get(currentActivity))
|
|
// console.log("In memory Current: "+get(currentActivity).launchers.length+ ' - ' + get(currentActivity).launchers);
|
|
|
|
var currentList = get(currentActivity);
|
|
|
|
var resultedCurrent = [];
|
|
// console.log("-------------");
|
|
|
|
for(var i=tempList.length-1; i>=0; --i){
|
|
var index=-1;
|
|
if(currentList){
|
|
index = getIndex(String(tempList[i]), currentList.launchers);
|
|
}
|
|
|
|
if(index >=0 || isInSpecificActivity(tempList[i])){
|
|
var result = tempList.splice(i,1);
|
|
resultedCurrent.unshift(String(result));
|
|
}
|
|
}
|
|
|
|
// console.log("Resulted Current: "+resultedCurrent);
|
|
|
|
/* console.log("---- To Be Set List ------");
|
|
for(var j=0; j<resultedCurrent.length; ++j){
|
|
console.log(resultedCurrent[j]);
|
|
}*/
|
|
|
|
setActivityLaunchers(resultedCurrent, currentActivity);
|
|
setDefaultLaunchers(tempList);
|
|
|
|
saveLaunchers();
|
|
}
|
|
|
|
/////////////
|
|
function cleanupRecords(activities){
|
|
for(var i=0; i<launchersOnActivities.length; ++i){
|
|
if(launchersOnActivities[i].id != '*'){
|
|
var index = getIndex(launchersOnActivities[i].id, activities);
|
|
if(index < 0){
|
|
console.log("Orphaned Activity Settings removed:"+launchersOnActivities[i].id);
|
|
launchersOnActivities.splice(index,1);
|
|
}
|
|
}
|
|
}
|
|
saveLaunchers();
|
|
}
|
|
|
|
|
|
function getIndex(id, list){
|
|
if(list){
|
|
for(var i=0; i<list.length; ++i){
|
|
if(id == list[i])
|
|
return i;
|
|
}
|
|
}
|
|
|
|
return -1;
|
|
}
|
|
|
|
function get(actId){
|
|
for(var i=0; i<launchersOnActivities.length; ++i){
|
|
if(launchersOnActivities[i].id == actId)
|
|
return launchersOnActivities[i];
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
function isOnAllActivities(id){
|
|
var defaults = get('*').launchers;
|
|
var index = getIndex(String(id),defaults);
|
|
if (index>=0)
|
|
return true;
|
|
|
|
// console.log("Check exists:"+id+ " - "+ "pos:"+index+" ,,, "+ get('*').activities);
|
|
return false;
|
|
}
|
|
|
|
function isInSpecificActivity(id){
|
|
for(var i=0; i<launchersOnActivities.length; ++i){
|
|
var activity = launchersOnActivities[i];
|
|
if(activity.id != "*"){
|
|
var launchers = activity.launchers;
|
|
var index = getIndex(String(id),launchers)
|
|
if (index>=0)
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
|
|
function setDefaultLaunchers(launchersList){
|
|
// console.log("Set Default Launchers");
|
|
if(!get('*')){
|
|
var result = {id:'*', launchers:launchersList};
|
|
launchersOnActivities.push(result);
|
|
}
|
|
else{
|
|
if (get('*').launchers)
|
|
get('*').launchers.splice(0,get('*').launchers.length);
|
|
get('*').launchers=launchersList;
|
|
}
|
|
|
|
// console.log("Default:::: "+get('*').launchers);
|
|
}
|
|
|
|
function setActivityLaunchers(launchersList, actId){
|
|
// console.log("Set Activity Launchers");
|
|
var currentList = get(actId);
|
|
// console.log("-------------");
|
|
// console.log("ResultedForMemory: "+launchersList);
|
|
if(currentList){
|
|
if(currentList.launchers)
|
|
currentList.launchers.splice(0,currentList.launchers.length);
|
|
|
|
// console.log("list exists");
|
|
currentList.launchers=launchersList;
|
|
}
|
|
else{
|
|
// console.log("new list");
|
|
var res = {id:actId, launchers:launchersList};
|
|
launchersOnActivities.push(res);
|
|
}
|
|
|
|
/* console.log("New Memory List: "+get(actId).launchers);
|
|
for(var j=0; j<get(actId).launchers.length; ++j){
|
|
console.log(get(actId).launchers[j]);
|
|
} */
|
|
}
|
|
|
|
///from launcher to All Activities to the current only and vice versa
|
|
function toggleLauncherState(id){
|
|
if (isOnAllActivities(id)){
|
|
removeFromList(id,'*')
|
|
addToList(id, currentActivity);
|
|
}
|
|
else{
|
|
removeFromAllSimpleLists(id);
|
|
addToList(id, '*');
|
|
}
|
|
|
|
saveLaunchers();
|
|
}
|
|
|
|
function removeLauncher(id){
|
|
if(get(currentActivity))
|
|
removeFromList(id, currentActivity);
|
|
|
|
removeFromList(id, '*');
|
|
}
|
|
|
|
function removeFromAllSimpleLists(id){
|
|
for(var i=0; i<launchersOnActivities.length; ++i){
|
|
var activity = launchersOnActivities[i];
|
|
if(activity.id != "*"){
|
|
removeFromList(id, activity.id);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
function removeFromList(id, activityId){
|
|
var list = get(activityId);
|
|
if(list){
|
|
var activityList = list.launchers;
|
|
var index = getIndex(String(id),activityList);
|
|
|
|
if(index >= 0){
|
|
activityList.splice(index, 1);
|
|
}
|
|
}
|
|
}
|
|
|
|
function addToList(id, activityId){
|
|
var activity = get(activityId);
|
|
if(!activity){
|
|
var res = {id:activityId, launchers:[]};
|
|
res.launchers.push(id);
|
|
launchersOnActivities.push(res);
|
|
}
|
|
else{
|
|
var launcherList = activity.launchers;
|
|
var index = getIndex(id,launcherList);
|
|
if(index<0){
|
|
launcherList.push(id);
|
|
}
|
|
|
|
}
|
|
}
|