[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [OpenVerse] Bug in user cancel of a room download



On Sat, 15 Jan 2000 09:14:18 -0500, Ed Lange <elange@mediasoft.net> wrote:
> To make moving forward and backward between rooms easier in this case,
> maybe a "Room History" pulldown would help.  Then you could browse
> through all your previously visited rooms by their title and/or
> server:port, and jump to them easily.  I'll take a stab at implementing
> this over the weekend.

I went and implemented this.  If any room history is available, a "History"
menu item appears under the Passageways menu.  Under this, is a list of the
servers you've recently visited.  It currently lists up to 10 servers, but
this is configurable in the variable MV(room_history.max).  It tries not to
add duplicates, by comparing host and port information to the existing
list.  This catches most duplicates, but it can fail in certain cases, such
as multiple hostnames pointing to the same host.  For example,
world.openverse.org and us.openverse.org are both the same.

The History menu also works with the Refresh List function, so you can see
if any of your recent servers are populated.  Your history is also stored
in history.txt, so it is available between sessions.  The format of this
file is the same as passageways.txt (roomname|host:port).

If my or your mailer mangles the patch file, I've made it available at
http://justice.loyola.edu/~elange/OpenVerse/history.patch

To apply this patch, save it to file /tmp/nopush.patch and
cd /usr/lib
patch -p0 < /tmp/nopush.patch

*** org/OpenVerse/lib/Globals.tcl	Sat Jan 15 17:26:03 2000
--- OpenVerse/lib/Globals.tcl	Sat Jan 15 16:10:51 2000
***************
*** 147,150 ****
--- 147,156 ----
  set MV(panel) "Fun"
  
+ # ------------------------------------
+ # Initialize Room History
+ # ------------------------------------
+ set MV(room_history.file) "$MV(homedir)/history.txt"
+ set MV(room_history.max) 10
+ set MV(room_history.0.host) ""
  
  # ------------------------------------------------------------------------
*** org/OpenVerse/lib/Passage.tcl	Sun Jan  9 14:11:11 2000
--- OpenVerse/lib/Passage.tcl	Sat Jan 15 16:23:10 2000
***************
*** 48,55 ****
  		-command "QueryServers 1"
  
  	if [file exists "$MV(bookmarks)"] {
! 		set MV(pwq.queries) {}
  		set infile [open "$MV(bookmarks)" r]
! 		set server 0
  		while {[eof $infile] != 1} {
  			gets $infile input
--- 48,87 ----
  		-command "QueryServers 1"
  
+ 	set MV(pwq.queries) {}
+ 	set server 0
+ 
+ 	# read in the history if it hasn't been done yet
+ 	if { $MV(room_history.0.host) == "" } {
+ 	    ReadHistory
+ 	} 
+ 
+ 	if {$MV(room_history.0.host) != ""} {
+ 	    $MV(passageways_menu).m add cascade -menu \
+ 		    $MV(passageways_menu).m.h -label "History"
+ 	    if !$MV(use_windowmanager_colors) {
+ 		menu $MV(passageways_menu).m.h -bg $MV(colors.pw.bg) \
+ 			-fg $MV(colors.pw.fg) -activeforeground $MV(colors.pw.afg) \
+ 			-activebackground $MV(colors.pw.abg)
+ 	    } else {
+ 		menu $MV(passageways_menu).m.h
+ 	    }
+ 	    for {set c 0} {$c < $MV(room_history.max)} {incr c} {
+ 		if {$MV(room_history.$c.host) != ""} {
+ 		    set MV(pwq.queries) "$server"
+ 		    set MV(pwq.$server.name) "$MV(room_history.$c.name)"
+ 		    set MV(pwq.$server.host) "$MV(room_history.$c.host)"
+ 		    set MV(pwq.$server.port) "$MV(room_history.$c.port)"
+ 		    set MV(pwq.$server.menu) "$MV(passageways_menu).m.h"
+ 		    incr server
+ 		    $MV(passageways_menu).m.h add command -label "$MV(room_history.$c.name)" \
+ 			    -command "ConnectToRoom $MV(room_history.$c.host) $MV(room_history.$c.port)"
+ 		}
+ 	    }
+ 	}
+ 
  	if [file exists "$MV(bookmarks)"] {
! 		# set MV(pwq.queries) {}
  		set infile [open "$MV(bookmarks)" r]
! 		# set server 0
  		while {[eof $infile] != 1} {
  			gets $infile input
*** org/OpenVerse/lib/IOFuncs.tcl	Sat Jan 15 17:26:03 2000
--- OpenVerse/lib/IOFuncs.tcl	Sat Jan 15 16:56:53 2000
***************
*** 330,333 ****
--- 330,334 ----
  	set MV(roomport) $port
  	set MV(sock) [socket $MV(roomhost) $MV(roomport)]
+ 
  	fconfigure $MV(sock) -blocking 0
  	set args [fconfigure $MV(sock) -sockname]
***************
*** 505,508 ****
--- 506,512 ----
  			wm title . $rest
  			set MV(roomname) $rest
+ 
+ 		        # Now that we have the room's name, add to history
+ 		        AddToHistory $MV(roomhost) $MV(roomport) $MV(roomname)
  		}
  		"SUB" {
***************
*** 1359,1360 ****
--- 1363,1451 ----
  }
  
+ proc AddToHistory {host port name} {
+     global MV
+ 
+     # if the history entry 0 is null, we haven't read them in yet
+     if { $MV(room_history.0.host) == "" } {
+ 	ReadHistory
+     }
+ 
+     set found 0
+ 
+     # see if its already here
+     for {set c 0} {$c < $MV(room_history.max)} {incr c} {
+ 	if { $MV(room_history.$c.host) == $host && $MV(room_history.$c.port) == $port } {
+ 	    set found 1
+ 	    
+ 	    # already here in another slot; slide it up
+ 	    for {set c2 $c} {$c2 > 0} {incr c2 -1} {
+ 		set MV(room_history.$c2.name) $MV(room_history.[expr $c2 -1].name)
+ 		set MV(room_history.$c2.host) $MV(room_history.[expr $c2 -1].host)
+ 		set MV(room_history.$c2.port) $MV(room_history.[expr $c2 -1].port)
+ 	    }
+ 	}
+     }
+ 
+     if (!$found) {
+ 	# slide the rest down, discard the bottom
+ 	for {set c [expr $MV(room_history.max) -1]} {$c > 0} {incr c -1} {
+ 	    set MV(room_history.$c.name) $MV(room_history.[expr $c -1].name)
+ 	    set MV(room_history.$c.host) $MV(room_history.[expr $c -1].host)
+ 	    set MV(room_history.$c.port) $MV(room_history.[expr $c -1].port)
+ 	}
+     }
+ 
+     set MV(room_history.0.name) $name
+     set MV(room_history.0.host) $host
+     set MV(room_history.0.port) $port
+     DumpHistory
+     DoBookmarks
+ }
+ 
+ proc DumpHistory {} {
+     global MV
+ 
+     set outfile [open "$MV(room_history.file)" w]
+     
+     for {set c 0} {$c < $MV(room_history.max)} {incr c} {
+ 	DebugIt "room_history.$c: $MV(room_history.$c.host) $MV(room_history.$c.port) $MV(room_history.$c.name)"
+ 
+ 	if { $MV(room_history.$c.host) != "" } {
+ 	    puts $outfile "$MV(room_history.$c.name)|$MV(room_history.$c.host):$MV(room_history.$c.port)"
+ 	}
+     }
+ 
+     close $outfile
+ }
+ 
+ proc ReadHistory {} {
+     global MV
+ 
+     set cur 0
+ 
+     if [file exists "$MV(room_history.file)"] {
+ 	set infile [open "$MV(room_history.file)" r]
+ 	while {[eof $infile] != 1} {
+ 	    gets $infile input
+ 	    set bm [split $input "|"]
+ 	    set serv [split [lindex $bm 1] ":"]
+ 	    if {[string first "|" $input] != -1} {
+ 		if { $cur >= $MV(room_history.max) } {
+ 		    return
+ 		}
+ 
+ 		set MV(room_history.$cur.name) "[lindex $bm 0]"
+ 		set MV(room_history.$cur.host) "[lindex $serv 0]"
+ 		set MV(room_history.$cur.port) "[lindex $serv 1]"
+ 
+ 		incr cur
+ 	    }
+ 	}
+     }
+ 
+     for {} { $cur < $MV(room_history.max) } {incr cur} {
+ 	set MV(room_history.$cur.name) ""
+ 	set MV(room_history.$cur.host) ""
+ 	set MV(room_history.$cur.port) ""
+     }
+ }

----------------------------------------------------------
To unsubscribe to the OpenVerse mailing list send a message to
openverse-request with the following word in the BODY of the message.
UNSUBSCRIBE
If you need assistance from a human, email cruise@openverse.org
----------------------------------------------------------