diff --git a/client/shared.go b/client/shared.go deleted file mode 100644 index 16542cd..0000000 --- a/client/shared.go +++ /dev/null @@ -1,49 +0,0 @@ -package client - -import ( - "os" - "fmt" - "strings" - "errors" - "github.com/hashworks/xRELTerminalClient/api/types" - "github.com/hashworks/xRELTerminalClient/api" -) - -// 2006-01-02 15:04:05.999999999 -0700 MST -const xRELCommentTimeFormat = "02. Jan 2006, 03:04 pm" -const xRELReleaseTimeFormat = "02.01.2006 03:04 pm" - -func OK(err error, prefix string) { - if err != nil { - fmt.Println(prefix + err.Error()) - os.Exit(1) - } -} - -func findP2PCategoryID(categoryName string) (string, error) { - var categoryID string - var err error - - var categories []types.P2PCategory - categories, err = api.P2P_GetCategories() - if err == nil { - for i := 0; i < len(categories); i++ { - category := categories[i] - if category.SubCat != "" { - if strings.ToLower(category.SubCat) == strings.ToLower(categoryName) { - categoryID = category.Id - } - } else if strings.ToLower(category.MetaCat) == strings.ToLower(categoryName) { - categoryID = category.Id - } - if categoryID != "" { - break; - } - } - if categoryID == "" { - err = errors.New("Category not found. Please choose one of --categories --p2p.") - } - } - - return categoryID, err -} \ No newline at end of file diff --git a/client/user.go b/client/user.go deleted file mode 100644 index 64ef57e..0000000 --- a/client/user.go +++ /dev/null @@ -1,40 +0,0 @@ -package client - -import ( - "fmt" - "time" - "github.com/hashworks/xRELTerminalClient/oauth" - "github.com/hashworks/xRELTerminalClient/configHandler" - "github.com/hashworks/xRELTerminalClient/api" -) - -func Authenticate() { - authenticated := false - config, _ := configHandler.GetConfig("") - - if (config.OAuthAccessToken.Token != "" && config.OAuthAccessToken.Secret != "") { - data, err := api.User_GetAuthdUser() - if err == nil { - fmt.Println("You're already authenticated, " + data.Name + ".") - authenticated = true - } - } - if !authenticated { - accessToken, err := oauth.GetNewAuthorizeToken() - OK(err, "Failed to authenticate using oAuth: \n") - config.OAuthAccessToken = *accessToken - data, err := api.User_GetAuthdUser() - if err == nil { - fmt.Println("Authentication sucessfull, " + data.Name + ".") - } else { - fmt.Println("Authentication sucessfull, but we failed to test it:\n" + err.Error()) - } - } -} - -func CheckRateLimit() { - data, err := api.User_RateLimitStatus() - OK(err, "Failed to check rate limit:\n") - fmt.Printf("You have %d calls remaining, they will reset in %d seconds.", - data.RemainingCalls, data.GetResetTime().Unix() - time.Now().Unix()) -} diff --git a/configHandler/configHandler.go b/configHandler/configHandler.go deleted file mode 100644 index 80598ea..0000000 --- a/configHandler/configHandler.go +++ /dev/null @@ -1,75 +0,0 @@ -package configHandler - -import ( - "encoding/json" - "io/ioutil" - "os" - "os/user" - "github.com/mrjones/oauth" - "path/filepath" - "github.com/hashworks/xRELTerminalClient/api/types" -) - -type config struct { - ConfigFilePath string - OAuthAccessToken oauth.AccessToken - - // 24h caching http://www.xrel.to/wiki/6318/api-release-categories.html - LastCategoryRequest int64 - Categories []types.Category - - // 24h caching http://www.xrel.to/wiki/2996/api-release-filters.html - LastFilterRequest int64 - Filters []types.Filter - - // 24h caching http://www.xrel.to/wiki/3698/api-p2p-categories.html - LastP2PCategoryRequest int64 - P2PCategories []types.P2PCategory -} - -var instantiatedConfig *config; - -func GetConfig(configFilePath string) (*config, error) { - var err error - if (instantiatedConfig == nil) { - if (configFilePath == "") { - configFilePath = GetDefaultConfigPath(); - } - var configData []byte - configData, err = ioutil.ReadFile(configFilePath); - if err == nil { - err = json.Unmarshal(configData, &instantiatedConfig) - } else { - instantiatedConfig = &config{} - } - instantiatedConfig.ConfigFilePath = configFilePath - } - return instantiatedConfig, err; -} - -func (c config) WriteConfig() error { - err := os.MkdirAll(filepath.Dir(c.ConfigFilePath), 0700); - if err == nil { - var jsonString []byte - jsonString, err = json.Marshal(c) - if err == nil { - err = ioutil.WriteFile(c.ConfigFilePath, jsonString, 0700); - } - } - return err -} - -func GetDefaultConfigPath() string { - var defaultPath string - seperator := string(filepath.Separator) - - usr, err := user.Current() - if (err != nil) { - defaultPath = "." - } else { - defaultPath = usr.HomeDir + seperator + ".config" + seperator + "xrel" - } - defaultPath += seperator + "config.json" - - return defaultPath; -} \ No newline at end of file diff --git a/distribute.sh b/distribute.sh index e1b3d8b..c0bf879 100755 --- a/distribute.sh +++ b/distribute.sh @@ -41,8 +41,8 @@ if [ "$commit" != "" ]; then version="$version"-"$commit" fi -rm -Rf bin/ -mkdir -p bin/ 2>/dev/null +rm -Rf ./bin/ +mkdir ./bin/ 2>/dev/null for plat in "${platforms[@]}"; do echo Building "$plat" ... @@ -56,9 +56,10 @@ for plat in "${platforms[@]}"; do tmpFile="/tmp/xRELTerminalClient/bin/xREL.exe" fi - GOOS="${plat%-*}" GOARCH="${plat#*-}" go build \ - -ldflags '-X main.VERSION='"$version"' -X github.com/hashworks/xRELTerminalClient/oauth.CONSUMER_KEY='"$xREL_TERMINAL_CLIENT_CONSUMER_KEY"' -X github.com/hashworks/xRELTerminalClient/oauth.CONSUMER_SECRET='"$xREL_TERMINAL_CLIENT_CONSUMER_SECRET" \ - -o "$tmpFile" "$DIR"/xREL.go + GOOS="${plat%-*}" GOARCH="${plat#*-}" go build -ldflags '-X main.VERSION='"$version"' + -X main.OAUTH_CONSUMER_KEY='"$xREL_TERMINAL_CLIENT_CONSUMER_KEY"' + -X main.OAUTH_CONSUMER_SECRET='"$xREL_TERMINAL_CLIENT_CONSUMER_SECRET" \ + -o "$tmpFile" "$DIR"/src/*.go if [ "$?" != 0 ]; then echo Build failed! >&2 diff --git a/oauth/oauth.go b/oauth/oauth.go deleted file mode 100644 index 2c76775..0000000 --- a/oauth/oauth.go +++ /dev/null @@ -1,52 +0,0 @@ -package oauth - -import ( - "github.com/mrjones/oauth" - "fmt" - "net/http" -) - -// Set these with -ldflags "-X github.com/hashworks/xRELTerminalClient/oauth.CONSUMER_KEY=foo [...]" -var CONSUMER_KEY string -var CONSUMER_SECRET string - -var consumer *oauth.Consumer = nil - -func GetConsumer() *oauth.Consumer { - if consumer == nil { - consumer = oauth.NewConsumer( - CONSUMER_KEY, - CONSUMER_SECRET, - oauth.ServiceProvider{ - RequestTokenUrl: "http://api.xrel.to/api/oauth/temp_token", - AuthorizeTokenUrl: "http://api.xrel.to/api/oauth/authorize", - AccessTokenUrl: "http://api.xrel.to/api/oauth/access_token", - }) - consumer.Debug(false) - } - return consumer -} - -func GetNewAuthorizeToken() (*oauth.AccessToken, error) { - fmt.Println("Authenticating with xREL.to using oAuth...") - - requestToken, u, err := GetConsumer().GetRequestTokenAndUrl("oob") - if err != nil { - return &oauth.AccessToken{}, err - } - - fmt.Println("(1) Go to: " + u) - fmt.Println("(2) Grant access, you should get back a verification code.") - fmt.Print("(3) Enter that verification code here: ") - - verificationCode := "" - fmt.Scanln(&verificationCode) - - accessToken, err := consumer.AuthorizeToken(requestToken, verificationCode) - return accessToken, err -} - -func GetOAuthClient(accessToken oauth.AccessToken) (*http.Client, error) { - client, err := GetConsumer().MakeHttpClient(&accessToken) - return client, err; -} \ No newline at end of file diff --git a/client/browse.go b/src/browse.go similarity index 64% rename from client/browse.go rename to src/browse.go index e2fa3a6..0cfe3d7 100644 --- a/client/browse.go +++ b/src/browse.go @@ -1,4 +1,4 @@ -package client +package main import ( "fmt" @@ -6,14 +6,14 @@ import ( "sort" "os" "regexp" - "github.com/hashworks/xRELTerminalClient/api" + "./xREL" ) -func ShowCategories(isP2P bool) { +func showCategories(isP2P bool) { orderedCategories := map[string][]string{} if (isP2P) { - p2pCategories, err := api.P2P_GetCategories() - OK(err, "Failed to get p2p categories:\n") + p2pCategories, err := xREL.GetP2PCategories() + ok(err, "Failed to get p2p categories:\n") for i := 0; i < len(p2pCategories); i++ { metaCat := strings.ToUpper(p2pCategories[i].MetaCat) if p2pCategories[i].SubCat != "" { @@ -26,8 +26,8 @@ func ShowCategories(isP2P bool) { } fmt.Println("Available p2p categories:") } else { - categories, err := api.Release_GetCategories() - OK(err, "Failed to get scene categories:\n") + categories, err := xREL.GetReleaseCategories() + ok(err, "Failed to get scene categories:\n") for i := 0; i < len(categories); i++ { category := &categories[i] if category.ParentCat != "" && category.Name != "" { @@ -54,56 +54,56 @@ func ShowCategories(isP2P bool) { } } -func BrowseCategory(categoryName, extInfoType string, isP2P bool, perPage, page int) { +func browseCategory(categoryName, extInfoType string, isP2P bool, perPage, page int) { if (isP2P) { categoryID, err := findP2PCategoryID(categoryName) - OK(err, "Failed to get category id:\n") - data, err := api.P2P_GetReleases(perPage, page, categoryID, "", "") - OK(err, "Failed to browse p2p category:\n") + ok(err, "Failed to get category id:\n") + data, err := xREL.GetP2PReleases(perPage, page, categoryID, "", "") + ok(err, "Failed to browse p2p category:\n") printP2PReleases(data, true, false) } else { // Currently all categories are upper case. That might change? categoryName = strings.ToUpper(categoryName) - data, err := api.Release_BrowseCategory(categoryName, extInfoType, perPage, page) - OK(err, "Failed to browse scene category:\n") + data, err := xREL.BrowseReleaseCategory(categoryName, extInfoType, perPage, page) + ok(err, "Failed to browse scene category:\n") printSceneReleases(data, true, false) } } -func ShowFilters(isP2PFlag bool) { +func showFilters(isP2PFlag bool) { if (isP2PFlag) { fmt.Println("There are no P2P filters available."); os.Exit(1) } - filters, err := api.Release_GetFilters() - OK(err, "Failed to get filters:\n") + filters, err := xREL.GetReleaseFilters() + ok(err, "Failed to get filters:\n") fmt.Println("Available scene filters:\n") for i := 0; i < len(filters); i++ { fmt.Println(filters[i].Id + ": " + filters[i].Name) } } -func ShowLatest(filterFlag string, isP2PFlag bool, perPageFlag, pageFlag int) { +func showLatest(filterFlag string, isP2PFlag bool, perPageFlag, pageFlag int) { if (isP2PFlag) { - data, err := api.P2P_GetReleases(perPageFlag, pageFlag, "", "", "") - OK(err, "Failed to get latest p2p releases:\n") + data, err := xREL.GetP2PReleases(perPageFlag, pageFlag, "", "", "") + ok(err, "Failed to get latest p2p releases:\n") printP2PReleases(data, false, false) } else { - data, err := api.Release_GetLatest(perPageFlag, pageFlag, filterFlag, "") - OK(err, "Failed to get latest scene releases:\n") + data, err := xREL.GetLatestReleases(perPageFlag, pageFlag, filterFlag, "") + ok(err, "Failed to get latest scene releases:\n") printSceneReleases(data, false, false) } } -func BrowseArchive(browseArchiveFlag, filterFlag string, isP2PFlag bool, perPageFlag, pageFlag int) { +func browseArchive(browseArchiveFlag, filterFlag string, isP2PFlag bool, perPageFlag, pageFlag int) { if (isP2PFlag) { fmt.Println("Due to API limitations it is impossible to browse the P2P archive.") os.Exit(1) } else { matched, err := regexp.MatchString("^[0-9]{4}-[1-9]{2}$", browseArchiveFlag); if err == nil && matched { - data, err := api.Release_GetLatest(perPageFlag, pageFlag, filterFlag, browseArchiveFlag) - OK(err, "Failed to browse the scene archive:\n") + data, err := xREL.GetLatestReleases(perPageFlag, pageFlag, filterFlag, browseArchiveFlag) + ok(err, "Failed to browse the scene archive:\n") printSceneReleases(data, false, false) } else { fmt.Println("Please use the following format: --browseArchive=YYYY-MM") diff --git a/client/calendar.go b/src/calendar.go similarity index 79% rename from client/calendar.go rename to src/calendar.go index 07c6365..b270537 100644 --- a/client/calendar.go +++ b/src/calendar.go @@ -1,15 +1,15 @@ -package client +package main import ( "fmt" "strings" "os" - "github.com/hashworks/xRELTerminalClient/api" + "./xREL" ) -func ShowUpcomingTitles(showReleases, showP2P bool) { - titles, err := api.Calendar_GetUpcomingTitles() - OK(err, "Failed to get upcoming titles:\n") +func showUpcomingTitles(showReleases, showP2P bool) { + titles, err := xREL.GetUpcomingTitles() + ok(err, "Failed to get upcoming titles:\n") titleCount := len(titles) if titleCount == 0 { fmt.Println("No upcoming titles found.") diff --git a/xREL.go b/src/client.go similarity index 61% rename from xREL.go rename to src/client.go index 3f92903..c3361b7 100644 --- a/xREL.go +++ b/src/client.go @@ -4,16 +4,24 @@ import ( "flag" "fmt" "os" - "github.com/hashworks/xRELTerminalClient/configHandler" - "github.com/hashworks/xRELTerminalClient/client" + "strings" + "errors" + "./xREL" + "./xREL/types" ) -// Set this with -ldflags "-X main.VERSION=v1.2.3 [...]" -var VERSION = "unknown" +// 2006-01-02 15:04:05.999999999 -0700 MST +const xRELCommentTimeFormat = "02. Jan 2006, 03:04 pm" +const xRELReleaseTimeFormat = "02.01.2006 03:04 pm" + +// Set these three with -ldflags "-X main.VERSION=v1.2.3 [...]" +var VERSION = "unknown" +var OAUTH_CONSUMER_KEY string +var OAUTH_CONSUMER_SECRET string var versionFlag bool -var configFilePath string +var configFilePathFlag string var authenticateFlag bool var checkRateLimitFlag bool @@ -56,11 +64,11 @@ var listFavEntriesFlag bool func main() { flagSet := flag.NewFlagSet(os.Args[0], flag.ExitOnError) - flagSet.Usage = client.Usage + flagSet.Usage = Usage flagSet.BoolVar(&versionFlag, "version", false, "") - flagSet.StringVar(&configFilePath, "configFile", "", "") + flagSet.StringVar(&configFilePathFlag, "configFile", "", "") flagSet.BoolVar(&authenticateFlag, "authenticate", false, "") flagSet.BoolVar(&checkRateLimitFlag, "rateLimit", false, "") @@ -108,7 +116,9 @@ func main() { limitFlag = perPageFlag } - config, _ := configHandler.GetConfig(configFilePath) + _ = readConfig(configFilePathFlag) + + xREL.SetOAuthConsumerKeyAndSecret(OAUTH_CONSUMER_KEY, OAUTH_CONSUMER_SECRET) if versionFlag { fmt.Println("xREL Terminal Client") @@ -117,46 +127,80 @@ func main() { fmt.Println() fmt.Println("Published under the GNU General Public License v3.0.") } else if rmFavEntryFlag { - client.RemoveFavEntry() + removeFavEntry() } else if listFavEntriesFlag { - client.ShowFavEntries() + showFavEntries() } else if upcomingTitlesFlag { - client.ShowUpcomingTitles(releasesFlag, isP2PFlag) + showUpcomingTitles(releasesFlag, isP2PFlag) } else if releaseFlag != "" { if addCommentFlag != "" || rateVideoFlag != 0 || rateAudioFlag != 0 { if (rateVideoFlag != 0 && rateAudioFlag == 0) || (rateVideoFlag == 0 && rateAudioFlag != 0) { fmt.Println("You need to set either both or none of --rateVideo and --rateAudio.") os.Exit(2) } else { - client.AddComment(releaseFlag, isP2PFlag, addCommentFlag, rateVideoFlag, rateAudioFlag) + addComment(releaseFlag, isP2PFlag, addCommentFlag, rateVideoFlag, rateAudioFlag) } } else { - client.ShowRelease(releaseFlag, isP2PFlag) + showRelease(releaseFlag, isP2PFlag) } } else if searchReleaseFlag != "" { - client.SearchReleases(searchReleaseFlag, isP2PFlag, limitFlag) + searchReleases(searchReleaseFlag, isP2PFlag, limitFlag) } else if searchExtInfoFlag != "" { - client.SearchMedia(searchExtInfoFlag, extInfoTypeFlag, perPageFlag, pageFlag, limitFlag, isP2PFlag, infoFlag, releasesFlag, imagesFlag, videosFlag, addFavEntryFlag, rateFlag, browseArchiveFlag) + searchMedia(searchExtInfoFlag, extInfoTypeFlag, perPageFlag, pageFlag, limitFlag, isP2PFlag, infoFlag, releasesFlag, imagesFlag, videosFlag, addFavEntryFlag, rateFlag, browseArchiveFlag) } else if getCategoriesFlag { - client.ShowCategories(isP2PFlag) + showCategories(isP2PFlag) } else if getFiltersFlag { - client.ShowFilters(isP2PFlag) + showFilters(isP2PFlag) } else if latestFlag { - client.ShowLatest(filterFlag, isP2PFlag, perPageFlag, perPageFlag) + showLatest(filterFlag, isP2PFlag, perPageFlag, perPageFlag) } else if browseArchiveFlag != "" { - client.BrowseArchive(filterFlag, browseArchiveFlag, isP2PFlag, perPageFlag, pageFlag) + browseArchive(filterFlag, browseArchiveFlag, isP2PFlag, perPageFlag, pageFlag) } else if browseCategoryFlag != "" { - client.BrowseCategory(browseCategoryFlag, extInfoTypeFlag, isP2PFlag, perPageFlag, pageFlag) + browseCategory(browseCategoryFlag, extInfoTypeFlag, isP2PFlag, perPageFlag, pageFlag) } else if commentsFlag != "" { - client.ShowComments(commentsFlag, isP2PFlag, perPageFlag, pageFlag) + showComments(commentsFlag, isP2PFlag, perPageFlag, pageFlag) } else if checkRateLimitFlag { - client.CheckRateLimit() + checkRateLimit() } else if authenticateFlag { - client.Authenticate() + authenticate() } else { flagSet.Usage() } - err := config.WriteConfig() - client.OK(err, "\nFailed to write the configuration to file system:\n") + ok(writeConfig(), "\nFailed to write the configuration to file system:\n") +} + +func ok(err error, prefix string) { + if err != nil { + fmt.Println(prefix + err.Error()) + os.Exit(1) + } +} + +func findP2PCategoryID(categoryName string) (string, error) { + var categoryID string + var err error + + var categories []types.P2PCategory + categories, err = xREL.GetP2PCategories() + if err == nil { + for i := 0; i < len(categories); i++ { + category := categories[i] + if category.SubCat != "" { + if strings.ToLower(category.SubCat) == strings.ToLower(categoryName) { + categoryID = category.Id + } + } else if strings.ToLower(category.MetaCat) == strings.ToLower(categoryName) { + categoryID = category.Id + } + if categoryID != "" { + break; + } + } + if categoryID == "" { + err = errors.New("Category not found. Please choose one of --categories --p2p.") + } + } + + return categoryID, err } \ No newline at end of file diff --git a/src/config.go b/src/config.go new file mode 100644 index 0000000..6832782 --- /dev/null +++ b/src/config.go @@ -0,0 +1,56 @@ +package main + +import ( + "encoding/json" + "io/ioutil" + "os" + "os/user" + "path/filepath" + "./xREL" +) + +var configFilePath string; + +func readConfig(filePath string) error { + var configData []byte + var err error + + if (filePath == "") { + configFilePath = getDefaultConfigPath(); + } else { + configFilePath = filePath + } + configData, err = ioutil.ReadFile(configFilePath); + if err == nil { + err = json.Unmarshal(configData, &xREL.Config) + } + + return err +} + +func writeConfig() error { + err := os.MkdirAll(filepath.Dir(configFilePath), 0700); + if err == nil { + var jsonString []byte + jsonString, err = json.Marshal(xREL.Config) + if err == nil { + err = ioutil.WriteFile(configFilePath, jsonString, 0700); + } + } + return err +} + +func getDefaultConfigPath() string { + var defaultPath string + separator := string(filepath.Separator) + + usr, err := user.Current() + if (err != nil) { + defaultPath = "." + } else { + defaultPath = usr.HomeDir + separator + ".config" + separator + "xREL" + } + defaultPath += separator + "config.json" + + return defaultPath; +} \ No newline at end of file diff --git a/client/favs.go b/src/favs.go similarity index 81% rename from client/favs.go rename to src/favs.go index 458b0ba..3924e27 100644 --- a/client/favs.go +++ b/src/favs.go @@ -1,4 +1,4 @@ -package client +package main import ( "fmt" @@ -6,7 +6,7 @@ import ( "strconv" "strings" "errors" - "github.com/hashworks/xRELTerminalClient/api" + "./xREL" ) func selectFavList(selectPrefix string) (int, error) { @@ -17,7 +17,7 @@ func selectFavList(selectPrefix string) (int, error) { selectPrefix = "Please choose one: " } - favLists, err := api.Favs_GetLists() + favLists, err := xREL.GetFavsLists() if err == nil { favListCount := len(favLists) if favListCount == 0 { @@ -47,9 +47,9 @@ func selectFavList(selectPrefix string) (int, error) { func addEntryToFavList(extInfoId string) { id, err := selectFavList("Please choose the list you want to add an entry to: ") - OK(err, "Failed to get your favorites lists:\n") - result, err := api.Favs_ListAddEntry(strconv.Itoa(id), extInfoId) - OK(err, "Failed to add entry:\n") + ok(err, "Failed to get your favorites lists:\n") + result, err := xREL.AddFavsListEntry(strconv.Itoa(id), extInfoId) + ok(err, "Failed to add entry:\n") if result.Success == 1 { fmt.Println("Sucessfully added \"" + result.ExtInfo.Title + "\".") } else { @@ -57,11 +57,11 @@ func addEntryToFavList(extInfoId string) { } } -func RemoveFavEntry() { +func removeFavEntry() { id, err := selectFavList("Please choose the list you want to remove an entry from: ") - OK(err, "Failed to get your favorites lists:\n") - favListEntries, err := api.Favs_GetListEntries(strconv.Itoa(id), false) - OK(err, "Failed to get favorites list entries:\n") + ok(err, "Failed to get your favorites lists:\n") + favListEntries, err := xREL.GetFavsListEntries(strconv.Itoa(id), false) + ok(err, "Failed to get favorites list entries:\n") favListEntriesCount := len(favListEntries) if favListEntriesCount == 0 { fmt.Println("You have no favorites list entries on this list.") @@ -90,8 +90,8 @@ func RemoveFavEntry() { entryId = favListEntries[selection-1].Id } fmt.Println() - result, err := api.Favs_ListRemoveEntry(strconv.Itoa(id), entryId) - OK(err, "Failed to remove entry:\n") + result, err := xREL.RemoveFavsListEntry(strconv.Itoa(id), entryId) + ok(err, "Failed to remove entry:\n") if result.Success == 1 { fmt.Println("Sucessfully removed \"" + result.ExtInfo.Title + "\".") } else { @@ -100,11 +100,11 @@ func RemoveFavEntry() { } } -func ShowFavEntries() { +func showFavEntries() { id, err := selectFavList("") - OK(err, "Failed to get your favorites lists:\n") - favListEntries, err := api.Favs_GetListEntries(strconv.Itoa(id), true) - OK(err, "Failed to get favorites list entries:\n") + ok(err, "Failed to get your favorites lists:\n") + favListEntries, err := xREL.GetFavsListEntries(strconv.Itoa(id), true) + ok(err, "Failed to get favorites list entries:\n") favListEntriesCount := len(favListEntries) if favListEntriesCount == 0 { fmt.Println("You have no favorites list entries on this list.") diff --git a/client/output.go b/src/output.go similarity index 91% rename from client/output.go rename to src/output.go index 2356228..90a6a21 100644 --- a/client/output.go +++ b/src/output.go @@ -1,4 +1,4 @@ -package client +package main import ( "fmt" @@ -6,8 +6,8 @@ import ( "strings" "regexp" "html" - "github.com/hashworks/xRELTerminalClient/api" - "github.com/hashworks/xRELTerminalClient/api/types" + "./xREL" + "./xREL/types" ) // Note that this should only contain outputs that are used multiple times. @@ -132,8 +132,8 @@ func outputExtInfoData(id string, perPageFlag, pageFlag int, isP2PFlag, infoFlag multipleItems := false if infoFlag || (!releasesFlag && !imagesFlag && !videosFlag && rateFlag == 0) { - extInfo, err := api.ExtInfo_GetInfo(id) - OK(err, "Failed to get media information:\n") + extInfo, err := xREL.GetExtInfo(id) + ok(err, "Failed to get media information:\n") printExtendedExtInfo(extInfo) multipleItems = true } @@ -142,7 +142,7 @@ func outputExtInfoData(id string, perPageFlag, pageFlag int, isP2PFlag, infoFlag if (multipleItems) { fmt.Println() } - items, err := api.ExtInfo_GetMedia(id); + items, err := xREL.GetExtInfoMedia(id); itemCount := len(items) if err == nil && itemCount > 0 { if (imagesFlag) { @@ -171,8 +171,8 @@ func outputExtInfoData(id string, perPageFlag, pageFlag int, isP2PFlag, infoFlag if (multipleItems) { fmt.Println() } - extInfo, err := api.ExtInfo_Rate(id, rateFlag) - OK(err, "Failed to rate media:\n") + extInfo, err := xREL.RateExtInfo(id, rateFlag) + ok(err, "Failed to rate media:\n") if (infoFlag) { fmt.Print("R") } else { @@ -191,14 +191,14 @@ func outputExtInfoData(id string, perPageFlag, pageFlag int, isP2PFlag, infoFlag var err error if browseCategoryFlag != "" { categoryID, err = findP2PCategoryID(browseCategoryFlag) - OK(err, "Failed to get category id:\n") + ok(err, "Failed to get category id:\n") } - p2pReleases, err := api.P2P_GetReleases(perPageFlag, pageFlag, categoryID, "", id) - OK(err, "Failed to load p2p releases by media:\n") + p2pReleases, err := xREL.GetP2PReleases(perPageFlag, pageFlag, categoryID, "", id) + ok(err, "Failed to load p2p releases by media:\n") printP2PReleases(p2pReleases, false, true) } else { - releases, err := api.Release_ByExtInfo(id, perPageFlag, pageFlag) - OK(err, "Failed to load scene releases by media:\n") + releases, err := xREL.GetReleaseByExtInfoId(id, perPageFlag, pageFlag) + ok(err, "Failed to load scene releases by media:\n") printSceneReleases(releases, false, true) } } diff --git a/client/release.go b/src/release.go similarity index 71% rename from client/release.go rename to src/release.go index 21cfc9d..ff9b032 100644 --- a/client/release.go +++ b/src/release.go @@ -1,16 +1,16 @@ -package client +package main import ( "fmt" "os" - "github.com/hashworks/xRELTerminalClient/api/types" - "github.com/hashworks/xRELTerminalClient/api" + "./xREL/types" + "./xREL" ) -func ShowRelease(dirname string, isP2P bool) { +func showRelease(dirname string, isP2P bool) { if isP2P { - release, err := api.P2P_GetInfo(dirname, false) - OK(err, "Failed to get information about the p2p release:\n") + release, err := xREL.GetP2PReleaseInfo(dirname, false) + ok(err, "Failed to get information about the p2p release:\n") fmt.Println(release.Dirname) fmt.Println("Link: " + release.LinkHref) fmt.Println("Media: " + release.ExtInfo.LinkHref) @@ -33,8 +33,8 @@ func ShowRelease(dirname string, isP2P bool) { } fmt.Printf("Release has %d comments.\n", release.Comments) } else { - release, err := api.Release_GetInfo(dirname, false) - OK(err, "Failed to get information about the scene release:\n") + release, err := xREL.GetReleaseInfo(dirname, false) + ok(err, "Failed to get information about the scene release:\n") fmt.Println(release.Dirname) fmt.Println("Link: " + release.LinkHref) fmt.Println("Media: " + release.ExtInfo.LinkHref) @@ -61,46 +61,46 @@ func ShowRelease(dirname string, isP2P bool) { } } -func AddComment(dirname string, isP2P bool, addComment string, rateVideo, rateAudio int) { +func addComment(dirname string, isP2P bool, addComment string, rateVideo, rateAudio int) { if (rateVideo != 0 && rateAudio == 0) || (rateVideo == 0 && rateAudio != 0) { fmt.Println("You need to set either both or none of --rateVideo and --rateAudio.") os.Exit(1) } var id string if isP2P { - release, err := api.P2P_GetInfo(dirname, false) - OK(err, "Failed to get information about the p2p release:\n") + release, err := xREL.GetP2PReleaseInfo(dirname, false) + ok(err, "Failed to get information about the p2p release:\n") id = release.Id } else { - release, err := api.Release_GetInfo(dirname, false) - OK(err, "Failed to get information about the scene release:\n") + release, err := xREL.GetReleaseInfo(dirname, false) + ok(err, "Failed to get information about the scene release:\n") id = release.Id } - comment, err := api.Comments_Add(id, isP2P, addComment, rateVideo, rateAudio) - OK(err, "Failed to add comment:\n") + comment, err := xREL.AddComment(id, isP2P, addComment, rateVideo, rateAudio) + ok(err, "Failed to add comment:\n") fmt.Println("Sucessfully added comment:") printComment(comment) } -func ShowComments(query string, isP2P bool, perPage, page int) { +func showComments(query string, isP2P bool, perPage, page int) { var id string var err error if isP2P { var p2pRelease types.P2PRelease - p2pRelease, err = api.P2P_GetInfo(query, false) + p2pRelease, err = xREL.GetP2PReleaseInfo(query, false) if err == nil { id = p2pRelease.Id } } else { var release types.Release - release, err := api.Release_GetInfo(query, false) + release, err := xREL.GetReleaseInfo(query, false) if err == nil { id = release.Id } } - OK(err, "Failed to get release:\n") - data, err := api.Comments_Get(id, isP2P, perPage, page); - OK(err, "Failed to get comments:\n") + ok(err, "Failed to get release:\n") + data, err := xREL.GetComments(id, isP2P, perPage, page); + ok(err, "Failed to get comments:\n") commentCount := len(data.List) if (commentCount > 0) { pagination := data.Pagination diff --git a/client/search.go b/src/search.go similarity index 76% rename from client/search.go rename to src/search.go index 59105bc..b25760e 100644 --- a/client/search.go +++ b/src/search.go @@ -1,17 +1,17 @@ -package client +package main import ( "fmt" "strings" "os" - "github.com/hashworks/xRELTerminalClient/api/types" - "github.com/hashworks/xRELTerminalClient/api" + "./xREL/types" + "./xREL" ) -func SearchMedia(query, extInfoType string, perPage, page, limit int, isP2P, showInfo, showReleases, showImages, showVideos, addFavEntry bool, rateMedia int, category string) { +func searchMedia(query, extInfoType string, perPage, page, limit int, isP2P, showInfo, showReleases, showImages, showVideos, addFavEntry bool, rateMedia int, category string) { extInfoType = strings.ToLower(extInfoType) - results, err := api.Search_ExtInfo(query, extInfoType, limit) - OK(err, "Failed to search for media:\n") + results, err := xREL.SearchExtInfos(query, extInfoType, limit) + ok(err, "Failed to search for media:\n") if results.Total == 0 { fmt.Println("Nothing found.") os.Exit(1) @@ -50,15 +50,15 @@ func SearchMedia(query, extInfoType string, perPage, page, limit int, isP2P, sho } } -func SearchReleases(query string, isP2P bool, limit int) { +func searchReleases(query string, isP2P bool, limit int) { var results types.ReleaseSearchResult var err error if isP2P { - results, err = api.Search_Releases(query, false, true, limit) + results, err = xREL.SearchReleases(query, false, true, limit) } else { - results, err = api.Search_Releases(query, true, false, limit) + results, err = xREL.SearchReleases(query, true, false, limit) } - OK(err, "Failed to search for releases:\n") + ok(err, "Failed to search for releases:\n") if results.Total == 0 { fmt.Println("Nothing found.") os.Exit(1) diff --git a/client/usage.go b/src/usage.go similarity index 96% rename from client/usage.go rename to src/usage.go index 44107e1..9bd15f5 100644 --- a/client/usage.go +++ b/src/usage.go @@ -1,8 +1,7 @@ -package client +package main import ( "fmt" - "github.com/hashworks/xRELTerminalClient/configHandler" ) /** @@ -15,7 +14,7 @@ import ( func Usage() { fmt.Println("Global flags:") fmt.Println("") - fmt.Println("--configFile=\"" + configHandler.GetDefaultConfigPath() + "\"") + fmt.Println("--configFile=\"" + getDefaultConfigPath() + "\"") fmt.Println(" Sets the path to the config file to use.") fmt.Println(" Don't want a config file? Set it to /dev/null.") fmt.Println("") diff --git a/src/user.go b/src/user.go new file mode 100644 index 0000000..6c0c703 --- /dev/null +++ b/src/user.go @@ -0,0 +1,44 @@ +package main + +import ( + "fmt" + "time" + "./xREL" +) + +func authenticate() { + authenticated := false + + if (xREL.Config.OAuthAccessToken.Token != "" && xREL.Config.OAuthAccessToken.Secret != "") { + data, err := xREL.GetAuthdUser() + if err == nil { + fmt.Println("You're already authenticated, " + data.Name + ".") + authenticated = true + } + } + if !authenticated { + requestToken, url, err := xREL.GetOAuthRequestTokenAndUrl() + ok(err, "Failed to authenticate using oAuth:\n") + fmt.Println("(1) Go to: " + url) + fmt.Println("(2) Grant access, you should get back a verification code.") + fmt.Print("(3) Enter that verification code here: ") + verificationCode := "" + fmt.Scanln(&verificationCode) + accessToken, err := xREL.GetOAuthAccessToken(requestToken, verificationCode) + ok(err, "Failed to authenticate using oAuth:\n") + xREL.Config.OAuthAccessToken = *accessToken + data, err := xREL.GetAuthdUser() + if err == nil { + fmt.Println("Authentication sucessfull, " + data.Name + ".") + } else { + fmt.Println("Authentication sucessfull, but we failed to test it:\n" + err.Error()) + } + } +} + +func checkRateLimit() { + data, err := xREL.GetRateLimitStatus() + ok(err, "Failed to check rate limit:\n") + fmt.Printf("You have %d calls remaining, they will reset in %d seconds.", + data.RemainingCalls, data.GetResetTime().Unix() - time.Now().Unix()) +} diff --git a/api/calendar.go b/src/xREL/calendar.go similarity index 82% rename from api/calendar.go rename to src/xREL/calendar.go index e214ca8..5c70ff2 100644 --- a/api/calendar.go +++ b/src/xREL/calendar.go @@ -1,9 +1,9 @@ -package api +package xREL import ( "io/ioutil" "encoding/json" - "github.com/hashworks/xRELTerminalClient/api/types" + "./types" ) /** @@ -11,7 +11,7 @@ import ( http://www.xrel.to/wiki/1827/api-calendar-upcoming.html */ -func Calendar_GetUpcomingTitles() ([]types.UpcomingTitle, error) { +func GetUpcomingTitles() ([]types.UpcomingTitle, error) { var upcomingTitles []types.UpcomingTitle client := getClient() diff --git a/api/comments.go b/src/xREL/comments.go similarity index 92% rename from api/comments.go rename to src/xREL/comments.go index 61995d1..8e866a6 100644 --- a/api/comments.go +++ b/src/xREL/comments.go @@ -1,4 +1,4 @@ -package api +package xREL import ( "encoding/json" @@ -7,7 +7,7 @@ import ( "net/url" "strconv" "errors" - "github.com/hashworks/xRELTerminalClient/api/types" + "./types" ) /** @@ -19,7 +19,7 @@ import ( http://www.xrel.to/wiki/6313/api-comments-get.html */ -func Comments_Get(id string, isP2P bool, perPage int, page int) (types.Comments, error) { +func GetComments(id string, isP2P bool, perPage int, page int) (types.Comments, error) { var comments types.Comments parameters := make(map[string]string) @@ -68,7 +68,7 @@ func Comments_Get(id string, isP2P bool, perPage int, page int) (types.Comments, http://www.xrel.to/wiki/6312/api-comments-add.html */ -func Comments_Add(id string, isP2P bool, text string, videoRating, audioRating int) (types.Comment, error) { +func AddComment(id string, isP2P bool, text string, videoRating, audioRating int) (types.Comment, error) { var comment types.Comment var err error diff --git a/api/extInfo.go b/src/xREL/extInfo.go similarity index 90% rename from api/extInfo.go rename to src/xREL/extInfo.go index 04822c0..9c848a3 100644 --- a/api/extInfo.go +++ b/src/xREL/extInfo.go @@ -1,4 +1,4 @@ -package api +package xREL import ( "net/http" @@ -7,7 +7,7 @@ import ( "encoding/json" "errors" "strconv" - "github.com/hashworks/xRELTerminalClient/api/types" + "./types" ) /** @@ -15,7 +15,7 @@ import ( http://www.xrel.to/wiki/2725/api-ext-info-info.html */ -func ExtInfo_GetInfo(id string) (types.ExtendedExtInfo, error) { +func GetExtInfo(id string) (types.ExtendedExtInfo, error) { var extInfoStruct types.ExtendedExtInfo var err error @@ -47,7 +47,7 @@ func ExtInfo_GetInfo(id string) (types.ExtendedExtInfo, error) { http://www.xrel.to/wiki/6314/api-ext-info-media.html */ -func ExtInfo_GetMedia(id string) ([]types.ExtInfoMediaItem, error) { +func GetExtInfoMedia(id string) ([]types.ExtInfoMediaItem, error) { var extInfoMediaItemsStruct []types.ExtInfoMediaItem var err error @@ -83,7 +83,7 @@ func ExtInfo_GetMedia(id string) ([]types.ExtInfoMediaItem, error) { http://www.xrel.to/wiki/6315/api-ext-info-rate.html */ -func ExtInfo_Rate(id string, rating int) (types.ExtendedExtInfo, error) { +func RateExtInfo(id string, rating int) (types.ExtendedExtInfo, error) { var extInfoStruct types.ExtendedExtInfo var err error diff --git a/api/favs.go b/src/xREL/favs.go similarity index 92% rename from api/favs.go rename to src/xREL/favs.go index 7cadad3..a3a1120 100644 --- a/api/favs.go +++ b/src/xREL/favs.go @@ -1,4 +1,4 @@ -package api +package xREL import ( "net/http" @@ -6,7 +6,7 @@ import ( "io/ioutil" "encoding/json" "errors" - "github.com/hashworks/xRELTerminalClient/api/types" + "./types" ) /** @@ -15,7 +15,7 @@ import ( http://www.xrel.to/wiki/1754/api-favs-lists.html */ -func Favs_GetLists() ([]types.FavList, error) { +func GetFavsLists() ([]types.FavList, error) { var favLists []types.FavList var err error @@ -50,7 +50,7 @@ func Favs_GetLists() ([]types.FavList, error) { http://www.xrel.to/wiki/1823/api-favs-list-entries.html */ -func Favs_GetListEntries(id string, getReleases bool) ([]types.ExtendedExtInfo, error) { +func GetFavsListEntries(id string, getReleases bool) ([]types.ExtendedExtInfo, error) { var extendedExtInfos []types.ExtendedExtInfo var err error @@ -94,7 +94,7 @@ func Favs_GetListEntries(id string, getReleases bool) ([]types.ExtendedExtInfo, http://www.xrel.to/wiki/6316/api-favs-list-addentry.html */ -func Favs_ListAddEntry(id, extInfoId string) (types.FavListEntryModificationResult, error) { +func AddFavsListEntry(id, extInfoId string) (types.FavListEntryModificationResult, error) { var favListAddEntryResult types.FavListEntryModificationResult var err error @@ -145,7 +145,7 @@ func Favs_ListAddEntry(id, extInfoId string) (types.FavListEntryModificationResu http://www.xrel.to/wiki/6317/api-favs-list-delentry.html */ -func Favs_ListRemoveEntry(id, extInfoId string) (types.FavListEntryModificationResult, error) { +func RemoveFavsListEntry(id, extInfoId string) (types.FavListEntryModificationResult, error) { var favListRemoveEntryResult types.FavListEntryModificationResult var err error diff --git a/src/xREL/oauth.go b/src/xREL/oauth.go new file mode 100644 index 0000000..0fc55a9 --- /dev/null +++ b/src/xREL/oauth.go @@ -0,0 +1,43 @@ +package xREL + +import ( + "github.com/mrjones/oauth" + "net/http" +) + +var consumerKey string +var consumerSecret string + +var consumer *oauth.Consumer = nil + +func getConsumer() *oauth.Consumer { + if consumer == nil { + consumer = oauth.NewConsumer( + consumerKey, + consumerSecret, + oauth.ServiceProvider{ + RequestTokenUrl: "http://api.xrel.to/api/oauth/temp_token", + AuthorizeTokenUrl: "http://api.xrel.to/api/oauth/authorize", + AccessTokenUrl: "http://api.xrel.to/api/oauth/access_token", + }) + consumer.Debug(false) + } + return consumer +} + +func SetOAuthConsumerKeyAndSecret(key, secret string) { + consumerKey = key + consumerSecret = secret +} + +func GetOAuthRequestTokenAndUrl() (*oauth.RequestToken, string, error) { + return getConsumer().GetRequestTokenAndUrl("oob") +} + +func GetOAuthAccessToken(requestToken *oauth.RequestToken, verificationCode string) (*oauth.AccessToken, error) { + return getConsumer().AuthorizeToken(requestToken, verificationCode) +} + +func GetOAuthClient(accessToken oauth.AccessToken) (*http.Client, error) { + return getConsumer().MakeHttpClient(&accessToken); +} \ No newline at end of file diff --git a/api/p2p.go b/src/xREL/p2p.go similarity index 81% rename from api/p2p.go rename to src/xREL/p2p.go index f073cd2..0df64ef 100644 --- a/api/p2p.go +++ b/src/xREL/p2p.go @@ -1,4 +1,4 @@ -package api +package xREL import ( "time" @@ -8,8 +8,7 @@ import ( "net/url" "strconv" "errors" - "github.com/hashworks/xRELTerminalClient/configHandler" - "github.com/hashworks/xRELTerminalClient/api/types" + "./types" ) /** @@ -17,7 +16,7 @@ import ( http://www.xrel.to/wiki/3697/api-p2p-rls-info.html */ -func P2P_GetInfo(query string, isID bool) (types.P2PRelease, error) { +func GetP2PReleaseInfo(query string, isID bool) (types.P2PRelease, error) { var p2pReleaseStruct types.P2PRelease var err error @@ -62,7 +61,7 @@ func P2P_GetInfo(query string, isID bool) (types.P2PRelease, error) { http://www.xrel.to/wiki/3699/api-p2p-releases.html */ -func P2P_GetReleases(perPage, page int, categoryID, groupID, extInfoID string) (types.P2PReleases, error) { +func GetP2PReleases(perPage, page int, categoryID, groupID, extInfoID string) (types.P2PReleases, error) { var p2pReleasesStruct types.P2PReleases parameters := url.Values{} @@ -105,14 +104,12 @@ func P2P_GetReleases(perPage, page int, categoryID, groupID, extInfoID string) ( http://www.xrel.to/wiki/3698/api-p2p-categories.html */ -func P2P_GetCategories() ([]types.P2PCategory, error) { +func GetP2PCategories() ([]types.P2PCategory, error) { var err error // According to xREL we should cache the results for 24h - config, _ := configHandler.GetConfig("") - currentUnix := time.Now().Unix() - if config.LastP2PCategoryRequest == 0 || currentUnix - config.LastP2PCategoryRequest > 86400 || len(config.P2PCategories) == 0 { + if Config.LastP2PCategoryRequest == 0 || currentUnix - Config.LastP2PCategoryRequest > 86400 || len(Config.P2PCategories) == 0 { client := getClient() var response *http.Response response, err = client.Get(apiURL + "p2p/categories.json") @@ -124,14 +121,14 @@ func P2P_GetCategories() ([]types.P2PCategory, error) { bytes, err = ioutil.ReadAll(response.Body) if err == nil { bytes = stripeJSON(bytes) - err = json.Unmarshal(bytes, &config.P2PCategories) + err = json.Unmarshal(bytes, &Config.P2PCategories) if err == nil { - config.LastP2PCategoryRequest = currentUnix + Config.LastP2PCategoryRequest = currentUnix } } } } } - return config.P2PCategories, err + return Config.P2PCategories, err } \ No newline at end of file diff --git a/api/release.go b/src/xREL/release.go similarity index 80% rename from api/release.go rename to src/xREL/release.go index 4259860..a618be4 100644 --- a/api/release.go +++ b/src/xREL/release.go @@ -1,4 +1,4 @@ -package api +package xREL import ( "encoding/json" @@ -7,8 +7,7 @@ import ( "strconv" "time" "errors" - "github.com/hashworks/xRELTerminalClient/configHandler" - "github.com/hashworks/xRELTerminalClient/api/types" + "./types" ) /** @@ -16,7 +15,7 @@ import ( http://www.xrel.to/wiki/1680/api-release-info.html */ -func Release_GetInfo(query string, isID bool) (types.Release, error) { +func GetReleaseInfo(query string, isID bool) (types.Release, error) { var release types.Release if isID { @@ -74,7 +73,7 @@ func getReleases(url string) (types.Releases, error) { http://www.xrel.to/wiki/2994/api-release-latest.html */ -func Release_GetLatest(perPage, page int, filter, archive string) (types.Releases, error) { +func GetLatestReleases(perPage, page int, filter, archive string) (types.Releases, error) { parameters := make(map[string]string) if perPage != 0 { @@ -101,14 +100,11 @@ func Release_GetLatest(perPage, page int, filter, archive string) (types.Release http://www.xrel.to/wiki/2996/api-release-filters.html */ -func Release_GetFilters() ([]types.Filter, error) { +func GetReleaseFilters() ([]types.Filter, error) { var err error - // According to xREL we should cache the results for 24h - config, _ := configHandler.GetConfig("") - currentUnix := time.Now().Unix() - if config.LastFilterRequest == 0 || currentUnix - config.LastFilterRequest > 86400 || len(config.Filters) == 0 { + if Config.LastFilterRequest == 0 || currentUnix - Config.LastFilterRequest > 86400 || len(Config.Filters) == 0 { client := getClient() var response *http.Response response, err = client.Get(apiURL + "release/filters.json") @@ -120,16 +116,16 @@ func Release_GetFilters() ([]types.Filter, error) { bytes, err = ioutil.ReadAll(response.Body) if err == nil { bytes = stripeJSON(bytes) - err = json.Unmarshal(bytes, &config.Filters) + err = json.Unmarshal(bytes, &Config.Filters) if err == nil { - config.LastFilterRequest = currentUnix + Config.LastFilterRequest = currentUnix } } } } } - return config.Filters, err + return Config.Filters, err } /** @@ -139,7 +135,7 @@ func Release_GetFilters() ([]types.Filter, error) { http://www.xrel.to/wiki/3751/api-release-browse-category.html */ -func Release_BrowseCategory(categoryName, extInfoType string, perPage, page int) (types.Releases, error) { +func BrowseReleaseCategory(categoryName, extInfoType string, perPage, page int) (types.Releases, error) { var releasesStruct types.Releases var err error @@ -176,14 +172,11 @@ func Release_BrowseCategory(categoryName, extInfoType string, perPage, page int) http://www.xrel.to/wiki/6318/api-release-categories.html */ -func Release_GetCategories() ([]types.Category, error) { +func GetReleaseCategories() ([]types.Category, error) { var err error - // According to xREL we should cache the results for 24h - config, _ := configHandler.GetConfig("") - currentUnix := time.Now().Unix() - if config.LastCategoryRequest == 0 || currentUnix - config.LastCategoryRequest > 86400 || len(config.Categories) == 0 { + if Config.LastCategoryRequest == 0 || currentUnix - Config.LastCategoryRequest > 86400 || len(Config.Categories) == 0 { client := getClient() var response *http.Response response, err = client.Get(apiURL + "release/categories.json") @@ -195,16 +188,16 @@ func Release_GetCategories() ([]types.Category, error) { bytes, err = ioutil.ReadAll(response.Body) if err == nil { bytes = stripeJSON(bytes) - err = json.Unmarshal(bytes, &config.Categories) + err = json.Unmarshal(bytes, &Config.Categories) if err == nil { - config.LastCategoryRequest = currentUnix + Config.LastCategoryRequest = currentUnix } } } } } - return config.Categories, err + return Config.Categories, err } /** @@ -215,7 +208,7 @@ func Release_GetCategories() ([]types.Category, error) { http://www.xrel.to/wiki/2822/api-release-ext-info.html */ -func Release_ByExtInfo(id string, perPage, page int) (types.Releases, error) { +func GetReleaseByExtInfoId(id string, perPage, page int) (types.Releases, error) { query := "?id=" + id if perPage != 0 { if perPage < 5 { perPage = 5 } diff --git a/api/search.go b/src/xREL/search.go similarity index 92% rename from api/search.go rename to src/xREL/search.go index 6038eaa..a114d2a 100644 --- a/api/search.go +++ b/src/xREL/search.go @@ -1,4 +1,4 @@ -package api +package xREL import ( "errors" @@ -7,7 +7,7 @@ import ( "net/url" "io/ioutil" "encoding/json" - "github.com/hashworks/xRELTerminalClient/api/types" + "./types" ) /** @@ -22,7 +22,7 @@ import ( http://www.xrel.to/wiki/6320/api-search-releases.html */ -func Search_Releases(query string, includeScene, includeP2P bool, limit int) (types.ReleaseSearchResult, error) { +func SearchReleases(query string, includeScene, includeP2P bool, limit int) (types.ReleaseSearchResult, error) { var searchResult types.ReleaseSearchResult var err error @@ -77,7 +77,7 @@ func Search_Releases(query string, includeScene, includeP2P bool, limit int) (ty http://www.xrel.to/wiki/6319/api-search-ext-info.html */ -func Search_ExtInfo(query, extInfoType string, limit int) (types.ExtInfoSearchResult, error) { +func SearchExtInfos(query, extInfoType string, limit int) (types.ExtInfoSearchResult, error) { var searchResult types.ExtInfoSearchResult var err error diff --git a/api/helper.go b/src/xREL/shared.go similarity index 66% rename from api/helper.go rename to src/xREL/shared.go index 4e54ef7..3616544 100644 --- a/api/helper.go +++ b/src/xREL/shared.go @@ -1,15 +1,31 @@ -package api +package xREL import ( "net/http" "errors" "strconv" - "github.com/hashworks/xRELTerminalClient/oauth" - "github.com/hashworks/xRELTerminalClient/configHandler" + "./types" + "github.com/mrjones/oauth" ) const apiURL = "http://api.xrel.to/api/" +var Config = struct { + OAuthAccessToken oauth.AccessToken + + // 24h caching http://www.xrel.to/wiki/6318/api-release-categories.html + LastCategoryRequest int64 + Categories []types.Category + + // 24h caching http://www.xrel.to/wiki/2996/api-release-filters.html + LastFilterRequest int64 + Filters []types.Filter + + // 24h caching http://www.xrel.to/wiki/3698/api-p2p-categories.html + LastP2PCategoryRequest int64 + P2PCategories []types.P2PCategory +}{} + /** xREL JSON responses are surrounded /*-secure-\n{"payload":\n and their closings. The following removes this. Follow the xREL API changelog, @@ -34,13 +50,13 @@ func getClient() *http.Client { Returns an OAuth client */ func getOAuthClient() (*http.Client, error) { - var client *http.Client + var client *http.Client + var err error - config, err := configHandler.GetConfig("") - if err == nil && config.OAuthAccessToken.Token != "" && config.OAuthAccessToken.Secret != "" { - client, err = oauth.GetOAuthClient(config.OAuthAccessToken) + if err == nil && Config.OAuthAccessToken.Token != "" && Config.OAuthAccessToken.Secret != "" { + client, err = GetOAuthClient(Config.OAuthAccessToken) } else { - err = errors.New("You're not authenticated, please do so by executing with --authenticate.") + err = errors.New("You're not authenticated.") } return client, err diff --git a/api/types/calendar.go b/src/xREL/types/calendar.go similarity index 100% rename from api/types/calendar.go rename to src/xREL/types/calendar.go diff --git a/api/types/comments.go b/src/xREL/types/comments.go similarity index 100% rename from api/types/comments.go rename to src/xREL/types/comments.go diff --git a/api/types/common.go b/src/xREL/types/common.go similarity index 100% rename from api/types/common.go rename to src/xREL/types/common.go diff --git a/api/types/extInfo.go b/src/xREL/types/extInfo.go similarity index 100% rename from api/types/extInfo.go rename to src/xREL/types/extInfo.go diff --git a/api/types/favs.go b/src/xREL/types/favs.go similarity index 100% rename from api/types/favs.go rename to src/xREL/types/favs.go diff --git a/api/types/p2p.go b/src/xREL/types/p2p.go similarity index 100% rename from api/types/p2p.go rename to src/xREL/types/p2p.go diff --git a/api/types/release.go b/src/xREL/types/release.go similarity index 100% rename from api/types/release.go rename to src/xREL/types/release.go diff --git a/api/types/search.go b/src/xREL/types/search.go similarity index 100% rename from api/types/search.go rename to src/xREL/types/search.go diff --git a/api/types/user.go b/src/xREL/types/user.go similarity index 100% rename from api/types/user.go rename to src/xREL/types/user.go diff --git a/api/user.go b/src/xREL/user.go similarity index 88% rename from api/user.go rename to src/xREL/user.go index 938426b..3698ede 100644 --- a/api/user.go +++ b/src/xREL/user.go @@ -1,10 +1,10 @@ -package api +package xREL import ( "encoding/json" "io/ioutil" "net/http" - "github.com/hashworks/xRELTerminalClient/api/types" + "./types" ) /** @@ -13,7 +13,7 @@ import ( http://www.xrel.to/wiki/1718/api-user-get-authd-user.html */ -func User_GetAuthdUser() (types.User, error) { +func GetAuthdUser() (types.User, error) { var user types.User client, err := getOAuthClient() @@ -43,7 +43,7 @@ func User_GetAuthdUser() (types.User, error) { http://www.xrel.to/wiki/1795/api-user-rate-limit-status.html */ -func User_RateLimitStatus() (types.RateLimitStatus, error) { +func GetRateLimitStatus() (types.RateLimitStatus, error) { var rateLimitStatus types.RateLimitStatus client := getClient()