/* ####################### */ /* ### Session Manager ### */ /* ####################### */ /* */ /* by FluxTorpedoe */ /* _______________________ */ /* version 1.02 - 2012-10-21 */ /* Use/Modify freely */ global $CONFIRMATION, $AUTODUALPANE; $CONFIRMATION = 1; // [1|0] Disable/Enable confirmation dialog for "Reset" and "Update" $AUTODUALPANE = 0; // [0|1] Disable/Enable automatic Dual Pane Mode when opening sessions /* Each session is composed of two tabsets. Each tabset has the name of its session, preceded by '§1§_' for pane 1 and '§2§_' for pane 2. (e.g. Session 'Work' uses tabsets '§1§_Work' and '§2§_Work') $sessions = List of all saved sessions. $session = Current/selected session. $oset1 = Original tabset of pane 1 (full stored name). $sset2 = Session tabset of pane 2 (stripped name without the '§#§_'). */ /* ################################################### */ global $CURSCRIPT; $CURSCRIPT = self(file); // List available and valid sessions $osessions = folderreport(dirsrel, r, ."\Panes", , , "|")."|"; status "Session Manager", , "progress"; set $sessions; set $d_SessAct; set $n_SessAct; set $n_SessAvail; foreach ($tsession, $osessions, "|") { if ($tsession Like "*§1§_*") { $tsession = replace($tsession, "§1§_", ""); if ($osessions != replace($osessions, "§2§_".$tsession."|", "")) { // If no session tabset is missing (i.e. has been manually deleted) $n_SessAvail++; $oset1 = gettoken(, -1, "\"); $oset2 = gettoken(, -1, "\"); $sset1 = replace($oset1, "§1§_", ""); $sset2 = replace($oset2, "§2§_", ""); $sset1 = ($sset1 != $oset1)? $sset1 : ""; $sset2 = ($sset2 != $oset2)? $sset2 : " "; $d_SessAct = (($sset1 == $sset2) && ($tsession == $sset1))? "|:favs|1" : ""; $n_SessAct = ($d_SessAct)? 1 : $n_SessAct; $sessions = $sessions."$tsession$d_SessAct"." global $SESSION; $SESSION = ""$tsession""; load(""$CURSCRIPT"", ""_Load"")"; } } } $menu_about = ($n_SessAct)? "&About Current Session|%winsysdir%\shell32.dll /155" : "&About Current Tabsets|:favs|1"; $d_del = ($n_SessAvail > 1)? "s" : ""; $d_conf = ($CONFIRMATION)? "..." : ""; $SMMenu = ""; // Create Main Menu if $n_SessAct { $SMMenu = $SMMenu."&Reset Session$d_conf|:tabsets"." load(""$CURSCRIPT"", ""_Reset"");"; $SMMenu = $SMMenu."&Update Session$d_conf|:tabsets"." load(""$CURSCRIPT"", ""_Update"");"; } else { // $SMMenu = $SMMenu."&Reset Tabsets$d_conf|:tabsets"." load(""$CURSCRIPT"", ""_Reset"");"; $SMMenu = $SMMenu."&Reset Session$d_conf"; $SMMenu = $SMMenu."&Update Session$d_conf"; } $SMMenu = $SMMenu."-"; $SMMenu = $SMMenu."&Save Session as...|%winsysdir%\shell32.dll /195"." load(""$CURSCRIPT"", ""_Save"");"; if $n_SessAct { $SMMenu = $SMMenu."Re&name Session...|%winsysdir%\shell32.dll /25"." load(""$CURSCRIPT"", ""_Rename"");"; } else { $SMMenu = $SMMenu."Re&name Session..."; } if $n_SessAvail { $SMMenu = $SMMenu."&Delete Session$d_del...|%winsysdir%\shell32.dll /132"." load(""$CURSCRIPT"", ""_Delete"");"; } else { $SMMenu = $SMMenu."&Delete Session$d_del..."; } $SMMenu = $SMMenu."-"; $SMMenu = $SMMenu."&Configuration >|%winsysdir%\shell32.dll /166"." load(""$CURSCRIPT"", ""_Options-Menu"");"; $SMMenu = $SMMenu."-"; if $sessions { $SMMenu = $SMMenu.$sessions; $SMMenu = $SMMenu."-"; } $SMMenu = $SMMenu."$menu_about"." load(""$CURSCRIPT"", ""_About"");"; load($SMMenu, , s); "_Load" global $SESSION, $AUTODUALPANE, $LAYON, $INFOPANEL; if ($SESSION != "") { $x=1; $y=1; $actpane=0; $oset1 = gettoken(, -1, "\"); $sset1 = replace($oset1, "§2§_", ""); $oset2 = gettoken(, -1, "\"); $sset2 = replace($oset2, "§1§_", ""); end (($oset1 == "§2§_$SESSION") && ($oset2 == "§1§_$SESSION")), "You're working with an inverted session. Please load another session before reloading session '$SESSION' . "; if (get("pane") == 1) { // Current active pane will be loaded last to remain active // Debug if tabset to load is already loaded in the wrong pane (e.g. '§2§_MySession' loaded in Pane1) if (($SESSION != $sset1) || ($oset1 == $sset1)) { $x=2; } elseif (($SESSION != $sset2) || ($oset2 == $sset2)) { $y=2; $actpane=1; } } else { if (($SESSION != $sset2) || ($oset2 == $sset2)) { $y=2; } elseif (($SESSION != $sset1) || ($oset1 == $sset1)) { $x=2; $actpane=1; } } // Check if session tabset is already loaded, to revert instead of load $osetx = gettoken(eval(), -1, "\"); $ssetx = replace($osetx, "§".$x."§_", ""); $actionx = (($SESSION != $ssetx) || ($osetx == $ssetx))? "load" : "revert"; if (get("#800") == 0) { // DEBUG - Activates Dual Pane, necessary for a proper tabset loading $dualpane = 0; #800; } tabset($actionx, "§$x§_$SESSION", $x); wait 10; $osety = gettoken(eval(), -1, "\"); $ssety = replace($osety, "§".$y."§_", ""); $actiony = (($SESSION != $ssety) || ($osety == $ssety))? "load" : "revert"; tabset($actiony, "§$y§_$SESSION", $y); wait 10; if ($actpane) {#802;} #1040; #1010; if (!$dualpane && !$AUTODUALPANE) {#800;} // DEBUG if ($actionx == "revert") && ($actionx == $actiony) { status("Session '$SESSION' reset successfully"); } else { status("Session '$SESSION' loaded successfully"); } } "_Reset" global $CONFIRMATION, $AUTODUALPANE; $oset1 = gettoken(, -1, "\"); $oset2 = gettoken(, -1, "\"); $sset1 = replace($oset1, "§1§_", ""); $sset2 = replace($oset2, "§2§_", ""); $sset1 = ($sset1 != $oset1)? $sset1 : ""; $sset2 = ($sset2 != $oset2)? $sset2 : " "; if ($sset1 != $sset2) { // If the two current tabsets aren't from a single session $state = "Tabsets"; $d = (regexreplace($oset1.$oset2, "§(1|2)§_", "") != $oset1.$oset2)? " valid" : ""; status , , stop; end !confirm("You're not using a$d session. Do you still want to revert your tabsets to their original state? "); status , , progress; $conf = 0; } else { $state = "Session"; } if ($conf && $CONFIRMATION) {end !confirm("Are you sure you want to reset session '$sset1' ? ");} if (get("#800") == 0) { $dualpane = 0; #800; } tabset("revert", , i); wait 10; tabset("revert", , i); wait 10; #1040; #1010; if !$dualpane && !$AUTODUALPANE {#800;} status("$state reset successfully"); "_Update" $oset1 = gettoken(, -1, "\"); $oset2 = gettoken(, -1, "\"); $sset1 = replace($oset1, "§1§_", ""); $sset2 = replace($oset2, "§2§_", ""); $sset1 = ($sset1 != $oset1)? $sset1 : ""; $sset2 = ($sset2 != $oset2)? $sset2 : " "; if ($sset1 == $sset2) { // If the two current tabsets are from a single session, and in their appropriate pane (i.e. §1§ in Pane1) global $NOINPUT, $CONFIRMATION; if (!$NOINPUT && $CONFIRMATION) {end !confirm("Are you sure you want to update session '$sset1' ? ");} tabset("save", , 1); wait 10; tabset("save", , 2); wait 10; #1040; #1010; status("Session '$sset1' updated successfully"); } else { status("No session to update", "883333", stop); $d = (regexreplace($oset1.$oset2, "§(1|2)§_", "") != $oset1.$oset2)? " valid" : ""; msg "You're not using a$d session. It wouldn't be wise to update the tabsets. Another window will open with the information about your current tabsets. "; sub "_About"; } "_Delete" $osessions = folderreport(dirsrel, r, ."\Panes", , , "|")."|"; // status , , stop; end ($osessions UnLike "*§1§_*"), "No session found to delete."; status , , progress; set $sessions; set $n_SessAvail; set $n_SessAvailDel; $oset1 = gettoken(, -1, "\"); $oset2 = gettoken(, -1, "\"); $sset1 = regexreplace($oset1, "§(1|2)§_", ""); $sset2 = regexreplace($oset2, "§(1|2)§_", ""); $sset1 = ($sset1 != $oset1)? $sset1 : ""; $sset2 = ($sset2 != $oset2)? $sset2 : ""; foreach ($tsession, $osessions, "|") { // List available and valid sessions if ($tsession Like "*§1§_*") { $tsession = replace($tsession, "§1§_", ""); if ($osessions != replace($osessions, "§2§_".$tsession."|", "")) { // If no session tabset is missing (i.e. has been manually deleted) $n_SessAvail++; if (($tsession != $sset1) && ($tsession != $sset2)) { // If no loaded tabset belongs to the session to delete global $INI; $n_SessAvailDel++; $LayExt = " ¦‡¦ "; $d_lay = (getkey("", "Layout ".$tsession, "$INI"))? $LayExt : ""; // Layout Detection $sessions = $sessions.$tsession$d_lay."|"; } } } } if (!$n_SessAvailDel) { // End if only sessions are in use if ($n_SessAvail == 1) { if ($sset1 == $sset2) { $d_NoDel = "Session '$sset1' is the only session. It's currently in use so it can't be deleted now. Load regular tabsets or save a new session first." } else { $d_NoDel = "Session '$sset1$sset2' is the only session. One of its tabsets is currently in use so it can't be deleted now. Load regular tabsets or save a new session first." } } elseif ($n_SessAvail == 2) { $d_NoDel = "Session '$sset1' andSession '$sset2' are the only sessions. Both have a tabset currently in use so none of them can be deleted now. Load regular tabsets or a single session first." } status("No session deleted", "883333", stop); msg "$d_NoDel "; end 1==1; } $d_SessAvail = ($n_SessAvailDel > 1)? "s" : ""; if ($sset1 && ($sset1 == $sset2)) { $d = " session: '$sset1' ."; $d2 = "the other following"; } elseif ($sset1 && $sset2) { $d = ": - one tabset from session '$sset1' , - one tabset from session '$sset2' ."; $d2 = "the other following"; } elseif (($sset1 && !$sset2) || (!$sset1 && $sset2)) { $d = ": - one tabset from session '$sset1$sset2' ."; $d2 = "the other following"; } else { $d = " tabsets."; $d2 = "all"; } $sessions = inputselect("You're currently using$dYou can delete $d2 session$d_SessAvail:", $sessions, , 2, "No session deleted", 350, , "Delete Sessions"); // $sessions = inputselect(, $sessions, , 2, "No session deleted", 350, , "Delete Sessions"); if $sessions && ($sessions != "No session deleted") { foreach ($session, $sessions, "|") { $i++; $sessionl = $session; $session = replace($session, $LayExt, ""); // Layout cleaning $sessionl = ($session != $sessionl)? $session : ""; delete 1, 0, "\Panes\§1§_$session|\Panes\§2§_$session"; if $sessionl { // Layout - Delete global $CURSCRIPT, $INI, $LSESSION; $LSESSION = $session; load "$CURSCRIPT", "_Layout-Delete"; } } wait 100; $d = ($i == 1)? " '$session' " : "s"; $i = ($i == 1)? "S" : "$i s"; status("$i"."ession$d deleted successfully"); } else { wait 50; status("No session deleted", "883333", stop); } "_Save" $session = input("Save & Use session", "Enter the name of the tabsets session to save. This session will be in use after you press OK. The name has to be a valid filename. ", , , "§CANCEL§"); if ($session && ($session != "§CANCEL§")) { $oset1 = gettoken(, -1, "\"); $oset2 = gettoken(, -1, "\"); $sset1 = replace($oset1, "§1§_", ""); $sset2 = replace($oset2, "§2§_", ""); $sset1 = ($sset1 != $oset1)? $sset1 : ""; $sset2 = ($sset2 != $oset2)? $sset2 : " "; if ($session == $sset1) || ($session == $sset2) { // If at least one loaded tabset belongs to the session to save if ($sset1 == $sset2) { if (confirm("You're currently using session '$session' . Are you sure you want to update it? ")) { global $NOINPUT; $NOINPUT = 1; sub "_Update"; } else { status("No session saved", "883333", stop); } } else { status( , , stop); msg "You're currently using one tabset of session '$session' . It wouldn't be safe to overwrite the whole session. Try saving under a different name. "; } } else { $sessions = folderreport(dirsrel, r, ."\Panes", , , "|")."|"; if (($sessions == replace($sessions, "§1§_".$session."|", "")) || ($sessions == replace($sessions, "§2§_".$session."|", ""))) { // If session doesn't exist (i.e. no tabset exists with same name as sesion) tabset("saveas", "§1§_$session", 1); wait 10; tabset("saveas", "§2§_$session", 2); status("Session '$session' saved successfully"); } else { msg "Session '$session' already exists. Choose another name. "; status("No session saved", "883333", stop); } } } else { wait 50; status("No session saved", "883333", stop); } "_Rename" $oset1 = gettoken(, -1, "\"); $oset2 = gettoken(, -1, "\"); $sset1 = replace($oset1, "§1§_", ""); $sset2 = replace($oset2, "§2§_", ""); $sset1 = ($sset1 != $oset1)? $sset1 : ""; $sset2 = ($sset2 != $oset2)? $sset2 : " "; if ($sset1 == $sset2) { // If a valid session is active $session = input("Rename session: '$sset1'", "Enter a new session name. The name has to be a valid filename. ", $sset1, , "§CANCEL§"); if ($session && ($session != "§CANCEL§")) { if ($session != $sset1) { // If new session name is different than current session name $sessions = folderreport(dirsrel, r, ."\Panes", , , "|"); if (($sessions UnLike "*§1§_".$session."*") && ($sessions UnLike "*§2§_".$session."*")) { // If session doesn't exist (i.e. no tabset exists with same name as sesion) $x=1; $y=1; if (get("pane") == 1) {$x=2;} else {$y=2;} tabset("rename", "§$x§_$session", $x); wait 10; tabset("rename", "§$y§_$session", $y); wait 10; #1040; #1010; status("Session '$sset1' successfully renamed to '$session'"); } else { msg "Session '$session' already exists. Choose another name. "; status("No session renamed", "883333", stop); } } else { msg "The current session is already named '$session' . "; status("No session renamed", "883333", stop); } } else { wait 50; status("No session renamed", "883333", stop); } } else { $d = (regexreplace($oset1.$oset2, "§(1|2)§_", "") != $oset1.$oset2)? " valid" : ""; msg "You're not using a$d session. Reload a session before trying to rename. "; status("No session renamed", "883333", stop); } "_Options-Menu" global $CURSCRIPT, $CONFIRMATION, $AUTODUALPANE; $o = ""; if $CONFIRMATION { $o = $o."Enable Confirmation &Dialog for Reset and Update||3"." global $OPCONF; $OPCONF = 1; load(""$CURSCRIPT"", ""_Options-Confirmation"");"; } else { $o = $o."Enable Confirmation &Dialog for Reset and Update"." global $OPCONF; $OPCONF = 0; load(""$CURSCRIPT"", ""_Options-Confirmation"");"; } if $AUTODUALPANE { $o = $o."Always Activate Dual &Pane on Session Load or Reset||3"." global $OPDUAL; $OPDUAL = 1; load(""$CURSCRIPT"", ""_Options-DualPane"");"; } else { $o = $o."Always Activate Dual &Pane on Session Load or Reset"." global $OPDUAL; $OPDUAL = 0; load(""$CURSCRIPT"", ""_Options-DualPane"");"; } $o = $o."-"; $o = $o."Session Manager v1.02 - &Homepage (Updates and Discussions)|%winsysdir%\shell32.dll /155"." goto ""http://www.xyplorer.com/xyfc/viewtopic.php?f=7&t=8691"";"; $o = $o."-"; $o = $o."&Cancel"." status;"; status; load($o, , s); "_Options-Confirmation" global $CURSCRIPT, $OPCONF; $conftext = "CONFIRMATION"; $SMfile = readfile ($CURSCRIPT); if $OPCONF { $SMfile = replace ($SMfile, "$conftext = 1", "$conftext = 0"); $cd = "disabled"; } else { $SMfile = replace ($SMfile, "$conftext = 0", "$conftext = 1"); $cd = "enabled"; } if (writefile($CURSCRIPT, $SMfile, o) == 3) { status "Confirmation dialog $cd successfully"; } else { msg " Couldn't access script file: $CURSCRIPT Confirmation setting unchanged. "; status("Confirmation setting unchanged", "883333", stop); } "_Options-DualPane" global $CURSCRIPT, $OPDUAL; $dualtext = "AUTODUALPANE"; $SMfile = readfile ($CURSCRIPT); if $OPDUAL { $SMfile = replace ($SMfile, "$dualtext = 1", "$dualtext = 0"); $cd = "disabled"; } else { $SMfile = replace ($SMfile, "$dualtext = 0", "$dualtext = 1"); $cd = "enabled"; } if (writefile($CURSCRIPT, $SMfile, o) == 3) { status "Force DualPane on Load $cd successfully"; } else { msg " Couldn't access script file: $CURSCRIPT Force DualPane setting unchanged. "; status("Force DualPane setting unchanged", "883333", stop); } "_About" $fset1 = regexreplace(gettoken(, -1, "\"), "§(1|2)§_", "§#§_"); $fset2 = regexreplace(gettoken(, -1, "\"), "§(1|2)§_", "§#§_"); $stat1 = (strpos($fset1, "§#§_") == -1)? 0 : 1; $stat2 = (strpos($fset2, "§#§_") == -1)? 0 : 1; $sset1 = replace($fset1, "§#§_", ""); $sset2 = replace($fset2, "§#§_", ""); if ($stat1+$stat2 == 2) { if ($sset1 == $sset2) { if (gettoken(, -1, "\") Like "*§1§_*") { $sessionstatus = "You're currently using session: $sset1 "; } else { $sessionstatus = "You're currently using session: $sset1 but you've inverted the tabsets. It would be wise to save it to another name. "; } } else { $sessionstatus = "You've mixed your sessions. Your first tabset is from session: $sset1 Your second tabset is from session: $sset2 "; } } elseif ($stat1+$stat2 == 1) { if ($stat1 == 0) { $sessionstatus = "You're not using a full session. Your first tabset is a standard tabset: $sset1 Your second tabset is from session: $sset2 "; } else { $sessionstatus = "You're not using a full session. Your first tabset is from session: $sset1 Your second tabset is a standard tabset: $sset2 "; } } else { $sessionstatus = "You're not using a session but two different tabsets. Your first tabset is: $sset1 Your second tabset is: $sset2 "; } // Check orphan tabsets previously belonging to sessions (e.g. '§1§_MySession' present but not '§2§_MySession') $osessions = folderreport(dirsrel, r, ."\Panes", , , "|")."|"; set $sessions; foreach ($tsession, $osessions, "|") { if ($tsession Like "*§1§_*") { $tsession = replace($tsession, "§1§_", ""); if ($osessions == replace($osessions, "§2§_".$tsession."|", "")) { $i++; $sessions = $sessions." §1§_".$tsession." "; } } elseif ($tsession Like "*§2§_*") { $tsession = replace($tsession, "§2§_", ""); if ($osessions == replace($osessions, "§1§_".$tsession."|", "")) { $i++; $sessions = $sessions." §2§_".$tsession." "; } } } if ($i > 0) { $i = ($i > 1)? "s are orphans" : " is an orphan"; if (confirm("$sessionstatus _________________________ The following tabset$i, and can no longer be used in a session. $sessionsDo you want to open the tabsets folder (in a new tab)? ")) { #340; #858; #523; #251; } } else { msg "$sessionstatus"; } status , , ready;