| 
									
										
										
										
											2015-03-16 11:27:38 +01:00
										 |  |  | package common | 
					
						
							| 
									
										
										
										
											2014-07-01 20:08:18 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							| 
									
										
										
										
											2015-03-22 13:46:21 +01:00
										 |  |  | 	"fmt" | 
					
						
							| 
									
										
										
										
											2014-07-26 11:24:44 +02:00
										 |  |  | 	"os" | 
					
						
							| 
									
										
										
										
											2014-07-01 20:08:18 +02:00
										 |  |  | 	"os/user" | 
					
						
							| 
									
										
										
										
											2015-03-22 13:44:17 +01:00
										 |  |  | 	"path/filepath" | 
					
						
							|  |  |  | 	"runtime" | 
					
						
							| 
									
										
										
										
											2014-07-01 20:08:18 +02:00
										 |  |  | 	"strings" | 
					
						
							| 
									
										
										
										
											2015-03-22 13:44:17 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	"github.com/kardianos/osext" | 
					
						
							| 
									
										
										
										
											2014-07-01 20:08:18 +02:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-22 13:46:21 +01:00
										 |  |  | // MakeName creates a node name that follows the ethereum convention | 
					
						
							|  |  |  | // for such names. It adds the operation system name and Go runtime version | 
					
						
							|  |  |  | // the name. | 
					
						
							|  |  |  | func MakeName(name, version string) string { | 
					
						
							|  |  |  | 	return fmt.Sprintf("%s/v%s/%s/%s", name, version, runtime.GOOS, runtime.Version()) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-01 20:08:18 +02:00
										 |  |  | func ExpandHomePath(p string) (path string) { | 
					
						
							|  |  |  | 	path = p | 
					
						
							| 
									
										
										
										
											2015-04-29 00:30:25 -05:00
										 |  |  | 	sep := fmt.Sprintf("%s", os.PathSeparator) | 
					
						
							| 
									
										
										
										
											2014-07-01 20:08:18 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	// Check in case of paths like "/something/~/something/" | 
					
						
							| 
									
										
										
										
											2015-04-29 00:30:25 -05:00
										 |  |  | 	if len(p) > 1 && p[:1+len(sep)] == "~"+sep { | 
					
						
							| 
									
										
										
										
											2014-07-01 20:08:18 +02:00
										 |  |  | 		usr, _ := user.Current() | 
					
						
							|  |  |  | 		dir := usr.HomeDir | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		path = strings.Replace(p, "~", dir, 1) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2014-07-26 11:24:44 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | func FileExist(filePath string) bool { | 
					
						
							|  |  |  | 	_, err := os.Stat(filePath) | 
					
						
							|  |  |  | 	if err != nil && os.IsNotExist(err) { | 
					
						
							|  |  |  | 		return false | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return true | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-04 14:20:16 +01:00
										 |  |  | func AbsolutePath(Datadir string, filename string) string { | 
					
						
							| 
									
										
										
										
											2015-05-12 14:24:11 +02:00
										 |  |  | 	if filepath.IsAbs(filename) { | 
					
						
							| 
									
										
										
										
											2015-01-04 14:20:16 +01:00
										 |  |  | 		return filename | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-05-12 14:24:11 +02:00
										 |  |  | 	return filepath.Join(Datadir, filename) | 
					
						
							| 
									
										
										
										
											2015-01-04 14:20:16 +01:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2015-03-22 13:44:17 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | func DefaultAssetPath() string { | 
					
						
							|  |  |  | 	var assetPath string | 
					
						
							|  |  |  | 	pwd, _ := os.Getwd() | 
					
						
							| 
									
										
										
										
											2015-05-12 14:24:11 +02:00
										 |  |  | 	srcdir := filepath.Join(os.Getenv("GOPATH"), "src", "github.com", "ethereum", "go-ethereum", "cmd", "mist") | 
					
						
							| 
									
										
										
										
											2015-03-22 13:44:17 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	// If the current working directory is the go-ethereum dir | 
					
						
							|  |  |  | 	// assume a debug build and use the source directory as | 
					
						
							|  |  |  | 	// asset directory. | 
					
						
							|  |  |  | 	if pwd == srcdir { | 
					
						
							| 
									
										
										
										
											2015-05-12 14:24:11 +02:00
										 |  |  | 		assetPath = filepath.Join(pwd, "assets") | 
					
						
							| 
									
										
										
										
											2015-03-22 13:44:17 +01:00
										 |  |  | 	} else { | 
					
						
							|  |  |  | 		switch runtime.GOOS { | 
					
						
							|  |  |  | 		case "darwin": | 
					
						
							|  |  |  | 			// Get Binary Directory | 
					
						
							|  |  |  | 			exedir, _ := osext.ExecutableFolder() | 
					
						
							| 
									
										
										
										
											2015-04-29 00:30:25 -05:00
										 |  |  | 			assetPath = filepath.Join(exedir, "..", "Resources") | 
					
						
							| 
									
										
										
										
											2015-03-22 13:44:17 +01:00
										 |  |  | 		case "linux": | 
					
						
							| 
									
										
										
										
											2015-05-12 14:24:11 +02:00
										 |  |  | 			assetPath = filepath.Join("usr", "share", "mist") | 
					
						
							| 
									
										
										
										
											2015-03-22 13:44:17 +01:00
										 |  |  | 		case "windows": | 
					
						
							| 
									
										
										
										
											2015-05-12 14:24:11 +02:00
										 |  |  | 			assetPath = filepath.Join(".", "assets") | 
					
						
							| 
									
										
										
										
											2015-03-22 13:44:17 +01:00
										 |  |  | 		default: | 
					
						
							|  |  |  | 			assetPath = "." | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// Check if the assetPath exists. If not, try the source directory | 
					
						
							|  |  |  | 	// This happens when binary is run from outside cmd/mist directory | 
					
						
							|  |  |  | 	if _, err := os.Stat(assetPath); os.IsNotExist(err) { | 
					
						
							| 
									
										
										
										
											2015-05-12 14:24:11 +02:00
										 |  |  | 		assetPath = filepath.Join(srcdir, "assets") | 
					
						
							| 
									
										
										
										
											2015-03-22 13:44:17 +01:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return assetPath | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func DefaultDataDir() string { | 
					
						
							|  |  |  | 	usr, _ := user.Current() | 
					
						
							|  |  |  | 	if runtime.GOOS == "darwin" { | 
					
						
							| 
									
										
										
										
											2015-05-12 14:24:11 +02:00
										 |  |  | 		return filepath.Join(usr.HomeDir, "Library", "Ethereum") | 
					
						
							| 
									
										
										
										
											2015-03-22 13:44:17 +01:00
										 |  |  | 	} else if runtime.GOOS == "windows" { | 
					
						
							| 
									
										
										
										
											2015-05-12 14:24:11 +02:00
										 |  |  | 		return filepath.Join(usr.HomeDir, "AppData", "Roaming", "Ethereum") | 
					
						
							| 
									
										
										
										
											2015-03-22 13:44:17 +01:00
										 |  |  | 	} else { | 
					
						
							| 
									
										
										
										
											2015-05-12 14:24:11 +02:00
										 |  |  | 		return filepath.Join(usr.HomeDir, ".ethereum") | 
					
						
							| 
									
										
										
										
											2015-03-22 13:44:17 +01:00
										 |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func IsWindows() bool { | 
					
						
							|  |  |  | 	return runtime.GOOS == "windows" | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func WindonizePath(path string) string { | 
					
						
							|  |  |  | 	if string(path[0]) == "/" && IsWindows() { | 
					
						
							|  |  |  | 		path = path[1:] | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return path | 
					
						
							|  |  |  | } |