forked from YIFYtorrents/PopcornTimeTV
-
Notifications
You must be signed in to change notification settings - Fork 0
/
install.swift
117 lines (94 loc) · 3.88 KB
/
install.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
#!/usr/bin/env xcrun swift
import Foundation
public extension NSURLSession {
/// Return data from synchronous URL request
public static func requestSynchronousData(request: NSURLRequest) -> NSData? {
var data: NSData? = nil
let semaphore: dispatch_semaphore_t = dispatch_semaphore_create(0)
let task = NSURLSession.sharedSession().dataTaskWithRequest(request, completionHandler: {
taskData, _, error -> () in
data = taskData
if data == nil, let error = error {print(error)}
dispatch_semaphore_signal(semaphore);
})
task.resume()
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER)
return data
}
/// Return data synchronous from specified endpoint
public static func requestSynchronousDataWithURLString(requestString: String) -> NSData? {
guard let url = NSURL(string:requestString) else {return nil}
let request = NSURLRequest(URL: url)
return NSURLSession.requestSynchronousData(request)
}
/// Return JSON synchronous from URL request
public static func requestSynchronousJSON(request: NSURLRequest) -> AnyObject? {
guard let data = NSURLSession.requestSynchronousData(request) else {return nil}
return try? NSJSONSerialization.JSONObjectWithData(data, options: [])
}
/// Return JSON synchronous from specified endpoint
public static func requestSynchronousJSONWithURLString(requestString: String) -> AnyObject? {
guard let url = NSURL(string: requestString) else {return nil}
let request = NSMutableURLRequest(URL:url)
request.HTTPMethod = "GET"
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
return NSURLSession.requestSynchronousJSON(request)
}
}
func run(args: String...) -> Int32 {
let task = NSTask()
task.launchPath = "/bin/bash"
task.arguments = args
task.launch()
task.waitUntilExit()
return task.terminationStatus
}
func input(input: String) -> String {
print(input)
let keyboard = NSFileHandle.fileHandleWithStandardInput()
let inputData = keyboard.availableData
let string = NSString(data: inputData, encoding:NSUTF8StringEncoding) as! String
return string.stringByReplacingOccurrencesOfString("\n", withString: "")
}
// Fetch the latest version
print("# Fetching the latest changes from github...")
run("-c", "git stash", "git fetch", "git rebase")
// Fetch the releases
print("\n# Fetching the latest verion info...")
var versions = [String]()
if let jsonData = NSURLSession.requestSynchronousJSONWithURLString("https://api.github.com/repos/PopcornTimeTV/PopcornTimeTV/releases") as? [[String : AnyObject]] {
for info in jsonData {
if let string = info["tag_name"] as? String {
versions.append(string)
}
}
for i in 0...4 {
print(versions[i])
}
}
// Ask the user what version
let version = input("Enter the version number: ")
// Make sure the tag exsists in versions
if version.lowercaseString != "master" {
if !versions.contains(version) {
print("You entered an incorrect version number. Please rerun this script and try again.")
exit(0)
}
}
// Checkout the tag
print("\n# Checking out tag \(version)...")
run("-c", "git checkout \(version)", "git pop")
// Check if cocoapods is installed
let podsInstalled = input("Do you have cocoapods installed? (Enter Yes or No): ").lowercaseString
if podsInstalled.rangeOfString("no") != nil {
print("Installing cocoapod gem...")
run("-c", "sudo gem install cocoapods")
}
// Install all of the pods
print("Updating and installing Cocoapods...")
run("-c", "pod install", "pod update")
// Open Xcode
print("Opening Xcode...")
run("-c", "open PopcornTime.xcworkspace")
// Thank you message
print("Thanks for installing PopcornTime. WHen a new update is released re-run this script and select the new version.")